CN105183690B - 一种基于spi总线通信协议的双缓冲数据传输方法 - Google Patents
一种基于spi总线通信协议的双缓冲数据传输方法 Download PDFInfo
- Publication number
- CN105183690B CN105183690B CN201510557526.4A CN201510557526A CN105183690B CN 105183690 B CN105183690 B CN 105183690B CN 201510557526 A CN201510557526 A CN 201510557526A CN 105183690 B CN105183690 B CN 105183690B
- Authority
- CN
- China
- Prior art keywords
- flag
- buffering area
- value
- data
- timing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
- G06F13/4291—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using a clocked protocol
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
- Small-Scale Networks (AREA)
Abstract
一种基于SPI总线通信协议的双缓冲数据传输方法,在从设备中为数据的发送分配两个缓冲区,分别用于数据的传输和数据的更新,且利用不同的标志位来控制缓冲区之间的切换,实现了主设备和从设备之间输出帧的稳定可靠传输,杜绝了输出错误帧的可能。
Description
技术领域
本发明涉及一种双缓冲数据传输方法,尤其涉及一种基于SPI总线通信协议的双缓冲数据传输方法,属于数据传输技术,可用于使用SPI总线通信协议进行数据传输的场合。
背景技术
SPI(Serial Peripheral Interface,串行外围设备接口)是Motorola公司推出的一种高速的、全双工的、同步的通信总线。它以主从方式工作,主要应用于微处理器与外设的高速通信,具有速度快、通信协议简单、占用引脚少的特点。它是一种常用的标准接口,使用简单方便且节省系统资源。SPI总线通信协议通常有一个主设备和一个或多个从设备,需要4根线,它们是MISO(主设备数据输入,从设备数据输出)、MOSI(主设备数据输出,从设备数据输入)、SCK(时钟信号,由主设备产生)、SS(片选,从设备使能信号,由主设备控制)。SPI允许数据可以一位一位的传送,甚至能够暂停,这是由于SCK时钟线由主控设备控制,在没有时钟沿跳变时,从设备不接收或传送数据。
现有的基于SPI总线通信协议的数据传输方法是主设备控制SCK的时钟线将从设备发送缓冲区中的数据取出。从设备由定时中断方式进行数据采集,数据更新后,需要等待主设备的数据输出请求。主设备的数据输出请求随时可能发出,若直接对从设备的发送缓冲区进行操作则有输出帧校验和错误的风险。因此需要研究出一种数据的可靠稳定输出的方法。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供一种基于SPI总线通信协议的双缓冲数据传输方法,在从设备中为数据的发送分配两个缓冲区,分别用于数据的传输和数据的更新,且利用不同的标志位来控制缓冲区之间的切换,实现了主设备和从设备之间输出帧的稳定可靠传输,杜绝了输出错误帧的可能。
本发明的技术解决方案分为步骤如下:一种基于SPI总线通信协议的双缓冲数据传输方法,所述SPI总线通信协议包括一个主设备和至少一个从设备,步骤如下:
(1)在从设备中为数据的发送分配两个缓冲区,分别命名为缓冲区A,即缓冲区标志位Flag_up=0和缓冲区B,即缓冲区标志位Flag_up=1,设置从设备的当前发送缓冲区为缓冲区A,标志位设置为初值;所述标志位包括定时中断标志有效标志位Flag_Timing、发送接收过程标志位Flag_BeginSend和转换缓冲区标志位Flag_Chg;
(2)主设备发出一个字节数据请求,从设备进行响应,进入SPI中断,从设备输出当前发送缓冲区中数据帧的一个字节,若主设备再次发出一个字节数据请求,则从设备传输当前发送缓冲区中数据帧的下一个字节;若从设备传输当前发送缓冲区中数据帧未全部传输完成,则将标志位Flag_BeginSend的值置1;否则,将标志位Flag_BeginSend的值置0;
(3)判断转换缓冲区标志位Flag_Chg的值是否为1,若为1,则进入步骤(4);否则,进入步骤(5);
(4)判断发送接收过程标志位Flag_BeginSend的值是否为1,若为0,则将从设备的当前发送缓冲区切换至另一个缓冲区,并将转换缓冲区标志位Flag_Chg置0,进入步骤(5);若发送接收过程标志位Flag_BeginSend的值为1,则进入步骤(5);
(5)判断定时中断标志有效标志位Flag_Timing的值是否为1,若为1,则进入步骤(6);否则,返回步骤(3);
(6)将定时中断标志有效标志位Flag_Timing置0,产生新的数据帧,并利用新的数据帧更新缓冲区;设置转换缓冲区标志位Flag_Chg值为1,返回步骤(3),等待下一次数据传输。
所述定时中断标志有效标志位Flag_Timing的取值为1时表示定时中断标志有效;取值为0时表示定时中断标志无效,定时中断标志有效标志位Flag_Timing的初值为0;
所述发送接收过程标志位Flag_BeginSend的取值为1时表示发送缓冲区处于发送接收过程;取值为0时表示发送缓冲区未处于发送接收过程,发送接收过程标志位Flag_BeginSend的初值为0;
所述转换缓冲区标志位Flag_Chg的取值为1时表示非当前发送缓冲区中的数据帧已进行更新;取值为0时表示非当前发送缓冲区中的数据帧未进行更新,转换缓冲区标志位Flag_Chg的初值为0。
所述步骤(6)中更新缓冲区的方法具体如下:
若当前发送缓冲区为缓冲区A,则利用新的数据帧更新缓冲区B;若当前发送缓冲区为缓冲区B,则利用新的数据帧更新缓冲区A。
所述数据帧包括帧头标志、数据域和校验码;所述帧头标志长度为1~2个字节,校验码长度为1~2个字节。
所述校验码为8~16位校验和。
本发明与现有技术相比的优点如下:
(1)现有的SPI传输直接对发送缓冲区进行操作,从设备可能发出错误帧,本发明有一个缓冲区的数据随时等待主设备的数据请求,对另外的一个缓冲区进行更新,杜绝了输出错误帧的可能;
(2)本发明的缓冲区切换条件设定为发送缓冲区未进行发送接收过程,且非当前发送缓冲区中的数据为最新的数据,最大限度的保证了缓冲区切换的可靠性与传输数据的实时性;
(3)由于数据的传输是通过主设备控制SCK的时钟进行的,因此本发明的传输方法方便灵活,适应性好。
附图说明
图1为本发明方法的双缓冲数据传输方法的流程图;
图2为SPI总线通信协议主从设备连接示意图;
图3为本发明方法的初始化过程流程图;
图4为本发明方法的定时中断及置定时中断有效标志位过程流程图。
具体实施方式
如图1所示为本发明中方法的流程图,从图1可知,本发明提出的一种基于SPI总线通信协议的双缓冲数据传输方法,具体步骤如下:
(1)从设备为数据的发送分配两个缓冲区,分别命名为缓冲区A(Flag_up=0)和缓冲区B(Flag_up=1),如图2所示。进行系统初始化,设置当前发送缓冲区为缓冲区A,标志位设置初值,如图3所示。所述数据帧包括帧头标志、数据域和校验码;所述帧头标志长度为1~2个字节,校验码长度为1~2个字节,校验码为8~16位校验和。发送数据帧的一种格式如表1所示:
表1
说明 | 内容 | 长度(字节) |
帧头标志 | 0xAA,0x2A | 2 |
数据域 | 实际数据 | N |
校验码 | 16位校验和 | 2 |
此时缓冲区A中的数据内容为”0xAA,0x2A,0x01,0x02,0x03,0x04,0x05,0x00,0xE3”,缓冲区B中的数据内容为”0xAA,0x2A,0x05,0x04,0x03,0x02,0x01,0x00,0xE3”。由表1可知两个缓冲区各含有2个字节的帧头,5个字节的数据和2个字节的校验码。
标志位共分为:
a).定时中断标志有效标志位Flag_Timing,其值为1时表示定时中断标志有效;其值为0时表示定时中断标志无效。其初值设为0;
b).发送接收过程标志位Flag_BeginSend,其值为1时表示发送缓冲区处于发送接收过程;其值为0时表示发送缓冲区未处于发送接收过程。其初值设为0;
c).转换缓冲区标志位Flag_Chg,其值为1时表示非当前发送缓冲区中的数据帧已进行更新;其值为0时表示非当前发送缓冲区中的数据帧未进行更新。其初值设为0。
(2)从设备定期进入定时中断,将定时中断标志有效标志位Flag_Timing值置1,如图4所示。当主设备发出一个字节数据请求时,从设备进入SPI中断,输出发送缓冲区中数据帧的一个字节。当主设备再次发出一个字节数据请求时,从设备传输数据帧中的下一个字节。若数据帧未全部传输完成,标志位Flag_BeginSend的值置1;传输完成后,将标志位Flag_BeginSend的值清零;
(3)判断转换缓冲区标志位Flag_Chg的值是否为1。若其为1,进入步骤(4);若其为0,则直接进入步骤(5);
(4)判断发送接收过程标志位Flag_BeginSend的值是否为1。若其为0,且当前发送缓冲区为缓冲区A,则将发送缓冲区转换为缓冲区B,若当前发送缓冲区为缓冲区B,则将发送缓冲区转换为缓冲区A。指令为Flag_up=~Flag_up。将转换缓冲区标志位Flag_Chg清零,之后进入步骤(5);若其为1,进入步骤(5);
(5)判断定时中断标志有效标志位Flag_Timing的值是否为1。若其为1,进入步骤(6);若其为0,返回步骤(3);
(6)将定时中断标志有效标志位Flag_Timing清零,产生一帧新的数据,不妨设新产生的数据帧为”0xAA,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0xD4”。若当前发送缓冲区为缓冲区A(Flag_up=0),则向缓冲区B(Flag_up=1)中更新帧数据;若当前发送缓冲区为缓冲区B,则向缓冲区A中更新帧数据。设置转换缓冲区标志位Flag_Chg值为1。返回步骤(3),进行下一次数据传输。
下面举一个直接对发送缓冲区进行更新操作导致输出帧校验和错误的例子。假设当前发送缓冲区为缓冲区A,已发送了”0xAA,0x2A,0x01,0x02,0x03”,此时若直接使用新产生的数据更新缓冲区A,则本次输出的帧内容为”0xAA,0x2A,0x01,0x02,0x03,0x00,0x00,0x00,0xD4”。即缓冲区A中原有的五个字节及新产生的数据帧中的后四个字节。可以看出此帧内容错误。本发明在缓冲区数据没有完全发送完时不对当前发送缓冲区进行更新操作,而是将新产生的数据帧存入非当前发送缓冲区中,等待当前发送缓冲区中数据发送完毕时再对缓冲区进行切换,由此杜绝了输出错误帧的可能。
以上对本发明所提供的一种基于SPI总线通信协议的双缓冲数据传输方法进行了详细介绍,对于本领域的一般技术人员,依据本发明的具体实施过程及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。本发明未详细描述内容为本领域技术人员公知技术。
Claims (3)
1.一种基于SPI总线通信协议的双缓冲数据传输方法,所述SPI总线通信协议包括一个主设备和至少一个从设备,其特征在于步骤如下:
(1)在从设备中为数据的发送分配两个缓冲区,分别命名为缓冲区A,即缓冲区标志位Flag_up=0和缓冲区B,即缓冲区标志位Flag_up=1,设置从设备的当前发送缓冲区为缓冲区A,标志位设置为初值;所述标志位包括定时中断标志有效标志位Flag_Timing、发送接收过程标志位Flag_BeginSend和转换缓冲区标志位Flag_Chg;
(2)主设备发出一个字节数据请求,从设备进行响应,进入SPI中断,从设备输出当前发送缓冲区中数据帧的一个字节,若主设备再次发出一个字节数据请求,则从设备传输当前发送缓冲区中数据帧的下一个字节;若从设备传输当前发送缓冲区中数据帧未全部传输完成,则将标志位Flag_BeginSend的值置1;否则,将标志位Flag_BeginSend的值置0;所述数据帧包括帧头标志、数据域和校验码;所述帧头标志长度为1~2个字节,校验码长度为1~2个字节,校验码为8~16位校验和;
(3)判断转换缓冲区标志位Flag_Chg的值是否为1,若为1,则进入步骤(4);否则,进入步骤(5);
(4)判断发送接收过程标志位Flag_BeginSend的值是否为1,若为0,则将从设备的当前发送缓冲区切换至另一个缓冲区,并将转换缓冲区标志位Flag_Chg置0,进入步骤(5);若发送接收过程标志位Flag_BeginSend的值为1,则进入步骤(5);
(5)判断定时中断标志有效标志位Flag_Timing的值是否为1,若为1,则进入步骤(6);否则,返回步骤(3);
(6)将定时中断标志有效标志位Flag_Timing置0,产生新的数据帧,并利用新的数据帧更新缓冲区;设置转换缓冲区标志位Flag_Chg值为1,返回步骤(3),等待下一次数据传输。
2.根据权利要求1所述的一种基于SPI总线通信协议的双缓冲数据传输方法,其特征在于:所述定时中断标志有效标志位Flag_Timing的取值为1时表示定时中断标志有效;取值为0时表示定时中断标志无效,定时中断标志有效标志位Flag_Timing的初值为0;
所述发送接收过程标志位Flag_BeginSend的取值为1时表示发送缓冲区处于发送接收过程;取值为0时表示发送缓冲区未处于发送接收过程,发送接收过程标志位Flag_BeginSend的初值为0;
所述转换缓冲区标志位Flag_Chg的取值为1时表示非当前发送缓冲区中的数据帧已进行更新;取值为0时表示非当前发送缓冲区中的数据帧未进行更新,转换缓冲区标志位Flag_Chg的初值为0。
3.根据权利要求1所述的一种基于SPI总线通信协议的双缓冲数据传输方法,其特征在于:所述步骤(6)中更新缓冲区的方法具体如下:
若当前发送缓冲区为缓冲区A,则利用新的数据帧更新缓冲区B;若当前发送缓冲区为缓冲区B,则利用新的数据帧更新缓冲区A。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510557526.4A CN105183690B (zh) | 2015-09-02 | 2015-09-02 | 一种基于spi总线通信协议的双缓冲数据传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510557526.4A CN105183690B (zh) | 2015-09-02 | 2015-09-02 | 一种基于spi总线通信协议的双缓冲数据传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105183690A CN105183690A (zh) | 2015-12-23 |
CN105183690B true CN105183690B (zh) | 2018-03-09 |
Family
ID=54905780
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510557526.4A Active CN105183690B (zh) | 2015-09-02 | 2015-09-02 | 一种基于spi总线通信协议的双缓冲数据传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105183690B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105783941B (zh) * | 2016-02-24 | 2019-04-09 | 北京航天控制仪器研究所 | 一种基于spi总线通信协议输出的惯性测量单元的测试方法 |
CN113492685A (zh) * | 2020-04-07 | 2021-10-12 | 中国航天科工飞航技术研究院(中国航天海鹰机电技术研究院) | 超导磁悬浮列车电磁推进系统通信方法及电磁推进系统 |
CN111813734B (zh) * | 2020-06-15 | 2022-11-01 | 上海航天计算机技术研究所 | 无消息间隔限制的1553b总线通信方法和系统 |
CN112882976B (zh) * | 2020-12-11 | 2024-04-26 | 南京交通职业技术学院 | 一种降低单片机通信占用内存的方法 |
CN113868180B (zh) * | 2021-09-16 | 2024-02-06 | 河南翔宇医疗设备股份有限公司 | 一种单总线通信的控制方法、装置及体外冲击波设备 |
CN114257887A (zh) * | 2021-12-23 | 2022-03-29 | 广东迪奥技术有限公司 | 一种数据通讯方法、系统、存储介质及电子设备 |
CN114726482B (zh) * | 2022-04-18 | 2024-03-22 | 成都创科升电子科技有限责任公司 | 一种spi数据传输方法 |
CN116795756B (zh) * | 2023-08-28 | 2023-10-27 | 成都量芯集成科技有限公司 | 一种基于串口通讯的帧数据流软件接收方法 |
CN116962112B (zh) * | 2023-09-20 | 2023-12-15 | 中国船舶集团有限公司第七〇七研究所 | 基于标准spi总线连接的双机全双工数据透明传输方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201369058Y (zh) * | 2008-11-12 | 2009-12-23 | 杭州晟元芯片技术有限公司 | 内嵌式指纹重构加速器 |
-
2015
- 2015-09-02 CN CN201510557526.4A patent/CN105183690B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201369058Y (zh) * | 2008-11-12 | 2009-12-23 | 杭州晟元芯片技术有限公司 | 内嵌式指纹重构加速器 |
Also Published As
Publication number | Publication date |
---|---|
CN105183690A (zh) | 2015-12-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105183690B (zh) | 一种基于spi总线通信协议的双缓冲数据传输方法 | |
CN106411740B (zh) | 基于以太网控制器的网络端口扩展方法 | |
US20200174953A1 (en) | Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link | |
US11843529B2 (en) | Slave-to-master data and out-of-sequence acknowledgements on a daisy-chained bus | |
CN102508812A (zh) | 一种基于spi总线的双处理器通信方法 | |
CN105337421A (zh) | 一种智能电网系统中的协议转换及其相互通讯方法 | |
CN107408093A (zh) | 高速隔离及光学usb | |
CN106155960A (zh) | 基于gpio握手和edma的uart串口通信方法 | |
CN103838700A (zh) | 电平复用控制串行通信装置及其通信方法 | |
CN105763258A (zh) | 一种基于fpga的数字处理及控制系统 | |
CN101140558A (zh) | 嵌入式系统及其通信方法 | |
CN101847135B (zh) | 串接通信系统及其通信方法 | |
CN109710550B (zh) | 一种基于双缓存的帧长度不固定rs422数据通信系统 | |
CN106649184B (zh) | 适用于星载电子设备的异步通信串口指令快速应答方法 | |
CN104702371A (zh) | 基于网络可靠传输协议的双链路数据传输方法 | |
CN112069111B (zh) | 一种兼容双向传输的Retimer转接卡电路设计 | |
EP0895167A3 (en) | Method and apparatus for interfacing with ram | |
CN206431607U (zh) | 一种lcd驱动电路系统 | |
CN103268301B (zh) | 一种自动流的半双工uart接口电路 | |
CN102510351A (zh) | 一种数据通信总线的收发数据方法 | |
CN105488010B (zh) | 一种背板实时同步接口协议 | |
CN110297795B (zh) | 基于以太网phy芯片实现单路串行数据传输系统及其方法 | |
CN106227691A (zh) | 一种基于mcu之间的对等双向单线串行通信协议 | |
CN105718400A (zh) | 基于spi的通信方法 | |
CN104935665A (zh) | 一种并行数据通讯中间设备及并行数据通讯方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |