一种基于spi的通信方法、从设备及系统
技术领域
1.本发明属于通信领域,特别涉及一种基于spi的通信方法、从设备及系统。
背景技术:
2.随着电子设备的不断升级迭代,单个微控制单元以及无法满足性能的要求,很多场景下都引入了多个微控制单元协同处理的方案。而多个微控制单元之间通讯,则是通过spi(serialperipheral interface,串行外设接口)通信协议来实现的,由于spi通信技术是全双工通信的,现有技术中spi通信通过微控制单元的四个管脚来实现,但四个管脚实现的spi通信方法存在从设备不能主动发送数据,要由主设备定时发送空包数据,从设备才能往外部发送数据被主设备来读取。
3.为了解决上述问题,使得能够实现多个微控制单元协同处理,普遍采用较多额外的gpio(general-purposeintput/output)管脚来进行数据双向高速、稳定的传输,而额外增加四个辅助管脚会导致管脚资源紧张,消耗较大的空间,对于pcb的布局十分不便。
4.现有的方案存在着需要较多额外的管脚的缺点,比较浪费硬件资源,且缺乏应答机制确认主设备是否接收到数据,因此本领域技术人员有动机开发一种基于spi的通信方法。
技术实现要素:
5.本发明所要解决的技术问题在于,提供了一种基于spi的通信方法,利用较少管脚的硬件资源,降低主从设备的工作量,提高了传输效率。
6.为了解决上述技术问题,本发明提供了一种基于spi的通信方法,包括:
7.当需要向主设备发送数据时,从设备改变int管脚的电平,以使所述主设备改变cs管脚的电平;其中,所述主设备与所述从设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚和int管脚;
8.当侦测到所述cs管脚的电平发生改变后,所述从设备通过控制miso管脚的电平,向所述主设备发送待发送数据;
9.当确定无需向所述主设备发送数据时,所述从设备恢复所述int管脚的电平。
10.进一步地,所述当侦测到所述cs管脚的电平发生改变后,所述从设备通过控制miso管脚的电平,向所述主设备发送待发送数据,具体为:
11.当侦测到所述cs管脚的电平发生改变后,所述从设备将待发送数据打包成若干份数据包,将数据包存入从设备spi硬件寄存器中;
12.每当一份数据包存入从设备spi硬件寄存器中时,所述从设备通过改变所述miso管脚的电平,将数据包通过miso管脚发送至所述主设备,发送结束后所述从设备将加载预设的中断处理函数,从而恢复miso管脚的电平。
13.进一步地,所述当确定无需向所述主设备发送数据时,所述从设备恢复所述int管脚的电平,具体为:
14.当确定无需向所述主设备发送数据时,所述从设备写入一份空包数据存于从设备spi硬件寄存器中,并恢复所述int管脚的电平。
15.进一步地,当侦测到所述cs管脚的电平发生改变后,所述从设备还可以通过控制ready管脚的电平,向所述主设备发送待发送数据;其中,所述主设备与所述从设备之间还连接有ready管脚。
16.同时,本发明还提供一种基于spi的从设备,包括:管脚电平控制模块和数据发送模块;其中,所述从设备与主设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚和int管脚;
17.所述管脚电平控制模块用于当需要向主设备发送数据时,改变int管脚的电平,以使所述主设备改变cs管脚的电平;以及用于当确定无需向所述主设备发送数据时,恢复所述int管脚的电平;
18.所述数据发送模块用于当侦测到所述cs管脚的电平发生改变后,通过控制miso管脚的电平,向所述主设备发送待发送数据。
19.进一步地,所述数据发送模块用于当侦测到所述cs管脚的电平发生改变后,通过控制miso管脚的电平,向所述主设备发送待发送数据,具体为:
20.所述数据发送模块用于当侦测到所述cs管脚的电平发生改变后,将待发送数据打包成若干份数据包,将数据包存入从设备spi硬件寄存器中;
21.每当一份数据包存入从设备spi硬件寄存器中时,通过改变所述miso管脚的电平,将数据包通过miso管脚发送至所述主设备,发送结束后将加载预设的中断处理函数,从而恢复miso管脚的电平;
22.其中,所述数据发送模块每当发送一份数据包至所述主设备,通过mosi接收所述主设备发送的一包空包数据。
23.进一步地,所述管脚电平控制模块用于当确定无需向所述主设备发送数据时,恢复所述int管脚的电平,具体为:
24.所述管脚电平控制模块用于当确定无需向所述主设备发送数据时,写入一份空包数据存于从设备spi硬件寄存器中,并恢复所述int管脚的电平。
25.同时,本发明还提供一种基于spi的通信系统,包括主设备和从设备;所述主设备与所述从设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚和int管脚;
26.所述从设备执行如上所述任意一项的基于spi的通信方法。
27.进一步地,包括以下步骤:
28.当所述主设备有待发送数据给从设备时,所述主设备改变所述cs管脚的电平;
29.所述从设备侦测到所述cs管脚的电平发生改变后,控制所述miso管脚的电平;
30.所述主设备将待发送数据打包成待若干份数据包,将数据包存入主设备spi硬件寄存器中;
31.每当一份数据包存入主设备spi硬件寄存器中时,所述主设备将数据包通过所述mosi管脚发送至所述从设备,发送结束后所述主设备恢复cs电平,直至所有数据包都发送给从设备;
32.每当发送一份数据包至所述从设备,所述主设备通过miso接收所述从设备发送的一包空包数据。
33.进一步地,还包括以下步骤:
34.当所述从设备有待发送数据给主设备时,所述从设备改变所述int管脚的电平,以使所述主设备改变cs管脚的电平;
35.所述从设备侦测到所述cs管脚的电平发生改变后,将待发送数据打包成待若干份数据包,将数据包存入从设备spi硬件寄存器中;
36.每当一份数据包存入从设备spi硬件寄存器中时,所述从设备通过改变所述miso管脚的电平,将数据包通过miso管脚发送至所述主设备,发送结束后所述从设备将加载预设的中断处理函数,从而恢复miso管脚的电平;
37.每当发送一份数据包至所述主设备,所述从设备通过mosi接收所述主设备发送的一包空包数据;
38.当确定无需向所述主设备发送数据时,所述从设备写入一份空包数据存于从设备spi硬件寄存器中,并恢复所述int管脚的电平。
39.实施本技术实施例,具有如下的有益效果:
40.本发明提供的一种基于spi的通信方法,与现有技术相比,仅额外增加了一个int管脚,实现主从设备之间的无线通信,便能实现主从设备之间spi的全双工通信,节约了管脚硬件资源,且依据int管脚的电平变化,使得主设备做出响应,即可实现从设备主动发送数据来由主设备读取,从而使数据传输的效率明显提高。
41.进一步地,本发明所提供的基于spi主从设备间的通信方法,使得主从设备间的工作量,使数据传输的效率明显提高,主设备无需定时发送空包数据才能读取从设备往外部发送数据,从设备可直接依据int管脚来实现数据包主动发送,同时还具备利用电平信号的恢复来达到确认主设备是否接收到数据的应答机制。
附图说明
42.图1是本发明实施例所提供的一种基于spi的通信方法的步骤流程图;
43.图2是本发明实施例所提供的一种基于spi的通信方法的时序图;
44.图3是本发明实施例所提供的一种基于spi的通信方法中主设备和从设备之间的连接结构图;
45.图4是本发明实施例所提供的一种基于spi的从设备的结构图;
46.图5是本发明实施例所提供的一种基于spi的通信系统的主设备发送数据的步骤流程图;
47.图6是本发明实施例所提供的一种基于spi的通信系统的主设备发送数据的时序图;
48.图7是本发明实施例所提供的一种基于spi的通信系统的从设备发送数据的步骤流程图;
49.图8是本发明另实施例所提供的一种基于spi的通信系统的主从设备间六线接法的连接结构图;
50.图9是本发明另实施例所提供的一种基于spi的通信系统的六线接法的主设备发送数据的步骤流程图;
51.图10是本发明另实施例所提供的一种基于spi的通信系统的六线接法的主设备发
送数据的时序图;
52.图11是本发明另实施例所提供的一种基于spi的通信系统的六线接法的从设备发送数据的步骤流程图;
53.图12是本发明另实施例所提供的一种基于spi的通信系统的六线接法的从设备发送数据的时序图;
54.图13是本发明实施例所提供的一种基于spi的通信系统的五线接法的主从设备间发送数据的流程图。
具体实施方式
55.为了使本发明的目的、技术方案及优点更加清楚明白,以下将结合本发明中的附图,对本发明实施例中的技术方案进行进一步详细说明。显然,此所描述的实施例仅是本发明一部分实施例,而不是全部实施例,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所用其他实施例,都属于本发明保护的范围。
56.实施例一
57.请参阅图1,其是本发明实施例提供的一种基于spi的通信方法,包括以下步骤:
58.s101:当需要向主设备发送数据时,从设备改变int管脚的电平,以使所述主设备改变cs管脚的电平;其中,所述主设备与所述从设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚和int管脚。
59.请参阅图2和图3,cs管脚为片选信号管脚,clk管脚为时钟管脚,mosi管脚为主设备输出管脚,miso管脚为从设备输出管脚,int管脚为主从设备间其中额外连接的gpio管脚,int管脚用于触发中断信号,主从设备包括但不限于mcu芯片、单片机等spi处理器芯片。
60.在实际情况中,根据不同的spi处理器芯片,各个管脚的电平拉高或拉低的情况有所不同,但其本质仍是触发该管脚的电平发生变化。
61.在本实施例中,从设备无法触发传输时序,只能由主设备触发传输时序,所以当从设备需要向主设备发送数据时,需要从设备拉低int管脚的电平,以使所述主设备拉低cs管脚的电平。
62.s102:当侦测到所述cs管脚的电平发生改变后,所述从设备通过控制miso管脚的电平,向所述主设备发送待发送数据。
63.具体地,当侦测到所述cs管脚的电平发生改变后,所述从设备将待发送数据打包成若干份数据包,将数据包存入从设备spi硬件寄存器03中,需要说明的是,本实施例提到的数据包指的是spi硬件单次传输所能传的最大数据量,为了提高传输效率,每次都是满包传输,假如在最后一次是不能满包的话,则将剩余的数据作为一个数据包进行传输。
64.请参阅图2和图3,在本实施例中,当从设备侦测到所述cs管脚的电平拉低后,待发送数据存储于从设备缓冲区04中,在从设备缓冲区04中将待发送的数据打包成若干份数据包,每次将一份数据包存入从设备spi硬件寄存器03中。
65.每当一份数据包存入从设备spi硬件寄存器03中时,所述从设备通过改变所述miso管脚的电平,将数据包通过miso管脚发送至所述主设备,发送结束后所述从设备将加载预设的中断处理函数,从而恢复miso管脚的电平。
66.在本实施例中,每当一份数据包存入从设备spi硬件寄存器03中时,从设备通过拉低miso管脚的电平,将数据包通过miso管脚发送至所述主设备中,如图2所示,发送结束后从设备将加载预设的中断处理函数,从而拉高miso管脚的电平,拉高miso管脚的电平是为了让主设备知道从设备已经发送数据完毕,主设备不能再从从设备处读取数据。
67.在本实施例中,主设备每接收完从设备发送的一份数据包后都会拉高cs管脚的电平,而从设备每发送完一份数据包后都会拉高miso管脚,当下一份数据包存入从设备spi硬件寄存器中时,从设备通过拉低miso管脚的电平,触发主设备拉低cs管脚,从而实现下一个数据包的发送。
68.进一步地,每当发送一份数据包至所述主设备,所述从设备通过mosi接收所述主设备发送的一包空包数据。
69.spi通信为全双工通信,即每当从设备于miso管脚发送一份数据包至主设备,主设备也会于mosi管脚发送一份数据包至从设备,该过程是根据不同的管脚而同时进行的,且从设备发送的数据包大小与主设备发送的数据包大小均相同,当从设备通过miso管脚向主设备发送数据的过程中,而主设备也有可能往从设备发送的是空包数据。
70.s103:当确定无需向所述主设备发送数据时,所述从设备恢复所述int管脚的电平。
71.具体地,当确定无需向所述主设备发送数据时,所述从设备写入一份空包数据存于从设备spi硬件寄存器03中,并恢复所述int管脚的电平。
72.请参阅图2和图3,在本实施例中,当所有的数据包发送完毕后,所述从设备写入一份空包数据存于从设备spi硬件寄存器03中,发送至主设备,来表示当前已无数据发送,同时拉高int管脚的电平。
73.同时,请参阅图3和图4,本发明还提供一种基于spi的从设备,包括:管脚电平控制模块201和数据发送模块202;其中,所述从设备与主设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚和int管脚。
74.管脚电平控制模块201用于当需要向主设备发送数据时,改变int管脚的电平,以使所述主设备改变cs管脚的电平;以及用于当确定无需向所述主设备发送数据时,恢复所述int管脚的电平。
75.具体地,所述管脚电平控制模块201用于当确定无需向所述主设备发送数据时,写入一份空包数据存于从设备spi硬件寄存器03中,并恢复所述int管脚的电平。
76.数据发送模块202用于当侦测到所述cs管脚的电平发生改变后,通过控制miso管脚的电平,向所述主设备发送待发送数据。
77.具体地,数据发送模块202用于当侦测到所述cs管脚的电平拉低后,将待发送数据打包成若干份数据包,将数据包存入从设备spi硬件寄存器03中。
78.每当一份数据包存入从设备spi硬件寄存器03中时,数据发送模块202通过拉低miso管脚的电平,数据包通过miso管脚发送至主设备结束后将加载预设的中断处理函数,从而恢复miso管脚的电平;其中,所述数据发送模块每当发送一份数据包至所述主设备,通过mosi接收所述主设备发送的一包空包数据。
79.本实施例所提供的基于spi的从设备能够基于从设备是否有数据需要发送至主设备,通过控制int管脚的电平来主动使主设备响应,以此将从设备所需要发送的数据传输至
主设备读取,解决了现有技术中主设备无需定时发送空包数据才能读取从设备往外部发送数据,本方案使得主从设备间的工作量降低,使数据传输的效率明显提高。
80.同时,请参阅图3,本发明还提供一种基于spi的通信系统,包括主设备和从设备;所述主设备与所述从设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚和int管脚;
81.从设备执行如上所述任意一项的基于spi的通信方法。
82.进一步地,请参阅图3、图5和图6,包括以下步骤:
83.s201:当主设备有待发送数据给从设备时,主设备改变cs管脚的电平。
84.s202:从设备侦测到cs管脚的电平发生改变后,控制miso管脚的电平。
85.s203:主设备将待发送数据打包成待若干份数据包,将数据包存入主设备spi硬件寄存器02中。
86.s204:每当一份数据包存入主设备spi硬件寄存器02中时,主设备将数据包通过mosi管脚发送至从设备,发送结束后主设备恢复cs电平,直至所有数据包都发送给从设备。
87.需要注意的是,主设备发送数据给从设备的过程中可能存在从设备处于休眠状态,所述休眠状态即双工通信无法同步进行,也就是说主设备可以发送数据至从设备,但是此刻的从设备处于休眠状态,无法设置数据ready状态或者是清除了ready状态,此时需要做的就是唤醒从设备的ready状态,可以通过拉mosi管脚的电平刺激从设备作出反应,从而唤醒从设备。
88.s205:每当发送一份数据包至从设备,主设备通过miso接收从设备发送的一包空包数据。
89.进一步地,请参阅图2、图3和图7,还包括以下步骤:
90.s301:当从设备有待发送数据给主设备时,从设备改变int管脚的电平,以使主设备改变cs管脚的电平。
91.s302:从设备侦测到cs管脚的电平发生改变后,将待发送数据打包成待若干份数据包,将数据包存入从设备spi硬件寄存器03中。
92.s303:每当一份数据包存入从设备spi硬件寄存器03中时,从设备通过改变所述miso管脚的电平,将数据包通过miso管脚发送至主设备,发送结束后从设备将加载预设的中断处理函数,从而恢复miso管脚的电平。
93.s304:每当发送一份数据包至主设备,从设备通过mosi接收主设备发送的一包空包数据。
94.s305:当确定无需向主设备发送数据时,从设备写入一份空包数据存于从设备spi硬件寄存器03中,并恢复int管脚的电平。
95.实施例二
96.本发明实施例还提供一种基于spi的通信系统,包括主设备和从设备;主设备与从设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚、int管脚和ready管脚。
97.请参阅图8,实施例二在实施例一的基础上额外增加一个ready管脚,实现主从设备之间的六线通信。
98.请参阅图3、图5和图6,实施例二中主设备发送数据至从设备的具体步骤如下:
99.s401:当主设备有待发送数据给从设备时,主设备改变cs管脚的电平。
100.s402:从设备侦测到cs管脚的电平发生改变后,控制ready管脚的电平。
101.s403:主设备将待发送数据打包成待若干份数据包,将数据包存入主设备spi硬件寄存器中。
102.s404:每当一份数据包存入主设备spi硬件寄存器中时,主设备将数据包通过mosi管脚发送至从设备,发送结束后主设备恢复cs电平,同时从设备也恢复ready管脚的电平,直至所有数据包都发送给从设备。
103.s405:每当发送一份数据包至从设备,主设备通过miso接收从设备发送的一包空包数据。
104.请参阅图2、图3和图7,实施例二中从设备发送数据至主设备的具体步骤如下:
105.s501:当从设备有待发送数据给主设备时,从设备改变int管脚的电平,以使主设备改变cs管脚的电平。
106.s502:从设备侦测到cs管脚的电平发生改变后,将待发送数据打包成待若干份数据包,将数据包存入从设备spi硬件寄存器中。
107.s503:每当一份数据包存入从设备spi硬件寄存器中时,从设备通过改变ready管脚的电平,将数据包通过miso管脚发送至主设备,发送结束后从设备将加载预设的中断处理函数,从而恢复ready管脚的电平。
108.s504:每当发送一份数据包至主设备,从设备通过mosi接收主设备发送的一包空包数据。
109.s505:当确定无需向主设备发送数据时,从设备写入一份空包数据存于从设备spi硬件寄存器中,并恢复int管脚的电平。
110.实施例三
111.在本实施例三中,提供一种基于spi的通信系统,包括主设备和从设备;请参阅图3,所述主设备与所述从设备之间连接有cs管脚、clk管脚、mosi管脚、miso管脚和int管脚。
112.请参阅图13,当主设备有待发送数据给从设备,从设备同样也存在待发送数据时,主设备拉低cs管脚电平,同时主从设备分别将待发送数据在各自设备缓冲区打包后,放入一包数据包存入各自设备spi硬件寄存器,从设备接收到cs管脚电平拉低后,将miso管脚拉低,主设备通过mosi管脚发送数据包,从设备通过miso管脚发送数据包,主从设备各自发送一包数据包结束后,主设备恢复cs管脚电平,从设备恢复miso管脚电平;其中,主从设备传输数据包的过程是同时进行的。
113.当主设备缓冲区的数据大于一包时,重复以上数据包发送的步骤,直至所有的数据包都发送完毕;否则,数据包传输过程结束,主设备cs管脚电平和从设备miso管脚电平全部恢复至初始状态,即便从设备还有待发送数据,也会终止传输过程,从设备待发送的一包数据包存于从设备spi硬件寄存器中,用于下一次主设备发起的数据传输或从设备发起数据传输。
114.同时,在主设备数据传输过程中,从设备缓冲区无数据时,从设备往spi硬件寄存器写入空包数据,发送至主设备中。
115.实施本发明实施例,具有如下效果:
116.本发明实施例提供了一种基于spi的通信方法,仅通过利用主从设备之间五个管脚,就能实现spi通信中主设备无需定时发送空包数据才能读取从设备往外部发送数据,从设备可直接依据int管脚来实现数据包主动发送的方案,同时还具备利用电平信号的恢复
来达到确认主设备是否接收到数据的应答机制,并且解决了现有技术中利用较多主从设备之间管脚的问题。
117.以上是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
转载请注明原文地址:https://tc.8miu.com/read-398.html