提供 SPI 总线与设备的注册、配置与数据传输接口
更多...
|
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_message * | rt_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 连续发送两段数据 更多...
|
|
提供 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] | name | SPI 设备名称 |
[in] | bus_name | 要挂载的 SPI 总线名称 |
[in] | cs_pin | SPI 设备所使用的片选引脚 |
[in] | user_data | 用户自定义数据指针 |
- 返回值
-
RT_EOK | 成功 |
-RT_ERROR | 未找到指定总线,或总线类型不匹配,或设备为空,或设备名称重复 |
◆ rt_spi_configure()
配置 SPI 设备参数
设置 SPI 设备的模式、数据宽度、时钟等参数
- 参数
-
[in] | device | SPI 设备结构体指针 |
[in] | cfg | SPI 设备配置结构体指针 |
- 返回值
-
◆ rt_spi_transfer_message()
在 SPI 总线上传输一组消息
本函数用于在指定 SPI 设备上传输一组 SPI 消息(message链表), 支持多条消息连续传输
- 参数
-
[in] | device | 指向目标 SPI 设备的指针 |
[in] | message | 指向待传输的 SPI 消息链表头 |
- 返回值
-
RT_NULL | 消息列表发送成功 |
!RT_NULL | 消息列表发送失败,返回未完成的消息指针 |
SPI 发送和接收数据
向 SPI 总线发送数据并同时接收数据(全双工模式)
- 参数
-
[in] | device | SPI 设备指针 |
[in] | send_buf | 发送缓冲区指针,可为 NULL |
[out] | recv_buf | 接收缓冲区指针,可为 NULL |
[in] | length | 要传输的数据长度(字节) |
- 返回值
-
- 注解
- 发送和接收缓冲区都为 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] | device | SPI 设备指针 |
[in] | senddata | 要发送的 8 位数据 |
[out] | recvdata | 指向接收 8 位返回数据的指针 |
- 返回值
-
◆ 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] | device | SPI 设备指针 |
[in] | senddata | 要发送的 16 位数据 |
[out] | recvdata | 指向接收 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] | device | SPI 设备指针 |
[in] | send_buf | 要发送的数据缓冲区指针 |
[in] | send_length | 发送的数据长度(字节) |
[out] | recv_buf | 接收数据的缓冲区指针 |
[in] | recv_length | 接收的数据长度(字节) |
- 返回值
-
◆ 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] | device | SPI 设备指针 |
[in] | send_buf1 | 第一段发送缓冲区 |
[in] | send_length1 | 第一段数据长度(字节) |
[in] | send_buf2 | 第二段发送缓冲区 |
[in] | send_length2 | 第二段数据长度(字节) |
- 返回值
-