实时线程上SPI的移植与实践

作为通信协议的两个基础,IIC和SPI被广泛使用。最后一篇文章谈到了IIC对RTT的移植和实践。看完IIC,自然有SPI相关的内容。基于此,本文将详细阐述实时线程上SPI的移植和实践。SPI的通信原理无需详细描述。百度一搜索,相应的知识点就清晰了。本文的主要内容是解释RTThread上SPI的一些细节。总的来说,我觉得RTThread的代码级别和每个设备驱动的核心文件都相当优秀。这不是广告,而是真的谁知道谁在用。随着慢慢学习,你会逐渐爱上它,你不得不赞美RTThread。的确,优秀来自于长期的积累和升华。好了,让我们开始这篇文章的主要介绍。

1.RTThread上的SPI设备“在线”

这里是“在线”,你可能会好奇。这只是我自己的理解。与RTThread设备的IIC总线不同,IIC总线注册后可以直接使用,SPI总线注册后相当于在内核中,还需要多一步。我对“在线”的理解是得到操作,即需要将SPI设备挂载到总线上才能进行相关操作。下面是代码中的细节。

rtthread是什么(rtthread实例)-编程之家

注册:register函数,与内核系统中注册的其他设备是同一个例程。

“在线”:bus _attach_device,设备挂载在总线上,占用总线,通信开始。

以上也可以简单理解为一个过程,1、注册SPI总线,2、初始化相关硬件,3、在SPI总线上挂载设备,4、开始通信。

2.RTThread上的器件SPI

主文件分为三个部分,一个硬件驱动层:drv_spi.c,一个内核控制层spi_core.c,一个抽象层spi_dev.c三个文件分工明确,结构清晰。结合相关官方文件,参考rtthread设备驱动的相关架构,很容易理解这些文件中相关驱动的内容。以下是相关的工程文件。

rtthread是什么(rtthread实例)-编程之家

内核的相关内容和相关功能显示整体清晰,局部细节有内涵,整体感觉RTThread相当优秀,层次清晰明了,值得学习和研究。相关功能和功能细节也可以在官方文件中查阅,以获得相关的专业解释。

rtthread是什么(rtthread实例)-编程之家

内核与硬件之间的交互驱动也简洁明了一目了然。SPI也是一种通信协议,所以IIC的相关学科也是如此。与IIC驱动相比,读、写、控制多了一项与设备上总线初始化相关的功能,主要是设备与总线之间的相关绑定内容。详见下图。

rtthread是什么(rtthread实例)-编程之家

3、RTThread设备SPI通信板级实践3.1、板级硬件

结合Demo板的原理图,芯片的硬件SPI1总线配备了两个器件,一个是flash,GD25Q16,另一个是LCD。两个SPI器件通过不同的GPIO引脚完成芯片选择。后续的板级实现主要是Flash的SPI控制实践。

rtthread是什么(rtthread实例)-编程之家

3.2.SPI实践

SPI硬件对应GPIO功能设置,自然这些都是按规格相关操作,GPIO相关AF功能设置,以及对应的芯片数据表都有投诉,可以参考。

rtthread是什么(rtthread实例)-编程之家

SPI配置,包括SPI模式、SPI位宽、SPI最大传输频率等参数。

rtthread是什么(rtthread实例)-编程之家

3.3公共汽车登记

下图为RTThread发现的设备,包括IIC总线、SPI总线和对应的GPIO设备。

rtthread是什么(rtthread实例)-编程之家

3.4.设备“在线”

“spi10”是“spi1”上的0号器件。查看list_device,我们发现了一个新设备“spi10”,它是一个安装在spi总线上的Flash设备。

rtthread是什么(rtthread实例)-编程之家

结合自定义的SPI设备名称(当然这里的名称可以修改),执行设备挂载在SPI总线上,可以在设备列表中看到自定义的SPI设备。结合下面两张图,可以清晰地练习SPI总线和SPI设备的发现和“在线”。

rtthread是什么(rtthread实例)-编程之家

3.5.读取SPI设备的芯片号

通过相关的地址读取FlashID和共享例程,实现了两次SPI操作读取FlashID。

rtthread是什么(rtthread实例)-编程之家

4.摘要

通过学习和实践,感觉RTThread优秀而不简单,路漫漫其修远兮。还是需要保持自上而下的搜索心态,认真学习和体验这款实时操作系统的魅力,在后续坚持学以致用。文章中肯定有很多不完善的地方和不恰当的表达,希望大家给我提点建议。谢谢你。最后附上工程实践代码。

原标题:设备SPI移植及在RTThread上的实践

作者:颜正新1

这篇文章是一篇21世纪的获奖散文。详见21ic论坛活动区:万元红包3354蓝V达人二等奖征文活动。如果你也有兴趣参加征文,欢迎来论坛~