一种基于SPI总线通信协议的双缓冲数据传输方法转让专利

申请号 : CN201510557526.4

文献号 : CN105183690B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郭涛黄超罗强力

申请人 : 北京航天控制仪器研究所

摘要 :

一种基于SPI总线通信协议的双缓冲数据传输方法,在从设备中为数据的发送分配两个缓冲区,分别用于数据的传输和数据的更新,且利用不同的标志位来控制缓冲区之间的切换,实现了主设备和从设备之间输出帧的稳定可靠传输,杜绝了输出错误帧的可能。

权利要求 :

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。

说明书 :

一种基于SPI总线通信协议的双缓冲数据传输方法

技术领域

[0001] 本发明涉及一种双缓冲数据传输方法,尤其涉及一种基于SPI总线通信协议的双缓冲数据传输方法,属于数据传输技术,可用于使用SPI总线通信协议进行数据传输的场合。

背景技术

[0002] SPI(Serial Peripheral Interface,串行外围设备接口)是Motorola公司推出的一种高速的、全双工的、同步的通信总线。它以主从方式工作,主要应用于微处理器与外设的高速通信,具有速度快、通信协议简单、占用引脚少的特点。它是一种常用的标准接口,使用简单方便且节省系统资源。SPI总线通信协议通常有一个主设备和一个或多个从设备,需要4根线,它们是MISO(主设备数据输入,从设备数据输出)、MOSI(主设备数据输出,从设备数据输入)、SCK(时钟信号,由主设备产生)、SS(片选,从设备使能信号,由主设备控制)。SPI允许数据可以一位一位的传送,甚至能够暂停,这是由于SCK时钟线由主控设备控制,在没有时钟沿跳变时,从设备不接收或传送数据。
[0003] 现有的基于SPI总线通信协议的数据传输方法是主设备控制SCK的时钟线将从设备发送缓冲区中的数据取出。从设备由定时中断方式进行数据采集,数据更新后,需要等待主设备的数据输出请求。主设备的数据输出请求随时可能发出,若直接对从设备的发送缓冲区进行操作则有输出帧校验和错误的风险。因此需要研究出一种数据的可靠稳定输出的方法。

发明内容

[0004] 本发明解决的技术问题是:克服现有技术的不足,提供一种基于SPI总线通信协议的双缓冲数据传输方法,在从设备中为数据的发送分配两个缓冲区,分别用于数据的传输和数据的更新,且利用不同的标志位来控制缓冲区之间的切换,实现了主设备和从设备之间输出帧的稳定可靠传输,杜绝了输出错误帧的可能。
[0005] 本发明的技术解决方案分为步骤如下:一种基于SPI总线通信协议的双缓冲数据传输方法,所述SPI总线通信协议包括一个主设备和至少一个从设备,步骤如下:
[0006] (1)在从设备中为数据的发送分配两个缓冲区,分别命名为缓冲区A,即缓冲区标志位Flag_up=0和缓冲区B,即缓冲区标志位Flag_up=1,设置从设备的当前发送缓冲区为缓冲区A,标志位设置为初值;所述标志位包括定时中断标志有效标志位Flag_Timing、发送接收过程标志位Flag_BeginSend和转换缓冲区标志位Flag_Chg;
[0007] (2)主设备发出一个字节数据请求,从设备进行响应,进入SPI中断,从设备输出当前发送缓冲区中数据帧的一个字节,若主设备再次发出一个字节数据请求,则从设备传输当前发送缓冲区中数据帧的下一个字节;若从设备传输当前发送缓冲区中数据帧未全部传输完成,则将标志位Flag_BeginSend的值置1;否则,将标志位Flag_BeginSend的值置0;
[0008] (3)判断转换缓冲区标志位Flag_Chg的值是否为1,若为1,则进入步骤(4);否则,进入步骤(5);
[0009] (4)判断发送接收过程标志位Flag_BeginSend的值是否为1,若为0,则将从设备的当前发送缓冲区切换至另一个缓冲区,并将转换缓冲区标志位Flag_Chg置0,进入步骤(5);若发送接收过程标志位Flag_BeginSend的值为1,则进入步骤(5);
[0010] (5)判断定时中断标志有效标志位Flag_Timing的值是否为1,若为1,则进入步骤(6);否则,返回步骤(3);
[0011] (6)将定时中断标志有效标志位Flag_Timing置0,产生新的数据帧,并利用新的数据帧更新缓冲区;设置转换缓冲区标志位Flag_Chg值为1,返回步骤(3),等待下一次数据传输。
[0012] 所述定时中断标志有效标志位Flag_Timing的取值为1时表示定时中断标志有效;取值为0时表示定时中断标志无效,定时中断标志有效标志位Flag_Timing的初值为0;
[0013] 所述发送接收过程标志位Flag_BeginSend的取值为1时表示发送缓冲区处于发送接收过程;取值为0时表示发送缓冲区未处于发送接收过程,发送接收过程标志位Flag_BeginSend的初值为0;
[0014] 所述转换缓冲区标志位Flag_Chg的取值为1时表示非当前发送缓冲区中的数据帧已进行更新;取值为0时表示非当前发送缓冲区中的数据帧未进行更新,转换缓冲区标志位Flag_Chg的初值为0。
[0015] 所述步骤(6)中更新缓冲区的方法具体如下:
[0016] 若当前发送缓冲区为缓冲区A,则利用新的数据帧更新缓冲区B;若当前发送缓冲区为缓冲区B,则利用新的数据帧更新缓冲区A。
[0017] 所述数据帧包括帧头标志、数据域和校验码;所述帧头标志长度为1~2个字节,校验码长度为1~2个字节。
[0018] 所述校验码为8~16位校验和。
[0019] 本发明与现有技术相比的优点如下:
[0020] (1)现有的SPI传输直接对发送缓冲区进行操作,从设备可能发出错误帧,本发明有一个缓冲区的数据随时等待主设备的数据请求,对另外的一个缓冲区进行更新,杜绝了输出错误帧的可能;
[0021] (2)本发明的缓冲区切换条件设定为发送缓冲区未进行发送接收过程,且非当前发送缓冲区中的数据为最新的数据,最大限度的保证了缓冲区切换的可靠性与传输数据的实时性;
[0022] (3)由于数据的传输是通过主设备控制SCK的时钟进行的,因此本发明的传输方法方便灵活,适应性好。

附图说明

[0023] 图1为本发明方法的双缓冲数据传输方法的流程图;
[0024] 图2为SPI总线通信协议主从设备连接示意图;
[0025] 图3为本发明方法的初始化过程流程图;
[0026] 图4为本发明方法的定时中断及置定时中断有效标志位过程流程图。

具体实施方式

[0027] 如图1所示为本发明中方法的流程图,从图1可知,本发明提出的一种基于SPI总线通信协议的双缓冲数据传输方法,具体步骤如下:
[0028] (1)从设备为数据的发送分配两个缓冲区,分别命名为缓冲区A(Flag_up=0)和缓冲区B(Flag_up=1),如图2所示。进行系统初始化,设置当前发送缓冲区为缓冲区A,标志位设置初值,如图3所示。所述数据帧包括帧头标志、数据域和校验码;所述帧头标志长度为1~2个字节,校验码长度为1~2个字节,校验码为8~16位校验和。发送数据帧的一种格式如表1所示:
[0029] 表1
[0030]说明 内容 长度(字节)
帧头标志 0xAA,0x2A 2
数据域 实际数据 N
校验码 16位校验和 2
[0031] 此时缓冲区A中的数据内容为”0xAA,0x2A,0x01,0x02,0x03,0x04,0x05,0x00,0xE3”,缓冲区B中的数据内容为”0xAA,0x2A,0x05,0x04,0x03,0x02,0x01,0x00,0xE3”。由表1可知两个缓冲区各含有2个字节的帧头,5个字节的数据和2个字节的校验码。
[0032] 标志位共分为:
[0033] a).定时中断标志有效标志位Flag_Timing,其值为1时表示定时中断标志有效;其值为0时表示定时中断标志无效。其初值设为0;
[0034] b).发送接收过程标志位Flag_BeginSend,其值为1时表示发送缓冲区处于发送接收过程;其值为0时表示发送缓冲区未处于发送接收过程。其初值设为0;
[0035] c).转换缓冲区标志位Flag_Chg,其值为1时表示非当前发送缓冲区中的数据帧已进行更新;其值为0时表示非当前发送缓冲区中的数据帧未进行更新。其初值设为0。
[0036] (2)从设备定期进入定时中断,将定时中断标志有效标志位Flag_Timing值置1,如图4所示。当主设备发出一个字节数据请求时,从设备进入SPI中断,输出发送缓冲区中数据帧的一个字节。当主设备再次发出一个字节数据请求时,从设备传输数据帧中的下一个字节。若数据帧未全部传输完成,标志位Flag_BeginSend的值置1;传输完成后,将标志位Flag_BeginSend的值清零;
[0037] (3)判断转换缓冲区标志位Flag_Chg的值是否为1。若其为1,进入步骤(4);若其为0,则直接进入步骤(5);
[0038] (4)判断发送接收过程标志位Flag_BeginSend的值是否为1。若其为0,且当前发送缓冲区为缓冲区A,则将发送缓冲区转换为缓冲区B,若当前发送缓冲区为缓冲区B,则将发送缓冲区转换为缓冲区A。指令为Flag_up=~Flag_up。将转换缓冲区标志位Flag_Chg清零,之后进入步骤(5);若其为1,进入步骤(5);
[0039] (5)判断定时中断标志有效标志位Flag_Timing的值是否为1。若其为1,进入步骤(6);若其为0,返回步骤(3);
[0040] (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),进行下一次数据传输。
[0041] 下面举一个直接对发送缓冲区进行更新操作导致输出帧校验和错误的例子。假设当前发送缓冲区为缓冲区A,已发送了”0xAA,0x2A,0x01,0x02,0x03”,此时若直接使用新产生的数据更新缓冲区A,则本次输出的帧内容为”0xAA,0x2A,0x01,0x02,0x03,0x00,0x00,0x00,0xD4”。即缓冲区A中原有的五个字节及新产生的数据帧中的后四个字节。可以看出此帧内容错误。本发明在缓冲区数据没有完全发送完时不对当前发送缓冲区进行更新操作,而是将新产生的数据帧存入非当前发送缓冲区中,等待当前发送缓冲区中数据发送完毕时再对缓冲区进行切换,由此杜绝了输出错误帧的可能。
[0042] 以上对本发明所提供的一种基于SPI总线通信协议的双缓冲数据传输方法进行了详细介绍,对于本领域的一般技术人员,依据本发明的具体实施过程及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。本发明未详细描述内容为本领域技术人员公知技术。