|
因为项目上需要使用SPI和SOC通信,所以了解下RTthread的这部分功能。 官方的说明资料: 如何添加SPI外设驱动选项 SPI驱动介绍 rt-thread 的SPI驱动框架的代码主要是\rt-thread\components\drivers\spi文件夹下的spi_core.c和spi_dev.c文件: spi_core.c 和 spi_dev.c是驱动框架的核心代码,spi_core.c 主要实现的是SPI总线的相关的处理,spi_dev.c主要是针对挂载在总线上的设备相关的处理。spi_core.c文件中相关关键函数的说明如下: rt_spi_bus_register(struct rt_spi_bus *bus,const char *name,const struct rt_spi_ops *ops)//像系统注册SPI总线类设备及操作函数
rt_spi_bus_attach_device:往总线上挂载设备
rt_err_t rt_spi_configure(struct rt_spi_device *device, struct rt_spi_configuration *cfg) 设置SPI总线设备参数模式。
rt_spi_send_then_send(),rt_spi_send_then_recv(),rt_spi_transfer(),rt_spi_transfer_message()这几个接口都是用来发送,接收,发送/接收数据的接口具体的实现原理基本相同,rtthread将总线上的传输数据抽象成message的方式就行传送和linux相似,消息发送接收控制的结构如下:
说完了上面的spi驱动框架层的代码,接下来要说的就是需要BSP来实现的东西了,rtt基于stm32的支持已经做的很好了,从\rt-thread\bsp\stm32\libraries\HAL_Drivers路径可知最新的rtt代码中已经包含了SPI相关的底层BSP驱动代码,上面提到的需要BSP给驱动框架注册的函数已经在对应的spi驱动中实现了,如下代码会在board初始化阶段,自动调用其中会对SPI总线进行初始化。
通过以上的分析可以看出来,rtt对SPI的操作已经支持的很到位了,我们只需要看懂代码,根据现有的代码添加设备即可。我们只需要往总线上挂接各设备,传输前配置下参数即可使用,如下是我本地的测试代码,没有驱动具体的芯片,只是使用总线测试的发送数据。
代码编译后,会发现系统里会出现spi1 bus总线设备,spi10设备,通过spi10往总线上发送数据,个人基本不用作什么就可以把SPI设备跑起来,这里感谢下官方的支持,大大减少了开发者的开发时间。本地使用了F446的开发板,示波器看了下发送的数据(CLK和MOSI),和期待的完全一致。
|
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
指摘的对,描述的有些问题,是两个不同类型的设备,总线类型的设备我理解的也是个设备只是设备的类型为总BUS。
SPI 是个双工的通信接口,rt_spi_transfer 接口发送数据的同时也会接收数据,按照手册发送指令数据会在接收数据的buff带回来