$darkmode
RuiChing API 参考手册
V0.9.1

提供 SPI 总线与设备的注册、配置与数据传输接口 更多...

结构体

struct  rt_spi_device
 SPI 总线结构体 更多...
 
struct  rt_spi_configuration
 SPI 配置结构体 更多...
 
struct  rt_spi_message
 SPI 消息结构体 更多...
 

宏定义

#define RT_SPI_CPHA   (1<<0)
 时钟相位选择 更多...
 
#define RT_SPI_CPOL   (1<<1)
 时钟极性选择 更多...
 
#define RT_SPI_MODE_0   (0 | 0)
 SPI模式0:CPOL=0,CPHA=0
 
#define RT_SPI_MODE_1   (0 | RT_SPI_CPHA)
 SPI模式1:CPOL=0,CPHA=1
 
#define RT_SPI_MODE_2   (RT_SPI_CPOL | 0)
 SPI模式2:CPOL=1,CPHA=0
 
#define RT_SPI_MODE_3   (RT_SPI_CPOL | RT_SPI_CPHA)
 SPI模式3:CPOL=1,CPHA=1
 

函数

rt_err_t rt_spi_bus_attach_device_cspin (struct rt_spi_device *device, const char *name, const char *bus_name, rt_base_t cs_pin, void *user_data)
 挂载 SPI 设备并指定片选引脚 更多...
 
rt_err_t rt_spi_configure (struct rt_spi_device *device, struct rt_spi_configuration *cfg)
 配置 SPI 设备参数 更多...
 
struct rt_spi_messagert_spi_transfer_message (struct rt_spi_device *device, struct rt_spi_message *message) rt_ssize_t rt_spi_transfer(struct rt_spi_device *device
 在 SPI 总线上传输一组消息 更多...
 
rt_err_t rt_spi_sendrecv8 (struct rt_spi_device *device, rt_uint8_t senddata, rt_uint8_t *recvdata)
 SPI 传输单个 8 位数据 更多...
 
rt_err_t rt_spi_sendrecv16 (struct rt_spi_device *device, rt_uint16_t senddata, rt_uint16_t *recvdata)
 SPI 传输单个 16 位数据 更多...
 
rt_err_t rt_spi_send_then_recv (struct rt_spi_device *device, const void *send_buf, rt_size_t send_length, void *recv_buf, rt_size_t recv_length)
 SPI 发送后接收 更多...
 
rt_err_t rt_spi_send_then_send (struct rt_spi_device *device, const void *send_buf1, rt_size_t send_length1, const void *send_buf2, rt_size_t send_length2)
 SPI 连续发送两段数据 更多...
 

变量

struct rt_spi_message const void * send_buf
 
struct rt_spi_message const void void * recv_buf
 
struct rt_spi_message const void void rt_size_t length
 

详细描述

提供 SPI 总线与设备的注册、配置与数据传输接口

宏定义说明

◆ RT_SPI_CPHA

#define RT_SPI_CPHA   (1<<0)

时钟相位选择

当 CPOL=0 时,时钟的基线电平为低电平(0):

  • 对于 CPHA=0,数据在时钟上升沿(低->高)采样,在下降沿(高->低)输出
  • 对于 CPHA=1,数据在时钟下降沿采样,在上升沿输出

当 CPOL=1 时,时钟的基线电平为高电平(1,与 CPOL=0 相反):

  • 对于 CPHA=0,数据在时钟下降沿采样,在上升沿输出
  • 对于 CPHA=1,数据在时钟上升沿采样,在下降沿输出

◆ RT_SPI_CPOL

#define RT_SPI_CPOL   (1<<1)

时钟极性选择

当 CPOL=0 时,时钟的基线电平为低电平(0):

  • 对于 CPHA=0,数据在时钟上升沿(低->高)采样,在下降沿(高->低)输出
  • 对于 CPHA=1,数据在时钟下降沿采样,在上升沿输出

当 CPOL=1 时,时钟的基线电平为高电平(1,与 CPOL=0 相反):

  • 对于 CPHA=0,数据在时钟下降沿采样,在上升沿输出
  • 对于 CPHA=1,数据在时钟上升沿采样,在下降沿输出

函数说明

◆ rt_spi_bus_attach_device_cspin()

rt_err_t rt_spi_bus_attach_device_cspin ( struct rt_spi_device device,
const char *  name,
const char *  bus_name,
rt_base_t  cs_pin,
void *  user_data 
)

挂载 SPI 设备并指定片选引脚

挂载 SPI 设备到指定总线,并配置片选引脚(cs_pin)

参数
[out]device要初始化并挂载的 SPI 设备结构体指针
[in]nameSPI 设备名称
[in]bus_name要挂载的 SPI 总线名称
[in]cs_pinSPI 设备所使用的片选引脚
[in]user_data用户自定义数据指针
返回值
RT_EOK成功
-RT_ERROR未找到指定总线,或总线类型不匹配,或设备为空,或设备名称重复

◆ rt_spi_configure()

rt_err_t rt_spi_configure ( struct rt_spi_device device,
struct rt_spi_configuration cfg 
)

配置 SPI 设备参数

设置 SPI 设备的模式、数据宽度、时钟等参数

参数
[in]deviceSPI 设备结构体指针
[in]cfgSPI 设备配置结构体指针
返回值
RT_EOK成功
!RT_EOK失败

◆ rt_spi_transfer_message()

struct rt_spi_message* rt_spi_transfer_message ( struct rt_spi_device device,
struct rt_spi_message message 
)

在 SPI 总线上传输一组消息

本函数用于在指定 SPI 设备上传输一组 SPI 消息(message链表), 支持多条消息连续传输

参数
[in]device指向目标 SPI 设备的指针
[in]message指向待传输的 SPI 消息链表头
返回值
RT_NULL消息列表发送成功
!RT_NULL消息列表发送失败,返回未完成的消息指针

SPI 发送和接收数据

向 SPI 总线发送数据并同时接收数据(全双工模式)

参数
[in]deviceSPI 设备指针
[in]send_buf发送缓冲区指针,可为 NULL
[out]recv_buf接收缓冲区指针,可为 NULL
[in]length要传输的数据长度(字节)
返回值
>0 实际发送的数据长度(字节数)
0发送失败
注解
  • 发送和接收缓冲区都为 NULL 时无意义,应至少提供一个缓冲区

◆ rt_spi_sendrecv8()

rt_err_t rt_spi_sendrecv8 ( struct rt_spi_device device,
rt_uint8_t  senddata,
rt_uint8_t *  recvdata 
)

SPI 传输单个 8 位数据

发送一个字节并接收返回值(如读取寄存器内容)

参数
[in]deviceSPI 设备指针
[in]senddata要发送的 8 位数据
[out]recvdata指向接收 8 位返回数据的指针
返回值
RT_EOK成功
!RT_EOK失败

◆ rt_spi_sendrecv16()

rt_err_t rt_spi_sendrecv16 ( struct rt_spi_device device,
rt_uint16_t  senddata,
rt_uint16_t *  recvdata 
)

SPI 传输单个 16 位数据

发送一个 16 位数据并接收返回值(适用于 16 位数据帧)

参数
[in]deviceSPI 设备指针
[in]senddata要发送的 16 位数据
[out]recvdata指向接收 16 位返回数据的指针
返回值
RT_EOK成功
!RT_EOK失败
警告
  • SPI 控制器必须配置为 16 位帧格式

◆ rt_spi_send_then_recv()

rt_err_t rt_spi_send_then_recv ( struct rt_spi_device device,
const void *  send_buf,
rt_size_t  send_length,
void *  recv_buf,
rt_size_t  recv_length 
)

SPI 发送后接收

向 SPI 总线发送一段数据后立即接收另一段数据

参数
[in]deviceSPI 设备指针
[in]send_buf要发送的数据缓冲区指针
[in]send_length发送的数据长度(字节)
[out]recv_buf接收数据的缓冲区指针
[in]recv_length接收的数据长度(字节)
返回值
RT_EOK成功
!RT_EOK失败

◆ rt_spi_send_then_send()

rt_err_t rt_spi_send_then_send ( struct rt_spi_device device,
const void *  send_buf1,
rt_size_t  send_length1,
const void *  send_buf2,
rt_size_t  send_length2 
)

SPI 连续发送两段数据

向 SPI 总线连续发送两段不同的数据,不包含中间 CS 脱落

参数
[in]deviceSPI 设备指针
[in]send_buf1第一段发送缓冲区
[in]send_length1第一段数据长度(字节)
[in]send_buf2第二段发送缓冲区
[in]send_length2第二段数据长度(字节)
返回值
RT_EOK成功
!RT_EOK失败