基于fifo模式的串行通信总线数据智能纠错方法
【专利摘要】本发明涉及一种基于FIFO模式的串行通信总线数据智能纠错方法,采用FIFO(First?In?First?Out)模式,处理器在接收完一个完整8位字符后,将其先存入FIFO缓存中,当接收的数据累计到一定程度后通知处理器一次性响应,发送采用类似形式,一次性将多个8位字符存入FIFO缓存中逐个发送。很明显,这样节省了处理器的开销,提高了通信效率,让处理器不用频繁的响应通信任务,从而提高了系统的整体效率。本发明克服目前现有技术中存在的不足,提高了串行通信总线在FIFO这种低系统开销的工作模式下接收端接收数据的可靠性。
【专利说明】基于FIFO模式的串行通信总线数据智能纠错方法
【技术领域】
[0001]本发明涉及一种基于FIFO模式的串行通信总线数据智能纠错方法【背景技术】
[0002]随着计算机系统的应用和微机网络的发展,复杂系统之间的数据通信功能显得越来越重要。串口是计算机上一种非常通用的设备通信协议,串口通讯对嵌入式系统而言意义重大,不但可以实现将数据传输到上位机,而且也能实现上位机对其的指令控制。
[0003]串口通信所需电缆线根数少,在远距离通信中可以节约通信成本,尽管比按字节传输的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据,其接线简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20m,并且任意两个设备间的长度不得超过2m ;而对于串口而言,其通信长度可达1200mo
[0004]RS-232、RS-422与RS-485都是串行数据标准接口。RS422总线与RS485和RS232的电路原理基本相同,都是以差动方式发送和接收,不需要数字地线。RS-422总线为全双工工作模式,四线接口采用独立的发送和接收通道,不必控制数据传输方向,各通信装置之间任何必须的信号交换均可以按软件(X0N/X0FF握手)或硬件(一对单独的双绞线)的方式实现。
[0005]标准串行通信模式为查询或中断方式:处理器每接收完一个完整8位字符后,即对其进行处理,发送采用类似形式。如果接收或发送的字符比较多的话,很明显,处理器要不断地去响应处理数据。因此,处理器的开销就大大增加,降低了处理器执行效率。
[0006]常见的串行通信总线数据传输过程采用数据通信帧格式,即将若干实际需要传输的数据结合一定的通信帧头(X个8位数据)、帧尾(Y个8位数据)和帧校验(Z个8位数据),组成一巾贞有效的串行总线传输巾贞格式传输,这种巾贞格式的通信总线传输格式可以有效的保证数据的完整性和有效性,提高通信可靠性。
[0007]目前在串行通信FIFO的普遍应用中,因为接受与发送控制器端不可能保证两者同时开启工作,发送端先于接收端开启的情况是完全有可能存在。因此当串行通信发送端先开启,接收端后开启时,会存在接受到的数据帧格式错位,而FIFO接受过程中仅仅根据接收到的数据个数触发响应,并不对其内容校验,因此处理器接收到的数据格式不对,导致通信故障。
【发明内容】
[0008]要解决的技术问题
[0009]为了避免现有技术的不足之处,本发明提出一种基于FIFO模式的串行通信总线数据智能纠错方法,能够在随机初始状态下,提高串行通信总线接收端收到数据在FIFO这种低系统开销的工作模式下的可靠性。
[0010]技术方案[0011]一种基于FIFO模式的串行通信总线数据智能纠错方法,其特征在于步骤如下:
[0012]步骤1:当处理器FIFO缓冲存储单元接收到X个8位数据一组的串行通信总线数据帧后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp [13]中;
[0013]步骤2:对接收数据处理数组Temp [N]中的数据逐位进行检测,得到X个8位数据中贞头在数据处理数组Temp[N]中的起始位置Temp[i],其中:i〈N ;
[0014]步骤3:对起始位置Temp [i]进行判断:
[0015]当X个8位数据巾贞头在数据处理数组Temp[N]中的起始位置Temp[i]中i = O,则判定接收到的数据帧未发生错位,数据帧符合传输协议,将数据处理数组Temp[N]中的数据逐位赋给接收数组ReceiveData [N],返回步骤2进行下一个步巾贞校验;
[0016]当X个8位数据巾贞头在数据处理数组Temp[N]中的起始位置Temp[i]中i古O,判定接收到的数据帧发生错位,进行步骤4 ;
[0017]步骤4:将本帧数据中各个8位数据以出现Temp [i]中i古O的位置分为两部分,前i位8位数据(Temp[O]-Temp[1-Ι])为一帧符合传输协议8位数据的后半部分,后N_i位数据(Temp [i]-Temp [N-1])为一帧符合传输协议8位数据的前半部分;
[0018]步骤5:将本帧中有效数据帧的Temp [i]-Temp [N-1]逐位赋给错位接收缓冲数据ReceiveTemp[N~i]中;
[0019]步骤6:将前一次错位接收缓冲数据ReceiveTemp [N_i]中的一巾贞符合传输协议8位数据的前半部分逐位赋给接收ReceiveData[N]的前N_i位,并将本巾贞接收到的一巾贞符合传输协议8位数据的后半部分位赋给接收ReceiveData[N]的后i位,组成符合传输协议的数据帧,返回步骤2进行下一个步帧校验。
[0020]有益效果
[0021]本发明提出的一种基于FIFO模式的串行通信总线数据智能纠错方法,采用FIFO (First InFirst Out)模式,处理器在接收完一个完整8位字符后,将其先存入FIFO缓存中,当接收的数据累计到一定程度后通知处理器一次性响应,发送采用类似形式,一次性将多个8位字符存入FIFO缓存中逐个发送。很明显,这样节省了处理器的开销,提高了通信效率,让处理器不用频繁的响应通信任务,从而提高了系统的整体效率。
[0022]本发明克服目前现有技术中存在的不足,提高了串行通信总线在FIFO这种低系统开销的工作模式下接收端接收数据的可靠性。
【专利附图】
【附图说明】
[0023]图1:基于FIFO模式的串行通信总线数据智能纠错方法的流程
[0024]图2:以13个8位数据一组的串行通信总线数据帧为例
【具体实施方式】
[0025]现结合实施例、附图对本发明作进一步描述:
[0026]由于存在串行通信总线发送端与接收端不同步的情况,接收到的一帧数据中各个数据位置错位,本帧数据不能通过串口通信总线传输协议的校验。通过分析,我们可以知道,处理器接收到的一帧数据,是由前一次发送数据的后半段和该次发送数据的前半段组成。可以看出,处理器读取的这帧数据,虽然数据相对位置不符合协议要求,但本桢所含数据彼此之间的位置是正确的,即部分整体相对前移或后移了若干位,是具有规律性的。
[0027]当处理器FIFO缓冲存储单元接收到设定数量的数据位后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp[N] (Temp[O]-Temp[N-1])中,对存入接收数据处理数组Temp[N]中的数据进行分析,根据不同的情况分别给予相应的处理方式,具体操作流程如下:
[0028](I)如果接收数据处理数组Temp [N]中的数据逐位进行检测,判断出X个8位数据中贞头在数据处理数组Temp [N]中的起始位置Temp [i] (i〈N)。
[0029](2)如果X个8位数据帧头在数据处理数组Temp [N]中的起始位置Temp [i]中i =0,则可判定接收到的数据帧未发生错位,数据帧符合传输协议,将数据处理数组Temp [N]中的数据逐位赋给接收数组ReceiveData[N],进行下一步帧校验后对数据解析。
[0030](3)如果X个8位数据帧头在数据处理数组Temp[N]中的起始位置Temp[i]中i^O,则可判定接收到的数据帧发生错位,因此本帧数据中各个8位数据可分为两部分,前i位8位数据(Temp [O]-Temp [1-Ι])为一帧符合传输协议8位数据的后半部分,后N_i位数据(Temp [i]-Temp [N-1])为一帧符合传输协议8位数据的前半部分。由此可将本帧中有效数据帧的Temp[i]-Temp[N-1]逐位赋给错位接收缓冲数据ReceiveTemp[N_i]中。
[0031](4)当判定接收到的数据帧发生错位时,将前一次错位接收缓冲数据ReceiveTemp [N_i]中的一帧符合传输协议8位数据的前半部分逐位赋给接收ReceiveData[N]的前N_i位,并将本帧接收到的一帧符合传输协议8位数据的后半部分位赋给接收ReceiveData[N]的后i位,由此组成的数据帧符合传输协议,进而进行下一步中贞校验后对数据解析。
[0032]具体实施实例:
[0033]如图1,为基于FIFO模式的串行通信总线数据智能纠错方法的流程
[0034]如图2,以13个8位数据一组的串行通信总线数据帧为例,帧头为两个8位数据OxEB和0x90,当处理器FIFO缓冲存储单元接收到13个8位数据一组的串行通信总线数据帧后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp[13]中,右侧数组为基于FIFO模式的串行通信总线接收到的原始数据帧,对存入接收数据处理数组Temp [13]中的数据进行分析,可以看出接收到的各个8位数据错位,智能纠错过程如下:
[0035](I)通过对接收数据处理数组Temp[13]中的数据逐位进行检测,判断出,数据帧头OxEB和0x90在数据处理数组Temp [13]中的起始位置Temp [6]。
[0036](2)由上可知数据帧头在数据处理数组Temp[13]中的起始位置Temp[6]中,则可判定接收到的数据帧发生错位,因此本帧数据中各个8位数据可分为两部分,前6位8位数据(Temp[0]-Temp[5])为一帧符合传输协议8位数据的后半部分,后7位数据(Temp [6]-Temp [12])为一帧符合传输协议8位数据的前半部分。由此可将本帧中有效数据中贞的Temp[6]-Temp[12]逐位赋给错位接收缓冲数据ReceiveTemp[7]中。
[0037] (3)将前一次错位接收缓冲数据ReceiveTemp [7]中的一帧符合传输协议8位数据的前半部分逐位赋给接收ReceiveData[13]的前7位,并将本帧接收到的一帧符合传输协议8位数据的后半部分位赋给接收ReceiveData[13]的后6位,由此组成的数据帧符合传输协议,进而进行下一步帧校验后对数据解析。
[0038]如图2中,左侧数组为采用智能纠错算法后的数组,数据帧符合传输协议,在FIFO这种低系统开销的工作模式下串行通信总线接收端可靠性得到了提高。
【权利要求】
1.一种基于FIFO模式的串行通信总线数据智能纠错方法,其特征在于步骤如下: 步骤1:当处理器FIFO缓冲存储单元接收到X个8位数据一组的串行通信总线数据帧后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp [13]中; 步骤2:对接收数据处理数组Temp [N]中的数据逐位进行检测,得到X个8位数据帧头在数据处理数组Temp[N]中的起始位置Temp[i],其中:i〈N ; 步骤3:对起始位置Temp [i]进行判断: 当X个8位数据巾贞头在数据处理数组Temp [N]中的起始位置Temp [i]中i = 0,则判定接收到的数据帧未发生错位,数据帧符合传输协议,将数据处理数组Temp [N]中的数据逐位赋给接收数组ReceiveData [N],返回步骤2进行下一个步巾贞校验; 当X个8位数据巾贞头在数据处理数组Temp[N]中的起始位置Temp[i]中i古O,判定接收到的数据帧发生错位,进行步骤4 ; 步骤4:将本帧数据中各个8位数据以出现Temp [i]中i古O的位置分为两部分,前i位8位数据(Temp[O]-Temp[1-Ι])为一帧符合传输协议8位数据的后半部分,后N_i位数据(Temp[i]-Temp[N-1])为一帧符合传输协议8位数据的前半部分; 步骤5:将本帧中有效数据帧的Temp[i]-Temp[N-l]逐位赋给错位接收缓冲数据ReceiveTemp[N~i]中; 步骤6:将前一次错位接收缓冲数据ReceiveTemp [N_i]中的一巾贞符合传输协议8位数据的前半部分逐位赋给接收ReceiveData[N]的前N_i位,并将本巾贞接收到的一巾贞符合传输协议8位数据的后半部分位赋给接收ReceiveData[N]的后i位,组成符合传输协议的数据帧,返回步骤2进行下一个步帧校验。
【文档编号】G06F11/07GK104008023SQ201410257554
【公开日】2014年8月27日 申请日期:2014年6月11日 优先权日:2014年6月11日
【发明者】张震, 马瑞卿, 白浩, 刘亚兵 申请人:西北工业大学