|
xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
|
版本:0.1 | 日期:2026-07-03 | 路径: platforms/components/xtiny/xt_hal/
xt_hal_spi 是 XTINY HAL SPI Master 驱动模块,提供 SPI 总线的初始化、阻塞/非阻塞读写和全双工传输能力。非阻塞 API 使用零拷贝设计(直接传递用户缓冲区指针),传输完成后通过回调通知。
设计原则 :
| 依赖 | 用途 |
|---|---|
| xt_hal_internal.h | 错误码类型 xt_err_t 及平台内部定义 |
SPI 模式通过以下宏按位或组合:
| 类别 | 宏 | 说明 |
|---|---|---|
| 帧格式 | XT_HAL_SPI_CPOL0_CPHA0 | CPOL=0, CPHA=0(Mode 0) |
| 帧格式 | XT_HAL_SPI_CPOL0_CPHA1 | CPOL=0, CPHA=1(Mode 1) |
| 帧格式 | XT_HAL_SPI_CPOL1_CPHA0 | CPOL=1, CPHA=0(Mode 2) |
| 帧格式 | XT_HAL_SPI_CPOL1_CPHA1 | CPOL=1, CPHA=1(Mode 3) |
| 位序 | XT_HAL_SPI_MSB_FIRST | MSB 优先(默认) |
| 位序 | XT_HAL_SPI_LSB_FIRST | LSB 优先 |
| 数据帧 | XT_HAL_SPI_DATA_BITS_8 | 8 位数据帧(默认) |
| 数据帧 | XT_HAL_SPI_DATA_BITS_16 | 16 位数据帧 |
| 数据帧 | XT_HAL_SPI_DATA_BITS_32 | 32 位数据帧 |
| 特性 | _block | _0copy |
|---|---|---|
| 调用方式 | 同步,等待传输完成 | 异步,立即返回 |
| 缓冲区所有权 | 调用期间保持有效 | 传输完成前保持有效 |
| 回调通知 | 不需要 | 通过 xt_hal_spi_set_cb 注册回调 |
| 适用场景 | 简单快速传输 | 大数据量、需要并行处理 |
xt_hal_spim_txrx_0copy 和 xt_hal_spim_txrx_block 同时发送和接收数据,发送缓冲区和接收缓冲区大小相同。注意:全双工传输在 3 线模式下不支持。
以下为函数签名大纲,完整的参数说明、返回值、注意事项请查看 xt_hal_spi(SPI 驱动) 。
| 函数签名 | 说明 |
|---|---|
| void xt_hal_spi_set_cb(uint8_t spi_id, xt_hal_spi_cb_t cb) | 设置 SPI 传输完成回调 |
| 函数签名 | 说明 |
|---|---|
| int32_t xt_hal_spim_tx_0copy(uint8_t spi_id, const void *tx_buffer, size_t size) | 非阻塞发送,零拷贝 |
| int32_t xt_hal_spim_rx_0copy(uint8_t spi_id, void *rx_buffer, size_t size) | 非阻塞接收,零拷贝 |
| int32_t xt_hal_spim_txrx_0copy(uint8_t spi_id, const void *tx_buffer, void *rx_buffer, size_t size) | 非阻塞全双工传输(3 线模式不支持) |
| 函数签名 | 说明 |
|---|---|
| int32_t xt_hal_spim_tx_block(uint8_t spi_id, const void *tx_buffer, size_t size) | 阻塞发送 |
| int32_t xt_hal_spim_rx_block(uint8_t spi_id, void *rx_buffer, size_t size) | 阻塞接收 |
| int32_t xt_hal_spim_txrx_block(uint8_t spi_id, const void *tx_buffer, void *rx_buffer, size_t size) | 阻塞全双工传输(3 线模式不支持) |
无编译配置项。
| 行为 | 说明 |
|---|---|
| 非阻塞传输忙时返回繁忙 | 同一 SPI 正在传输时再次调用 _0copy 系列返回 XT_EBUSY |
| 缓冲区有效性 | 非阻塞传输期间用户缓冲区必须保持有效,直到回调触发 |
| 全双工在 3 线模式不可用 | MOSI 与 MISO 同引脚时全双工函数行为未定义 |
| CS 引脚可选 | cs_pin 设为 XT_HAL_GPIO_INVALID_ID 时采用手动 CS 控制模式 |
| LSB 优先支持取决于平台 | 部分平台硬件不支持 LSB 优先模式 |
| 速度和分频近似 | 时钟速率通过分频器近似匹配,实际速率可能不等于传入值 |
| 不重复初始化 | 已初始化的 SPI 再次调用 setup 视为错误 |
暂无示例。