跳转至

spi

SPI (Serial Peripheral Interface) 提供串行外设接口通信功能,支持主机和从机模式下的全双工数据传输,支持轮询、DMA、中断等多种传输方式。

头文件清单

#include "include/driver/spi.h"

接口清单

接口名称 功能简述
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

errcode_t uapi_spi_init(spi_bus_t bus, spi_attr_t *attr, spi_extra_attr_t *extra_attr)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 初始化指定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

errcode_t uapi_spi_deinit(spi_bus_t bus)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 去初始化指定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

errcode_t uapi_spi_set_tmod(spi_bus_t bus, hal_spi_trans_mode_t tmod, uint8_t data_frame_num)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 设置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

errcode_t uapi_spi_set_attr(spi_bus_t bus, spi_attr_t *attr)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 设置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

errcode_t uapi_spi_get_attr(spi_bus_t bus, spi_attr_t *attr)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 读取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

void uapi_spi_set_interrupt_mask(spi_bus_t bus, uint32_t mask_val)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 设置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

void uapi_spi_clear_all_interrupt(spi_bus_t bus)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 清除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

errcode_t uapi_spi_set_extra_attr(spi_bus_t bus, spi_extra_attr_t *extra_attr)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 设置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

errcode_t uapi_spi_get_extra_attr(spi_bus_t bus, spi_extra_attr_t *extra_attr)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 读取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

errcode_t uapi_spi_select_slave(spi_bus_t bus, spi_slave_t cs)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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

errcode_t uapi_spi_master_write(spi_bus_t bus, const spi_xfer_data_t *data, uint32_t timeout)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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

errcode_t uapi_spi_master_read(spi_bus_t bus, const spi_xfer_data_t *data, uint32_t timeout)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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

errcode_t uapi_spi_master_writeread(spi_bus_t bus, const spi_xfer_data_t *data, uint32_t timeout)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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

errcode_t uapi_spi_slave_write(spi_bus_t bus, const spi_xfer_data_t *data, uint32_t timeout)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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

errcode_t uapi_spi_slave_read(spi_bus_t bus, const spi_xfer_data_t *data, uint32_t timeout)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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

errcode_t uapi_spi_slave_writeread(spi_bus_t bus, const spi_xfer_data_t *data, uint32_t timeout)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 在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

errcode_t uapi_spi_set_dma_mode(spi_bus_t bus, bool en, const spi_dma_config_t *dma_cfg)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 使能或去使能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)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 设置是否使用中断模式传输数据
  • 注册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

errcode_t uapi_spi_set_loop_back_mode(spi_bus_t bus, bool loopback_en)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 设置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)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 设置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

errcode_t uapi_spi_suspend(uintptr_t arg)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 挂起所有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

errcode_t uapi_spi_resume(uintptr_t arg)

头文件清单

#include "include/driver/spi.h"

功能说明

  • 恢复所有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

typedef uint32_t errcode_t;

使用说明

作为SPI模块所有返回errcode_t的接口的返回值类型。

spi_attr_t

typedef hal_spi_attr_t spi_attr_t;

使用说明

作为 uapi_spi_inituapi_spi_set_attruapi_spi_get_attr 接口的参数类型。

spi_extra_attr_t

typedef hal_spi_extra_attr_t spi_extra_attr_t;

使用说明

作为 uapi_spi_inituapi_spi_set_extra_attruapi_spi_get_extra_attr 接口的参数类型。

spi_xfer_data_t

typedef hal_spi_xfer_data_t spi_xfer_data_t;

使用说明

作为SPI数据传输接口的参数类型。

spi_dma_tx_callback_t

typedef void (*spi_dma_tx_callback_t)(uint8_t channel);

使用说明

SPI DMA发送数据的完成回调函数,在中断上下文中执行。通过 uapi_spi_set_dma_mode 注册到驱动中。参数channel为DMA通道号,回调返回值不被检查。

spi_dma_rx_callback_t

typedef void (*spi_dma_rx_callback_t)(uint8_t channel);

使用说明

SPI DMA接收数据的完成回调函数,在中断上下文中执行。通过 uapi_spi_set_dma_mode 注册到驱动中。参数channel为DMA通道号,回调返回值不被检查。

spi_tx_callback_t

typedef void (*spi_tx_callback_t)(const void *buffer, uint32_t length);

使用说明

SPI发送数据的回调函数,在中断上下文中执行。通过 uapi_spi_set_irq_mode 注册到驱动中。buffer指向缓冲区的指针,由写接口函数的参数传入。length为写入的数据长度。

spi_rx_callback_t

typedef void (*spi_rx_callback_t)(const void *buffer, uint32_t length, bool error);

使用说明

SPI接收数据的回调函数,在中断上下文中执行。通过 uapi_spi_set_irq_mode 注册到驱动中。buffer指向缓冲区的指针,由读取接口函数的参数传入。length为读取到的数据长度。error表示SPI传输是否存在错误(RX溢出错误、RX下限溢出错误)。

spi_crc_err_callback_t

typedef void (*spi_crc_err_callback_t)(spi_bus_t bus);

使用说明

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

typedef struct hal_spi_xfer_sspi_param {
    uint32_t wait_cycles;
} hal_spi_xfer_sspi_param_t;

成员说明

成员名称 数据类型 描述
wait_cycles uint32_t 等待的周期数

Macros

ERRCODE_SUCC

#define ERRCODE_SUCC 0UL

SPI_BUS_MAX_NUM

#define SPI_BUS_MAX_NUM  3

SPI_RX_FULL_INT

#define SPI_RX_FULL_INT (0x1)

SPI_RX_OVERFLOW_INT

#define SPI_RX_OVERFLOW_INT (0x1 << 2)

SPI_RX_UNDERFLOW_INT

#define SPI_RX_UNDERFLOW_INT (0x1 << 3)

SPI_TX_EMPTY_INT

#define SPI_TX_EMPTY_INT (0x1 << 4)

SPI_TX_OVERFLOW_INT

#define SPI_TX_OVERFLOW_INT (0x1 << 5)

ERRCODE_SPI_CONFIG_FAIL

#define ERRCODE_SPI_CONFIG_FAIL 0x80001330

ERRCODE_SPI_REG_ADDR_INVALID

#define ERRCODE_SPI_REG_ADDR_INVALID 0x80001331

ERRCODE_SPI_MODE_MISMATCH

#define ERRCODE_SPI_MODE_MISMATCH 0x80001332

ERRCODE_SPI_TIMEOUT

#define ERRCODE_SPI_TIMEOUT 0x80001333

ERRCODE_SPI_RX_FIFO_FULL

#define ERRCODE_SPI_RX_FIFO_FULL 0x80001334

ERRCODE_SPI_SLAVE_SELECT_INVALID

#define ERRCODE_SPI_SLAVE_SELECT_INVALID 0x80001335

ERRCODE_SPI_DMA_CONFIG_ERROR

#define ERRCODE_SPI_DMA_CONFIG_ERROR 0x80001336

ERRCODE_SPI_DMA_TRANSFER_ERROR

#define ERRCODE_SPI_DMA_TRANSFER_ERROR 0x80001337

ERRCODE_SPI_INVALID_BYTES

#define ERRCODE_SPI_INVALID_BYTES 0x80001338

ERRCODE_SPI_STATE_MISMATCH

#define ERRCODE_SPI_STATE_MISMATCH 0x8000133A

ERRCODE_SPI_ADD_QUEUE_FAIL

#define ERRCODE_SPI_ADD_QUEUE_FAIL 0x8000133B

ERRCODE_SPI_DMA_IRQ_MODE_MUTEX

#define ERRCODE_SPI_DMA_IRQ_MODE_MUTEX 0x8000133C

ERRCODE_SPI_INVALID_TMODE

#define ERRCODE_SPI_INVALID_TMODE 0x8000133D

ERRCODE_SPI_BUSY

#define ERRCODE_SPI_BUSY 0x8000133E