spi
SPI (Serial Peripheral Interface) 提供串行外设接口通信功能,支持主机和从机模式下的全双工数据传输,支持轮询、DMA、中断等多种传输方式。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_spi_init | 初始化SPI,配置基础属性和高级属性参数 |
| uapi_spi_deinit | 去初始化SPI,释放指定总线资源 |
| uapi_spi_set_tmod | 设置SPI传输模式及接收数据帧数量 |
| uapi_spi_set_attr | 设置SPI基础配置参数 |
| uapi_spi_get_attr | 读取SPI基础配置参数 |
| uapi_spi_set_interrupt_mask | 设置SPI中断屏蔽值 |
| uapi_spi_clear_all_interrupt | 清除SPI所有中断 |
| uapi_spi_set_extra_attr | 设置SPI高级配置参数 |
| uapi_spi_get_extra_attr | 读取SPI高级配置参数 |
| uapi_spi_select_slave | Master模式下选择Slave设备 |
| uapi_spi_master_write | Master模式写入数据 |
| uapi_spi_master_read | Master模式读取数据 |
| uapi_spi_master_writeread | Master模式写入和读取数据 |
| uapi_spi_master_txrx_transfer | Master模式全双工读写数据 |
| uapi_spi_slave_write | Slave模式写入数据 |
| uapi_spi_slave_read | Slave模式读取数据 |
| uapi_spi_slave_writeread | Slave模式写入和读取数据 |
| uapi_spi_set_dma_mode | 使能/去使能DMA模式SPI传输 |
| uapi_spi_set_irq_mode | 设置中断模式传输数据 |
| uapi_spi_set_loop_back_mode | 设置环回测试模式 |
| uapi_spi_set_crc_mode | 设置SPI发送和接收CRC模式 |
| uapi_spi_suspend | 挂起所有SPI通道 |
| uapi_spi_resume | 恢复所有SPI通道 |
Functions
uapi_spi_init
头文件清单
功能说明
- 初始化指定SPI总线
- 配置SPI基础属性参数,包括时钟极性、时钟相位、帧格式、帧大小、工作频率等
- 配置SPI高级属性参数,包括DMA传输和QSPI/SSPI参数
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| attr | spi_attr_t * | SPI的基础配置参数 | 不为NULL |
| extra_attr | spi_extra_attr_t * | SPI的高级配置参数 | 不为NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 初始化成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
uapi_spi_deinit
头文件清单
功能说明
- 去初始化指定SPI总线
- 释放该总线占用的资源
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 去初始化成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
uapi_spi_set_tmod
头文件清单
功能说明
- 设置SPI传输模式
- 设置接收数据帧数量
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| tmod | hal_spi_trans_mode_t | SPI传输模式 | HAL_SPI_TRANS_MODE_TXRX(0) / HAL_SPI_TRANS_MODE_TX(1) / HAL_SPI_TRANS_MODE_RX(2) / HAL_SPI_TRANS_MODE_EEPROM(3) |
| data_frame_num | uint8_t | SPI RX数据帧的数量 | 0 ~ 255 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_AUTO_TMOD | 特性宏 | 支持SPI自动tmod切换 | n |
uapi_spi_set_attr
头文件清单
功能说明
- 设置SPI基础配置参数
- 包括时钟极性、时钟相位、帧格式、帧大小、工作频率等参数的配置
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| attr | spi_attr_t * | SPI的基础配置参数 | 不为NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
uapi_spi_get_attr
头文件清单
功能说明
- 读取SPI基础配置参数
- 获取当前SPI总线的时钟极性、时钟相位、帧格式、帧大小、工作频率等配置信息
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| attr | spi_attr_t * | SPI的基础配置参数,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 读取成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
uapi_spi_set_interrupt_mask
头文件清单
功能说明
- 设置SPI中断屏蔽值
- 控制哪些中断源被使能或屏蔽
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| mask_val | uint32_t | 中断屏蔽值 | SPI_RX_FULL_INT(0x1) / SPI_RX_OVERFLOW_INT(0x4) / SPI_RX_UNDERFLOW_INT(0x8) / SPI_TX_EMPTY_INT(0x10) / SPI_TX_OVERFLOW_INT(0x20) |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
uapi_spi_clear_all_interrupt
头文件清单
功能说明
- 清除SPI所有中断状态
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
uapi_spi_set_extra_attr
头文件清单
功能说明
- 设置SPI高级配置参数
- 包括DMA传输使能、QSPI参数和SSPI参数的配置
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| extra_attr | spi_extra_attr_t * | SPI的高级配置参数 | 不为NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_QUAD_SPI | 功能宏 | 支持SPI Quad模式 | y |
uapi_spi_get_extra_attr
头文件清单
功能说明
- 读取SPI高级配置参数
- 获取当前SPI总线的DMA传输使能、QSPI参数和SSPI参数等高级配置信息
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| extra_attr | spi_extra_attr_t * | SPI的高级配置参数,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 读取成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_QUAD_SPI | 功能宏 | 支持SPI Quad模式 | y |
uapi_spi_select_slave
头文件清单
功能说明
- 在Master模式下选择需要通信的Slave设备
- 通过指定片选信号选中目标从机
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Master模式
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| cs | spi_slave_t | 被选中的Slave设备 | SPI_SLAVE0(0) / SPI_SLAVE1(1) / SPI_SLAVE2(2) |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 选择成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_MASTER | 功能宏 | 支持SPI Master模式 | y |
uapi_spi_master_write
头文件清单
功能说明
- 在Master模式下向Slave写入数据
- 支持手动切换模式(轮询模式、DMA模式、中断模式)
- 支持自动切换模式(根据数据长度与阈值比较自动切换轮询模式与DMA模式)
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Master模式,且已通过 uapi_spi_select_slave 选择Slave设备
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| data | const spi_xfer_data_t * | 数据传输指针 | 不为NULL |
| timeout | uint32_t | 当前传输的超时时间(轮询模式下为轮询次数;DMA模式为超时时间,单位ms;中断模式参数不生效) | 0 ~ 4294967295 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 写入成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_MASTER | 功能宏 | 支持SPI Master模式 | y |
| CONFIG_SPI_SUPPORT_DMA | 功能宏 | 支持SPI DMA传输 | n |
| CONFIG_SPI_SUPPORT_INTERRUPT | 功能宏 | 支持SPI中断传输 | n |
| CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH | 特性宏 | 支持POLL和DMA自动切换 | n |
| CONFIG_SPI_SUPPORT_CONCURRENCY | 特性宏 | 支持SPI并发 | n |
uapi_spi_master_read
头文件清单
功能说明
- 在Master模式下从Slave读取数据
- 支持手动切换模式(轮询模式、DMA模式、中断模式)
- 支持自动切换模式(根据数据长度与阈值比较自动切换轮询模式与DMA模式)
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Master模式,且已通过 uapi_spi_select_slave 选择Slave设备
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| data | const spi_xfer_data_t * | 数据传输指针 | 不为NULL |
| timeout | uint32_t | 当前传输的超时时间(轮询模式下为轮询次数;DMA模式为超时时间,单位ms;中断模式参数不生效) | 0 ~ 4294967295 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| data | const spi_xfer_data_t * | rx_buff为接收到的数据,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 读取成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_MASTER | 功能宏 | 支持SPI Master模式 | y |
| CONFIG_SPI_SUPPORT_DMA | 功能宏 | 支持SPI DMA传输 | n |
| CONFIG_SPI_SUPPORT_INTERRUPT | 功能宏 | 支持SPI中断传输 | n |
| CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH | 特性宏 | 支持POLL和DMA自动切换 | n |
| CONFIG_SPI_SUPPORT_CONCURRENCY | 特性宏 | 支持SPI并发 | n |
uapi_spi_master_writeread
头文件清单
功能说明
- 在Master模式下写入和读取数据
- 支持手动切换模式(轮询模式、DMA模式、中断模式)
- 支持自动切换模式(根据数据长度与阈值比较自动切换轮询模式与DMA模式)
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Master模式,且已通过 uapi_spi_select_slave 选择Slave设备
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| data | const spi_xfer_data_t * | 数据传输指针 | 不为NULL |
| timeout | uint32_t | 当前传输的超时时间(轮询模式下为轮询次数;DMA模式为超时时间,单位ms;中断模式参数不生效) | 0 ~ 4294967295 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| data | const spi_xfer_data_t * | rx_buff为接收到的数据,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 写读成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_MASTER | 功能宏 | 支持SPI Master模式 | y |
| CONFIG_SPI_SUPPORT_DMA | 功能宏 | 支持SPI DMA传输 | n |
| CONFIG_SPI_SUPPORT_INTERRUPT | 功能宏 | 支持SPI中断传输 | n |
| CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH | 特性宏 | 支持POLL和DMA自动切换 | n |
| CONFIG_SPI_SUPPORT_CONCURRENCY | 特性宏 | 支持SPI并发 | n |
| CONFIG_SPI_SUPPORT_DELAY_FOR_WRITEREAD | 特性宏 | 支持写读之间延迟 | n |
uapi_spi_master_txrx_transfer
errcode_t uapi_spi_master_txrx_transfer(spi_bus_t bus, const spi_xfer_data_t *data, uint32_t timeout)
头文件清单
功能说明
- 在Master模式下进行全双工读写数据
- 同时发送和接收数据
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Master模式,且已通过 uapi_spi_select_slave 选择Slave设备
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| data | const spi_xfer_data_t * | 数据传输指针 | 不为NULL |
| timeout | uint32_t | 当前传输的超时时间 | 0 ~ 4294967295 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| data | const spi_xfer_data_t * | rx_buff为接收到的数据,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 全双工传输成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_MASTER | 功能宏 | 支持SPI Master模式 | y |
| CONFIG_SPI_SUPPORT_TXRX_TRANS_MODE | 功能宏 | 支持SPI收发模式 | n |
uapi_spi_slave_write
头文件清单
功能说明
- 在Slave模式下向Master写入数据
- 支持手动切换模式(轮询模式、DMA模式、中断模式)
- 支持自动切换模式(根据数据长度与阈值比较自动切换轮询模式与DMA模式)
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Slave模式
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| data | const spi_xfer_data_t * | 数据传输指针 | 不为NULL |
| timeout | uint32_t | 当前传输的超时时间(轮询模式下为轮询次数;DMA模式为超时时间,单位ms;中断模式参数不生效) | 0 ~ 4294967295 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 写入成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_SLAVE | 功能宏 | 支持SPI Slave模式 | y |
| CONFIG_SPI_SUPPORT_DMA | 功能宏 | 支持SPI DMA传输 | n |
| CONFIG_SPI_SUPPORT_INTERRUPT | 功能宏 | 支持SPI中断传输 | n |
| CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH | 特性宏 | 支持POLL和DMA自动切换 | n |
| CONFIG_SPI_SUPPORT_CONCURRENCY | 特性宏 | 支持SPI并发 | n |
| CONFIG_SPI_SLAVE_SUPPORT_NOTIFY | 特性宏 | 支持SPI Slave通知 | n |
uapi_spi_slave_read
头文件清单
功能说明
- 在Slave模式下从Master读取数据
- 支持手动切换模式(轮询模式、DMA模式、中断模式)
- 支持自动切换模式(根据数据长度与阈值比较自动切换轮询模式与DMA模式)
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Slave模式
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| data | const spi_xfer_data_t * | 数据传输指针 | 不为NULL |
| timeout | uint32_t | 当前传输的超时时间(轮询模式下为轮询次数;DMA模式为超时时间,单位ms;中断模式参数不生效) | 0 ~ 4294967295 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| data | const spi_xfer_data_t * | rx_buff为接收到的数据,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 读取成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_SLAVE | 功能宏 | 支持SPI Slave模式 | y |
| CONFIG_SPI_SUPPORT_DMA | 功能宏 | 支持SPI DMA传输 | n |
| CONFIG_SPI_SUPPORT_INTERRUPT | 功能宏 | 支持SPI中断传输 | n |
| CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH | 特性宏 | 支持POLL和DMA自动切换 | n |
| CONFIG_SPI_SUPPORT_CONCURRENCY | 特性宏 | 支持SPI并发 | n |
| CONFIG_SPI_SLAVE_SUPPORT_NOTIFY | 特性宏 | 支持SPI Slave通知 | n |
uapi_spi_slave_writeread
头文件清单
功能说明
- 在Slave模式下写入和读取数据
- 支持手动切换模式(轮询模式、DMA模式、中断模式)
- 支持自动切换模式(根据数据长度与阈值比较自动切换轮询模式与DMA模式)
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI配置为Slave模式
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| data | const spi_xfer_data_t * | 数据传输指针 | 不为NULL |
| timeout | uint32_t | 当前传输的超时时间(轮询模式下为轮询次数;DMA模式为超时时间,单位ms;中断模式参数不生效) | 0 ~ 4294967295 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| data | const spi_xfer_data_t * | rx_buff为接收到的数据,由调用方分配内存、函数填充 |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 写读成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_SLAVE | 功能宏 | 支持SPI Slave模式 | y |
| CONFIG_SPI_SUPPORT_DMA | 功能宏 | 支持SPI DMA传输 | n |
| CONFIG_SPI_SUPPORT_INTERRUPT | 功能宏 | 支持SPI中断传输 | n |
| CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH | 特性宏 | 支持POLL和DMA自动切换 | n |
| CONFIG_SPI_SUPPORT_CONCURRENCY | 特性宏 | 支持SPI并发 | n |
| CONFIG_SPI_SUPPORT_DELAY_FOR_WRITEREAD | 特性宏 | 支持写读之间延迟 | n |
| CONFIG_SPI_SLAVE_SUPPORT_NOTIFY | 特性宏 | 支持SPI Slave通知 | n |
uapi_spi_set_dma_mode
头文件清单
功能说明
- 使能或去使能DMA模式下的SPI传输
- 去使能时dma_cfg参数配置为NULL
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖未开启 CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| en | bool | 是否使能DMA传输 | true / false |
| dma_cfg | const spi_dma_config_t * | DMA配置结构体指针,去使能时配置为NULL | 不为NULL(使能时)/ NULL(去使能时) |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_DMA | 功能宏 | 支持SPI DMA传输 | n |
| CONFIG_SPI_SUPPORT_TRANSFER_IN_DMA_ISR | 特性宏 | 支持DMA ISR中传输 | n |
uapi_spi_set_irq_mode
errcode_t uapi_spi_set_irq_mode(spi_bus_t bus, bool irq_en, spi_rx_callback_t rx_callback, spi_tx_callback_t tx_callback)
头文件清单
功能说明
- 设置是否使用中断模式传输数据
- 注册SPI接收和发送完成时的回调函数
- 回调函数在中断上下文中执行
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖未开启 CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| irq_en | bool | 是否使用中断模式 | true / false |
| rx_callback | spi_rx_callback_t | 接收数据完成时的回调函数 | 不为NULL |
| tx_callback | spi_tx_callback_t | 数据发送完成时的回调函数 | 不为NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_INTERRUPT | 功能宏 | 支持SPI中断传输 | n |
uapi_spi_set_loop_back_mode
头文件清单
功能说明
- 设置SPI环回测试模式的使能或去使能
- 环回模式用于SPI通信的自测试验证
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| loopback_en | bool | 环回模式使能/去使能 | true / false |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_LOOPBACK | 功能宏 | 支持SPI环回测试 | n |
uapi_spi_set_crc_mode
errcode_t uapi_spi_set_crc_mode(spi_bus_t bus, const spi_crc_config_t *crc_config, spi_crc_err_callback_t cb)
头文件清单
功能说明
- 设置SPI发送和接收CRC模式
- 配置CRC校验参数
- 注册CRC校验错误回调函数
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| bus | spi_bus_t | 指定的SPI接口 | SPI_BUS_0(0) / SPI_BUS_1(1) / SPI_BUS_2(2) |
| crc_config | const spi_crc_config_t * | 配置SPI的CRC参数 | 不为NULL |
| cb | spi_crc_err_callback_t | CRC检验错误回调函数 | 不为NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 设置成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_CRC | 功能宏 | 支持SPI CRC | n |
uapi_spi_suspend
头文件清单
功能说明
- 挂起所有SPI通道
- 保存SPI控制器状态
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_init 成功返回后调用
- 依赖关系:当前接口依赖SPI总线已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| arg | uintptr_t | 挂起所需要的参数 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 挂起成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_LPM | 特性宏 | 支持SPI低功耗模式 | n |
uapi_spi_resume
头文件清单
功能说明
- 恢复所有SPI通道
- 恢复SPI控制器状态
前置条件
- 调用时序约束:当前接口必须在 uapi_spi_suspend 成功返回后调用
- 依赖关系:当前接口依赖SPI已挂起
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| arg | uintptr_t | 恢复所需要的参数 | - |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 恢复成功 |
| Other | 其他错误码,参考errcode_t | 执行失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DRIVER_SUPPORT_SPI | 编译参与宏 | 控制SPI驱动参与编译 | n |
| CONFIG_SPI_SUPPORT_LPM | 特性宏 | 支持SPI低功耗模式 | n |
Type definitions
errcode_t
使用说明
作为SPI模块所有返回errcode_t的接口的返回值类型。
spi_attr_t
使用说明
作为 uapi_spi_init、uapi_spi_set_attr、uapi_spi_get_attr 接口的参数类型。
spi_extra_attr_t
使用说明
作为 uapi_spi_init、uapi_spi_set_extra_attr、uapi_spi_get_extra_attr 接口的参数类型。
spi_xfer_data_t
使用说明
作为SPI数据传输接口的参数类型。
spi_dma_tx_callback_t
使用说明
SPI DMA发送数据的完成回调函数,在中断上下文中执行。通过 uapi_spi_set_dma_mode 注册到驱动中。参数channel为DMA通道号,回调返回值不被检查。
spi_dma_rx_callback_t
使用说明
SPI DMA接收数据的完成回调函数,在中断上下文中执行。通过 uapi_spi_set_dma_mode 注册到驱动中。参数channel为DMA通道号,回调返回值不被检查。
spi_tx_callback_t
使用说明
SPI发送数据的回调函数,在中断上下文中执行。通过 uapi_spi_set_irq_mode 注册到驱动中。buffer指向缓冲区的指针,由写接口函数的参数传入。length为写入的数据长度。
spi_rx_callback_t
使用说明
SPI接收数据的回调函数,在中断上下文中执行。通过 uapi_spi_set_irq_mode 注册到驱动中。buffer指向缓冲区的指针,由读取接口函数的参数传入。length为读取到的数据长度。error表示SPI传输是否存在错误(RX溢出错误、RX下限溢出错误)。
spi_crc_err_callback_t
使用说明
SPI CRC错误处理回调函数。通过 uapi_spi_set_crc_mode 注册到驱动中。参数bus为发生CRC错误的SPI总线。
Enumerations
spi_bus_t
typedef enum {
SPI_BUS_0 = 0,
SPI_BUS_1,
SPI_BUS_2, /* QSPI */
SPI_BUS_NONE = SPI_BUS_MAX_NUM
} spi_bus_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| SPI_BUS_0 | 0 | SPI总线0 |
| SPI_BUS_1 | 1 | SPI总线1 |
| SPI_BUS_2 | 2 | SPI总线2(QSPI) |
| SPI_BUS_NONE | 3 | 无效SPI总线 |
spi_slave_t
typedef enum spi_slave {
SPI_SLAVE0 = 0,
SPI_SLAVE1,
SPI_SLAVE2,
SPI_SLAVE_MAX_NUM,
SPI_SLAVE_NONE = SPI_SLAVE_MAX_NUM
} spi_slave_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| SPI_SLAVE0 | 0 | SPI Slave索引0 |
| SPI_SLAVE1 | 1 | SPI Slave索引1 |
| SPI_SLAVE2 | 2 | SPI Slave索引2 |
| SPI_SLAVE_MAX_NUM | 3 | SPI Slave最大数量 |
| SPI_SLAVE_NONE | 3 | 无效SPI Slave |
spi_mode_t
typedef enum spi_mode {
SPI_MODE_MASTER,
SPI_MODE_SLAVE,
SPI_MODE_MAX_NUM,
SPI_MODE_NONE = SPI_MODE_MAX_NUM
} spi_mode_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| SPI_MODE_MASTER | 0 | SPI Master模式 |
| SPI_MODE_SLAVE | 1 | SPI Slave模式 |
| SPI_MODE_MAX_NUM | 2 | SPI模式最大值 |
| SPI_MODE_NONE | 2 | 无效SPI模式 |
hal_spi_trans_mode_t
typedef enum hal_spi_trans_mode {
HAL_SPI_TRANS_MODE_TXRX = 0,
HAL_SPI_TRANS_MODE_TX,
HAL_SPI_TRANS_MODE_RX,
HAL_SPI_TRANS_MODE_EEPROM,
HAL_SPI_TRANS_MODE_MAX
} hal_spi_trans_mode_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| HAL_SPI_TRANS_MODE_TXRX | 0 | 收发模式 |
| HAL_SPI_TRANS_MODE_TX | 1 | 发送模式 |
| HAL_SPI_TRANS_MODE_RX | 2 | 接收模式 |
| HAL_SPI_TRANS_MODE_EEPROM | 3 | EEPROM读模式 |
| HAL_SPI_TRANS_MODE_MAX | 4 | 传输模式最大值 |
hal_spi_cfg_frame_format_t
typedef enum hal_spi_cfg_frame_format {
SPI_CFG_FRAME_FORMAT_MOTOROLA_SPI,
SPI_CFG_FRAME_FORMAT_TEXAS_SSP,
SPI_CFG_FRAME_FORMAT_NS_MICROWIRE,
SPI_CFG_FRAME_FORMAT_MAX
} hal_spi_cfg_frame_format_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| SPI_CFG_FRAME_FORMAT_MOTOROLA_SPI | 0 | 摩托罗拉SPI帧格式 |
| SPI_CFG_FRAME_FORMAT_TEXAS_SSP | 1 | 德州仪器SSP帧格式 |
| SPI_CFG_FRAME_FORMAT_NS_MICROWIRE | 2 | 国家微线帧格式 |
| SPI_CFG_FRAME_FORMAT_MAX | 3 | 帧格式最大值 |
hal_spi_cfg_clk_cpol_t
typedef enum hal_spi_cfg_clk_cpol {
SPI_CFG_CLK_CPOL_0,
SPI_CFG_CLK_CPOL_1,
SPI_CFG_CLK_CPOL_MAX
} hal_spi_cfg_clk_cpol_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| SPI_CFG_CLK_CPOL_0 | 0 | SPI的非激活状态为低电平 |
| SPI_CFG_CLK_CPOL_1 | 1 | SPI的非激活状态为高电平 |
| SPI_CFG_CLK_CPOL_MAX | 2 | 时钟极性最大值 |
hal_spi_cfg_clk_cpha_t
typedef enum hal_spi_cfg_clk_cpha {
SPI_CFG_CLK_CPHA_0,
SPI_CFG_CLK_CPHA_1,
SPI_CFG_CLK_CPHA_MAX
} hal_spi_cfg_clk_cpha_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| SPI_CFG_CLK_CPHA_0 | 0 | SPI时钟在第一个数据位中间切换 |
| SPI_CFG_CLK_CPHA_1 | 1 | SPI时钟在第一个数据位开始时切换 |
| SPI_CFG_CLK_CPHA_MAX | 2 | 时钟相位最大值 |
hal_spi_cfg_sste_t
typedef enum hal_spi_cfg_sste {
SPI_CFG_SSTE_DISABLE,
SPI_CFG_SSTE_ENABLE,
SPI_CFG_SSTE_MAX
} hal_spi_cfg_sste_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| SPI_CFG_SSTE_DISABLE | 0 | SPI从机选择切换不使能,主机从从机读取数据时需一次性读完 |
| SPI_CFG_SSTE_ENABLE | 1 | SPI从机选择切换使能 |
| SPI_CFG_SSTE_MAX | 2 | SSTE最大值 |
hal_spi_frame_size_t
typedef enum hal_spi_frame_size {
HAL_SPI_FRAME_SIZE_8 = 0x07,
HAL_SPI_FRAME_SIZE_16 = 0x0F,
HAL_SPI_FRAME_SIZE_24 = 0x17,
HAL_SPI_FRAME_SIZE_32 = 0x1F
} hal_spi_frame_size_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| HAL_SPI_FRAME_SIZE_8 | 0x07 | 8-位串行数据传输 |
| HAL_SPI_FRAME_SIZE_16 | 0x0F | 16-位串行数据传输(暂不支持) |
| HAL_SPI_FRAME_SIZE_24 | 0x17 | 24-位串行数据传输(暂不支持) |
| HAL_SPI_FRAME_SIZE_32 | 0x1F | 32-位串行数据传输 |
hal_spi_frame_format_t
typedef enum hal_spi_frame_format {
HAL_SPI_FRAME_FORMAT_STANDARD = 0,
HAL_SPI_FRAME_FORMAT_DUAL,
HAL_SPI_FRAME_FORMAT_QUAD,
HAL_SPI_FRAME_FORMAT_OCTAL,
HAL_SPI_FRAME_FORMAT_DOUBLE_OCTAL,
HAL_SPI_FRAME_FORMAT_SIXT,
HAL_SPI_FRAME_FORMAT_MAX_NUM,
HAL_SPI_FRAME_FORMAT_NONE = HAL_SPI_FRAME_FORMAT_MAX_NUM
} hal_spi_frame_format_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| HAL_SPI_FRAME_FORMAT_STANDARD | 0 | 标准的单线SPI帧格式 |
| HAL_SPI_FRAME_FORMAT_DUAL | 1 | 双线SPI帧格式 |
| HAL_SPI_FRAME_FORMAT_QUAD | 2 | 4线SPI帧格式 |
| HAL_SPI_FRAME_FORMAT_OCTAL | 3 | 8线SPI帧格式 |
| HAL_SPI_FRAME_FORMAT_DOUBLE_OCTAL | 4 | 16线SPI帧格式 |
| HAL_SPI_FRAME_FORMAT_SIXT | 5 | - |
| HAL_SPI_FRAME_FORMAT_MAX_NUM | 6 | 帧格式最大值 |
| HAL_SPI_FRAME_FORMAT_NONE | 6 | 无帧格式 |
hal_spi_trans_type_t
typedef enum hal_spi_trans_type {
HAL_SPI_TRANS_TYPE_INST_S_ADDR_S = 0,
HAL_SPI_TRANS_TYPE_INST_S_ADDR_Q,
HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,
HAL_SPI_TRANS_TYPE_MAX = HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q
} hal_spi_trans_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| HAL_SPI_TRANS_TYPE_INST_S_ADDR_S | 0 | 指令和地址使用单线SPI传输 |
| HAL_SPI_TRANS_TYPE_INST_S_ADDR_Q | 1 | 指令使用单线SPI传输,地址按照帧格式寄存器的配置传输 |
| HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q | 2 | 指令和地址都按照帧格式寄存器的配置传输 |
hal_spi_inst_len_t
typedef enum hal_spi_inst_len {
HAL_SPI_INST_LEN_0 = 0,
HAL_SPI_INST_LEN_4,
HAL_SPI_INST_LEN_8,
HAL_SPI_INST_LEN_16,
HAL_SPI_INST_LEN_MAX = HAL_SPI_INST_LEN_16
} hal_spi_inst_len_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| HAL_SPI_INST_LEN_0 | 0 | 不携带指令 |
| HAL_SPI_INST_LEN_4 | 1 | 4-位指令 |
| HAL_SPI_INST_LEN_8 | 2 | 8-位指令 |
| HAL_SPI_INST_LEN_16 | 3 | 16-位指令 |
hal_spi_addr_len_t
typedef enum hal_spi_addr_len {
HAL_SPI_ADDR_LEN_0 = 0,
HAL_SPI_ADDR_LEN_4,
HAL_SPI_ADDR_LEN_8,
HAL_SPI_ADDR_LEN_12,
HAL_SPI_ADDR_LEN_16,
HAL_SPI_ADDR_LEN_20,
HAL_SPI_ADDR_LEN_24,
HAL_SPI_ADDR_LEN_28,
HAL_SPI_ADDR_LEN_32,
HAL_SPI_ADDR_LEN_36,
HAL_SPI_ADDR_LEN_40,
HAL_SPI_ADDR_LEN_44,
HAL_SPI_ADDR_LEN_48,
HAL_SPI_ADDR_LEN_52,
HAL_SPI_ADDR_LEN_56,
HAL_SPI_ADDR_LEN_60,
HAL_SPI_ADDR_LEN_MAX = HAL_SPI_ADDR_LEN_60
} hal_spi_addr_len_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| HAL_SPI_ADDR_LEN_0 | 0 | 0-位地址长度 |
| HAL_SPI_ADDR_LEN_4 | 1 | 4-位地址长度 |
| HAL_SPI_ADDR_LEN_8 | 2 | 8-位地址长度 |
| HAL_SPI_ADDR_LEN_12 | 3 | 12-位地址长度 |
| HAL_SPI_ADDR_LEN_16 | 4 | 16-位地址长度 |
| HAL_SPI_ADDR_LEN_20 | 5 | 20-位地址长度 |
| HAL_SPI_ADDR_LEN_24 | 6 | 24-位地址长度 |
| HAL_SPI_ADDR_LEN_28 | 7 | 28-位地址长度 |
| HAL_SPI_ADDR_LEN_32 | 8 | 32-位地址长度 |
| HAL_SPI_ADDR_LEN_36 | 9 | 36-位地址长度 |
| HAL_SPI_ADDR_LEN_40 | 10 | 40-位地址长度 |
| HAL_SPI_ADDR_LEN_44 | 11 | 44-位地址长度 |
| HAL_SPI_ADDR_LEN_48 | 12 | 48-位地址长度 |
| HAL_SPI_ADDR_LEN_52 | 13 | 52-位地址长度 |
| HAL_SPI_ADDR_LEN_56 | 14 | 56-位地址长度 |
| HAL_SPI_ADDR_LEN_60 | 15 | 60-位地址长度 |
Structures
spi_dma_config_t
typedef struct spi_dma_config {
uint8_t src_width;
uint8_t dest_width;
uint8_t burst_length;
uint8_t priority;
#if defined(CONFIG_SPI_SUPPORT_TRANSFER_IN_DMA_ISR)
spi_dma_rx_callback_t rx_done_callback;
spi_dma_tx_callback_t tx_done_callback;
#endif
} spi_dma_config_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| src_width | uint8_t | 源端传输数据宽度,0:1字节,1:2字节,2:4字节 |
| dest_width | uint8_t | 目的端传输数据宽度,0:1字节,1:2字节,2:4字节 |
| burst_length | uint8_t | 每次目的burst请求时写入目的端的数据量,0:burst长度是1,1:burst长度是4,2:burst长度是8,3:burst长度是16 |
| priority | uint8_t | 传输通道优先级,最小为0,最大为3 |
| rx_done_callback | spi_dma_rx_callback_t | 接收数据完成时的回调函数(依赖 CONFIG_SPI_SUPPORT_TRANSFER_IN_DMA_ISR) |
| tx_done_callback | spi_dma_tx_callback_t | 数据发送完成时的回调函数(依赖 CONFIG_SPI_SUPPORT_TRANSFER_IN_DMA_ISR) |
spi_crc_config_t
typedef struct spi_crc_config {
uint32_t tx_crc_len;
uint32_t rx_crc_len;
uint32_t tx_crc_ini;
uint32_t rx_crc_ini;
uint32_t tx_crc_poly;
uint32_t rx_crc_poly;
uint32_t tx_crc_xor_out;
uint32_t rx_crc_xor_out;
bool tx_crc_refin;
bool tx_crc_refout;
bool rx_crc_refin;
bool rx_crc_refout;
} spi_crc_config_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| tx_crc_len | uint32_t | 逻辑在此长度之前发送CRC验证数据 |
| rx_crc_len | uint32_t | 逻辑在此长度之前接收CRC验证数据 |
| tx_crc_ini | uint32_t | tx初始化值配置 |
| rx_crc_ini | uint32_t | rx初始化值配置 |
| tx_crc_poly | uint32_t | tx多项式配置 |
| rx_crc_poly | uint32_t | rx多项式配置 |
| tx_crc_xor_out | uint32_t | tx结果异或配置 |
| rx_crc_xor_out | uint32_t | rx结果异或配置 |
| tx_crc_refin | bool | tx输入值翻转配置 |
| tx_crc_refout | bool | tx输出值翻转配置 |
| rx_crc_refin | bool | rx输入值翻转配置 |
| rx_crc_refout | bool | rx输出值翻转配置 |
hal_spi_attr_t
typedef struct hal_spi_attr {
bool is_slave;
uint32_t slave_num;
uint32_t bus_clk;
uint32_t freq_mhz;
#ifdef CONFIG_SPI_SUPPORT_HZ
uint32_t freq_hz;
#endif
uint32_t clk_polarity;
uint32_t clk_phase;
uint32_t frame_format;
uint32_t spi_frame_format;
uint32_t frame_size;
uint32_t tmod;
uint32_t ndf;
uint32_t sste;
} hal_spi_attr_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| is_slave | bool | SPI工作模式,false为Master,true为Slave |
| slave_num | uint32_t | 选择从机时的索引,0:不选择,1:从机索引0,2:从机索引1 |
| bus_clk | uint32_t | 用于计算SPI的时钟分频系数 |
| freq_mhz | uint32_t | SPI的工作频率(MHz),freq_mhz和freq_hz只能有一个非零且有效 |
| freq_hz | uint32_t | SPI的工作频率(Hz),freq_mhz和freq_hz只能有一个非零且有效(依赖 CONFIG_SPI_SUPPORT_HZ) |
| clk_polarity | uint32_t | SPI的时钟极性,参考 hal_spi_cfg_clk_cpol_t |
| clk_phase | uint32_t | SPI的时钟相位,参考 hal_spi_cfg_clk_cpha_t |
| frame_format | uint32_t | 串行传输协议,参考 hal_spi_cfg_frame_format_t |
| spi_frame_format | uint32_t | SPI的帧格式,参考 hal_spi_frame_format_t |
| frame_size | uint32_t | SPI的帧长度,参考 hal_spi_frame_size_t |
| tmod | uint32_t | SPI的传输模式,参考 hal_spi_trans_mode_t |
| ndf | uint32_t | SPI的数据帧数 |
| sste | uint32_t | SPI从机选择切换使能/不使能,参考 hal_spi_cfg_sste_t |
hal_spi_extra_attr_t
typedef struct hal_spi_extra_attr {
bool tx_use_dma;
bool rx_use_dma;
hal_spi_xfer_qspi_param_t qspi_param;
hal_spi_xfer_sspi_param_t sspi_param;
} hal_spi_extra_attr_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| tx_use_dma | bool | SPI是否使用DMA发送数据 |
| rx_use_dma | bool | SPI是否使用DMA接收数据 |
| qspi_param | hal_spi_xfer_qspi_param_t | QSPI参数,参考 hal_spi_xfer_qspi_param_t |
| sspi_param | hal_spi_xfer_sspi_param_t | Single SPI参数,参考 hal_spi_xfer_sspi_param_t |
hal_spi_xfer_data_t
typedef struct hal_spi_xfer_data {
uint8_t *tx_buff;
uint32_t tx_bytes;
uint8_t *rx_buff;
uint32_t rx_bytes;
uint8_t cmd;
uint8_t reserved[3];
#ifdef CONFIG_SPI_SLAVE_SUPPORT_NOTIFY
slave_notify_callback notify_callback;
void *privdata;
#endif
uint32_t addr;
} hal_spi_xfer_data_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| tx_buff | uint8_t * | 通过tx fifo发送数据的Buff |
| tx_bytes | uint32_t | 发送数据的个数。frame_size为HAL_SPI_FRAME_SIZE_8时需为1的倍数,HAL_SPI_FRAME_SIZE_16时需为2的倍数,HAL_SPI_FRAME_SIZE_24时需为3的倍数,HAL_SPI_FRAME_SIZE_32时需为4的倍数 |
| rx_buff | uint8_t * | 通过rx fifo接收数据的Buff |
| rx_bytes | uint32_t | 接收数据的个数。frame_size为HAL_SPI_FRAME_SIZE_8时需为1的倍数,HAL_SPI_FRAME_SIZE_16时需为2的倍数,HAL_SPI_FRAME_SIZE_24时需为3的倍数,HAL_SPI_FRAME_SIZE_32时需为4的倍数 |
| cmd | uint8_t | QSPI模式下的命令 |
| reserved | uint8_t[3] | 保留 |
| notify_callback | slave_notify_callback | slave通知master发送时钟或数据(依赖 CONFIG_SPI_SLAVE_SUPPORT_NOTIFY) |
| privdata | void * | 私有数据(依赖 CONFIG_SPI_SLAVE_SUPPORT_NOTIFY) |
| addr | uint32_t | QSPI模式下的地址 |
hal_spi_xfer_qspi_param_t
typedef struct hal_spi_xfer_qspi_param {
hal_spi_trans_type_t trans_type;
hal_spi_inst_len_t inst_len;
hal_spi_addr_len_t addr_len;
uint32_t wait_cycles;
} hal_spi_xfer_qspi_param_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| trans_type | hal_spi_trans_type_t | 传输类型,用于指定指令和地址的长度,参考 hal_spi_trans_type_t |
| inst_len | hal_spi_inst_len_t | 指令长度,支持0、4、8、16位,参考 hal_spi_inst_len_t |
| addr_len | hal_spi_addr_len_t | 地址长度,支持0、8、16、24、32位,参考 hal_spi_addr_len_t |
| wait_cycles | uint32_t | 等待的周期数 |
hal_spi_xfer_sspi_param_t
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| wait_cycles | uint32_t | 等待的周期数 |