基于Linux的SPI通信方法及系统与流程
- 国知局
- 2024-08-22 14:54:23
本发明涉及通信,具体涉及基于linux的spi通信方法及系统。
背景技术:
1、spi(serial peripheral interface,串行外设接口)总线是一种接口总线,用于在主设备和从设备之间提供全双工同步串行通信,通常用于与闪存、传感器、实时时钟、模数转换器等进行通信。对于嵌入式linux系统,spi通信是在linux工作线程里执行的。目前,spi通信系统支持的功能越来越广泛,同一个spi总线上挂载的设备越来越多,spi通信负载也变的越来越重,一些及时性要求较高的设备会因等待较长时间而无法及时收发spi消息,进而影响spi通信效率。
技术实现思路
1、本发明的目的之一在于提供一种基于linux的spi通信方法,以解决现有技术中的及时性要求较高的设备会因等待较长时间而无法及时收发spi消息,进而影响spi通信效率的问题;目的之二在于提供一种基于linux的spi通信系统。
2、为了实现上述目的,本发明采用的技术方案如下:
3、一种基于linux的spi通信方法,用于在linux主机端和外设端之间进行spi通信,linux主机端配置有linux系统,外设端包括多个spi设备,多个spi设备均通过物理spi总线与linux主机端连接并进行数据传输,linux系统配置有用于管理物理spi总线的spi总线控制器,linux系统的内核中创建有spi设备驱动和spi总线控制器驱动,其特征在于,该spi通信方法包括以下步骤:
4、将多个spi设备按照优先级分配为第一数量的设备组,同一个设备组中的spi设备具有相同的优先级;
5、在内核中创建第一数量的虚拟spi总线控制器驱动,
6、对虚拟spi总线控制器驱动进行初始化,每个虚拟spi总线控制器驱动注册生成虚拟spi总线并创建对应的消息队列;
7、虚拟spi总线控制器驱动的设备树获得物理spi总线的总线号,以使虚拟spi总线获得物理spi总线的总线号,同时在虚拟spi总线控制器驱动的设备树获得代表对应的设备组的优先级的优先级编号,以将设备组的优先级分配给对应的虚拟spi总线控制器驱动;
8、进行设备驱动初始化,将第一数量的设备组分别挂载在第一数量的虚拟spi总线上;
9、在内核中创建消息处理线程;
10、对挂载在虚拟spi总线上的spi设备发起spi传输;
11、调用与虚拟spi总线对应的虚拟spi总线控制器驱动的transfer函数,将待传输的数据添加到该虚拟spi总线控制器驱动的消息队列中,同时唤醒消息处理线程;
12、消息处理线程按照优先级由高到底依次将第一数量的虚拟spi总线控制器驱动的消息队列中的消息发送至spi总线控制器驱动;
13、spi总线控制器驱动通过物理spi总线将消息发送至对应的spi设备。
14、根据上述技术手段,通过定义多个spi设备的优先级,并在内核中创建多个优先级的虚拟spi总线控制器驱动,对高优先级的spi设备发送的消息可添加至高优先级的虚拟spi总线控制器驱动的消息队列中,消息处理线程可优先将高优先级的虚拟spi总线控制器驱动的消息队列中的消息发送至spi总线控制器驱动,然后通过spi总线将消息发送至对应的spi设备。因此,较高优先级的spi设备总是比较低优先级的spi设备优先进行通信,避免了较高优先级的设备因等待较长时间而无法及时收发spi消息,进而影响spi通信效率的问题。
15、进一步地,创建虚拟spi总线控制器驱动的方法包括:调用控制器注册函数创建虚拟spi总线控制器驱动。
16、根据上述技术手段,通过控制器注册函数能够方便地创建第一数量的虚拟spi总线控制器驱动。
17、进一步地,消息处理线程按照优先级从高到底依次将第一数量的虚拟spi总线控制器驱动的消息队列中的消息发送至spi总线控制器驱动的方法包括:消息处理线程按照优先级从高到最低遍历所有的虚拟spi总线控制器驱动,并依次将存储有消息的消息队列中的所有消息发送至spi总线控制器驱动,直至所有的消息队列都为空,消息处理线程转入睡眠状态,等待下次传输时被唤醒。
18、根据上述技术手段,消息处理线程能够快速寻找到消息队列非空的最高优先级的虚拟spi总线控制器驱动。
19、进一步地,第一数量的设备组包括第一设备组和第二设备组,第一设备组中的spi设备具有较高优先级,第二设备组中的spi设备具有较低优先级。
20、根据上述技术手段,将多个spi设备分配为两个设备组,减少了优先级的数量,进而能够简化后续操作流程。
21、进一步地,第一设备组中的spi设备包括实时时钟。
22、根据上述技术手段,确保实时时钟能够及时进行通信,从而确保spi通信的时间准确性。
23、进一步地,spi传输为spi同步传输或spi异步传输。
24、根据上述技术手段,该spi通信方法适用于同步传输和异步传输。
25、进一步地,将设备组挂载在虚拟spi总线上的方法包括:将设备组中的所有spi设备对应的spi设备驱动通过虚拟spi总线连接至spi总线控制器驱动。
26、根据上述技术手段,提供一种将设备组挂载在虚拟spi总线上的方法。
27、进一步地,spi设备驱动用于根据指定函数寻找虚拟总线上挂载的设备以进行设备匹配。
28、根据上述技术手段,spi设备驱动通过虚拟总线进行设备匹配,进而通过虚拟总线开始spi通信。
29、一种基于linux的spi通信系统,包括linux主机端和外设端,linux主机端配置有linux系统,外设端包括多个spi设备,多个spi设备均通过物理spi总线与主机端连接并进行数据传输,linux系统配置有用于管理物理spi总线的spi总线控制器,内核中创建有spi设备驱动和spi总线控制器驱动,
30、其中,内核中还创建有第一数量的虚拟spi总线控制器驱动,每个虚拟spi总线控制器驱动用于注册生成虚拟spi总线并创建对应的消息队列;
31、多个spi设备按照优先级分配为第一数量的设备组,第一数量的设备组分别挂载在第一数量的虚拟spi总线上;
32、spi设备驱动通过虚拟spi总线连接spi总线控制器驱动并用于根据指定函数寻找虚拟总线上挂载的设备以进行设备匹配;
33、内核中还创建有消息处理线程,消息处理线程用于按照优先级由高到底依次将第一数量的虚拟spi总线控制器驱动的消息队列中的消息发送至spi总线控制器驱动。
34、根据上述技术手段,可自定义多个spi设备的优先级,对高优先级的spi设备发送的消息可添加至高优先级的虚拟spi总线控制器驱动的消息队列中,消息处理线程可优先将高优先级的虚拟spi总线控制器驱动的消息队列中的消息发送至spi总线控制器驱动,然后通过spi总线将消息发送至对应的spi设备。因此,挂载在高优先级虚拟spi总线上的spi设备总是比挂载在低优先级虚拟spi总线上的spi设备优先进行通信,避免了较高优先级的设备会因等待较长时间而无法及时收发spi消息,进而影响spi通信效率的问题。
35、进一步地,该spi通信系统用于实现上述的基于linux的spi通信方法。
36、本发明具有以下有益效果:
37、(1)可将及时性要求较高的spi设备定义为较高优先级的spi设备,较高优先级的spi设备总是比较低优先级的spi设备优先进行通信,避免了及时性要求较高的设备因等待较长时间而无法及时收发spi消息,进而提高了spi通信效率;
38、(2)本发明可基于现有的spi通信架构,可通过加载内核驱动模块和修改设备树完成快速部署,无需对设备驱动和控制器驱动进行修改;
39、(3)多个spi设备进行通信时,可按照优先级依次进行,避免数据收发冲突导致出现数据错误。
本文地址:https://www.jishuxx.com/zhuanli/20240822/280340.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表