SPI Driver

[中文]

Overview

SPI (Serial Peripheral Interface) is a synchronous serial bus widely used for high-speed device communications.

Functional Description

  • Multiple SPI instances

  • Modes 0-3, 3/4-wire, configurable bit width and order

  • Interrupts for RX/TX, DMA support

  • Synchronous/async transfers, full-duplex

Development Guide

  1. Init: bk_spi_driver_init(), then bk_spi_init(id, &cfg)

  2. Sync I/O: bk_spi_transmit()

  3. Async I/O: bk_spi_write() / bk_spi_read() and ISR

  4. DMA: bk_spi_dma_read/write/transmit

Notes

  • Match CPOL/CPHA with the device

  • Tune clock for signal integrity

API Reference

  • bk_spi_driver_init/deinit, bk_spi_init/deinit

  • bk_spi_set_mode/bit_width/wire_mode/baud_rate/bit_order

  • bk_spi_enable_*_interrupt, bk_spi_register_*_isr

  • bk_spi_transmit, bk_spi_write, bk_spi_read, bk_spi_duplex_transfer

  • bk_spi_dma_read, bk_spi_dma_write, bk_spi_dma_transmit

Examples

Synchronous transfer to read JEDEC ID:

uint8_t tx[2] = {0x9F, 0x00}, rx[2] = {0};
bk_spi_transmit(SPI_ID_0, tx, sizeof(tx), rx, sizeof(rx));

Error Codes

  • BK_ERR_SPI_NOT_INIT, BK_ERR_SPI_INVALID_ID, BK_ERR_SPI_ID_NOT_INIT