CN104008023B - 基于fifo模式的串行通信总线数据智能纠错方法 - Google Patents
基于fifo模式的串行通信总线数据智能纠错方法 Download PDFInfo
- Publication number
- CN104008023B CN104008023B CN201410257554.XA CN201410257554A CN104008023B CN 104008023 B CN104008023 B CN 104008023B CN 201410257554 A CN201410257554 A CN 201410257554A CN 104008023 B CN104008023 B CN 104008023B
- Authority
- CN
- China
- Prior art keywords
- data
- temp
- frame
- array
- host
- 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
Landscapes
- Communication Control (AREA)
Abstract
本发明涉及一种基于FIFO模式的串行通信总线数据智能纠错方法,采用FIFO(First In First Out)模式,处理器在接收完一个完整8位字符后,将其先存入FIFO缓存中,当接收的数据累计到一定程度后通知处理器一次性响应,发送采用类似形式,一次性将多个8位字符存入FIFO缓存中逐个发送。很明显,这样节省了处理器的开销,提高了通信效率,让处理器不用频繁的响应通信任务,从而提高了系统的整体效率。本发明克服目前现有技术中存在的不足,提高了串行通信总线在FIFO这种低系统开销的工作模式下接收端接收数据的可靠性。
Description
技术领域
本发明涉及一种基于FIFO模式的串行通信总线数据智能纠错方法
背景技术
随着计算机系统的应用和微机网络的发展,复杂系统之间的数据通信功能显得越来越重要。串口是计算机上一种非常通用的设备通信协议,串口通讯对嵌入式系统而言意义重大,不但可以实现将数据传输到上位机,而且也能实现上位机对其的指令控制。
串口通信所需电缆线根数少,在远距离通信中可以节约通信成本,尽管比按字节传输的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据,其接线简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20m,并且任意两个设备间的长度不得超过2m;而对于串口而言,其通信长度可达1200m。
RS-232、RS-422与RS-485都是串行数据标准接口。RS422总线与RS485和RS232的电路原理基本相同,都是以差动方式发送和接收,不需要数字地线。RS-422总线为全双工工作模式,四线接口采用独立的发送和接收通道,不必控制数据传输方向,各通信装置之间任何必须的信号交换均可以按软件(XON/XOFF握手)或硬件(一对单独的双绞线)的方式实现。
标准串行通信模式为查询或中断方式:处理器每接收完一个完整8位字符后,即对其进行处理,发送采用类似形式。如果接收或发送的字符比较多的话,很明显,处理器要不断地去响应处理数据。因此,处理器的开销就大大增加,降低了处理器执行效率。
常见的串行通信总线数据传输过程采用数据通信帧格式,即将若干实际需要传输的数据结合一定的通信帧头(X个8位数据)、帧尾(Y个8位数据)和帧校验(Z个8位数据),组成一帧有效的串行总线传输帧格式传输,这种帧格式的通信总线传输格式可以有效的保证数据的完整性和有效性,提高通信可靠性。
目前在串行通信FIFO的普遍应用中,因为接受与发送控制器端不可能保证两者同时开启工作,发送端先于接收端开启的情况是完全有可能存在。因此当串行通信发送端先开启,接收端后开启时,会存在接受到的数据帧格式错位,而FIFO接受过程中仅仅根据接收到的数据个数触发响应,并不对其内容校验,因此处理器接收到的数据格式不对,导致通信故障。
发明内容
要解决的技术问题
为了避免现有技术的不足之处,本发明提出一种基于FIFO模式的串行通信总线数据智能纠错方法,能够在随机初始状态下,提高串行通信总线接收端收到数据在FIFO这种低系统开销的工作模式下的可靠性。
技术方案
一种基于FIFO模式的串行通信总线数据智能纠错方法,其特征在于步骤如下:
步骤1:当处理器FIFO缓冲存储单元接收到X个8位数据一组的串行通信总线数据帧后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp[N]中;
步骤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≠0,判定接收到的数据帧发生错位,进行步骤4;
步骤4:将本帧数据中各个8位数据以出现Temp[i]中i≠0的位置分为两部分,前i位8位数据Temp[0]-Temp[i-1]为一帧符合传输协议8位数据的后半部分,后N-i位数据Temp[i]-Temp[N-1]为一帧符合传输协议8位数据的前半部分;
步骤5:将本帧中有效数据帧的Temp[i]-Temp[N-1]逐位赋给错位接收缓冲数据ReceiveTemp[N-i]中;
步骤6:将前一次错位接收缓冲数据ReceiveTemp[N-i]中的一帧符合传输协议8位数据的前半部分逐位赋给接收数组ReceiveData[N]的前N-i位,并将本帧接收到的一帧符合传输协议8位数据的后半部分位赋给接收数组ReceiveData[N]的后i位,组成符合传输协议的数据帧,返回步骤2进行下一个步帧校验。
有益效果
本发明提出的一种基于FIFO模式的串行通信总线数据智能纠错方法,采用FIFO(First In First Out)模式,处理器在接收完一个完整8位字符后,将其先存入FIFO缓存中,当接收的数据累计到一定程度后通知处理器一次性响应,发送采用类似形式,一次性将多个8位字符存入FIFO缓存中逐个发送。很明显,这样节省了处理器的开销,提高了通信效率,让处理器不用频繁的响应通信任务,从而提高了系统的整体效率。
本发明克服目前现有技术中存在的不足,提高了串行通信总线在FIFO这种低系统开销的工作模式下接收端接收数据的可靠性。
附图说明
图1:基于FIFO模式的串行通信总线数据智能纠错方法的流程
图2:以13个8位数据一组的串行通信总线数据帧为例
具体实施方式
现结合实施例、附图对本发明作进一步描述:
由于存在串行通信总线发送端与接收端不同步的情况,接收到的一帧数据中各个数据位置错位,本帧数据不能通过串口通信总线传输协议的校验。通过分析,我们可以知道,处理器接收到的一帧数据,是由前一次发送数据的后半段和该次发送数据的前半段组成。可以看出,处理器读取的这帧数据,虽然数据相对位置不符合协议要求,但本桢所含数据彼此之间的位置是正确的,即部分整体相对前移或后移了若干位,是具有规律性的。
当处理器FIFO缓冲存储单元接收到设定数量的数据位后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp[N](Temp[0]-Temp[N-1])中,对存入接收数据处理数组Temp[N]中的数据进行分析,根据不同的情况分别给予相应的处理方式,具体操作流程如下:
(1)如果接收数据处理数组Temp[N]中的数据逐位进行检测,判断出X个8位数据帧头在接收数据处理数组Temp[N]中的起始位置Temp[i](i<N)。
(2)如果X个8位数据帧头在接收数据处理数组Temp[N]中的起始位置Temp[i]中i=0,则可判定接收到的数据帧未发生错位,数据帧符合传输协议,将接收数据处理数组Temp[N]中的数据逐位赋给接收数组ReceiveData[N],进行下一步帧校验后对数据解析。
(3)如果X个8位数据帧头在接收数据处理数组Temp[N]中的起始位置Temp[i]中i≠0,则可判定接收到的数据帧发生错位,因此本帧数据中各个8位数据可分为两部分,前i位8位数据Temp[0]-Temp[i-1]为一帧符合传输协议8位数据的后半部分,后N-i位数据Temp[i]-Temp[N-1]为一帧符合传输协议8位数据的前半部分。由此可将本帧中有效数据帧的Temp[i]-Temp[N-1]逐位赋给错位接收缓冲数据ReceiveTemp[N-i]中。
(4)当判定接收到的数据帧发生错位时,将前一次错位接收缓冲数据ReceiveTemp[N-i]中的一帧符合传输协议8位数据的前半部分逐位赋给接收数组ReceiveData[N]的前N-i位,并将本帧接收到的一帧符合传输协议8位数据的后半部分位赋给接收数组ReceiveData[N]的后i位,由此组成的数据帧符合传输协议,进而进行下一步帧校验后对数据解析。
具体实施实例:
如图1,为基于FIFO模式的串行通信总线数据智能纠错方法的流程
如图2,以13个8位数据一组的串行通信总线数据帧为例,帧头为两个8位数据0xEB和0x90,当处理器FIFO缓冲存储单元接收到13个8位数据一组的串行通信总线数据帧后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp[13]中,右侧数组为基于FIFO模式的串行通信总线接收到的原始数据帧,对存入接收数据处理数组Temp[13]中的数据进行分析,可以看出接收到的各个8位数据错位,智能纠错过程如下:
(1)通过对接收数据处理数组Temp[13]中的数据逐位进行检测,判断出,数据帧头0xEB和0x90在接收数据处理数组Temp[13]中的起始位置Temp[6]。
(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]中。
(3)将前一次错位接收缓冲数据ReceiveTemp[7]中的一帧符合传输协议8位数据的前半部分逐位赋给接收数组ReceiveData[13]的前7位,并将本帧接收到的一帧符合传输协议8位数据的后半部分位赋给接收数组ReceiveData[13]的后6位,由此组成的数据帧符合传输协议,进而进行下一步帧校验后对数据解析。
如图2中,左侧数组为采用智能纠错算法后的数组,数据帧符合传输协议,在FIFO这种低系统开销的工作模式下串行通信总线接收端可靠性得到了提高。
Claims (1)
1.一种基于FIFO模式的串行通信总线数据智能纠错方法,其特征在于步骤如下:
步骤1:当处理器FIFO缓冲存储单元接收到X个8位数据一组的串行通信总线数据帧后,触发串行通信总线数据处理任务响应,处理器将FIFO缓冲存储单元中的数据逐位存入接收数据处理数组Temp[N]中;
步骤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≠0,判定接收到的数据帧发生错位,进行步骤4;
步骤4:将本帧数据中各个8位数据以出现Temp[i]中i≠0的位置分为两部分,前i位8位数据Temp[0]-Temp[i-1]为一帧符合传输协议8位数据的后半部分,后N-i位数据Temp[i]-Temp[N-1]为一帧符合传输协议8位数据的前半部分;
步骤5:将本帧中有效数据帧的Temp[i]-Temp[N-1]逐位赋给错位接收缓冲数据ReceiveTemp[N-i]中;
步骤6:将前一次错位接收缓冲数据ReceiveTemp[N-i]中的一帧符合传输协议8位数据的前半部分逐位赋给接收数组ReceiveData[N]的前N-i位,并将本帧接收到的一帧符合传输协议8位数据的后半部分位赋给接收数组ReceiveData[N]的后i位,组成符合传输协议的数据帧,返回步骤2进行下一个步帧校验。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410257554.XA CN104008023B (zh) | 2014-06-11 | 2014-06-11 | 基于fifo模式的串行通信总线数据智能纠错方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410257554.XA CN104008023B (zh) | 2014-06-11 | 2014-06-11 | 基于fifo模式的串行通信总线数据智能纠错方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104008023A CN104008023A (zh) | 2014-08-27 |
CN104008023B true CN104008023B (zh) | 2017-02-22 |
Family
ID=51368685
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410257554.XA Active CN104008023B (zh) | 2014-06-11 | 2014-06-11 | 基于fifo模式的串行通信总线数据智能纠错方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104008023B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63207235A (ja) * | 1987-02-23 | 1988-08-26 | Fujitsu Ltd | フレ−ムアライナ回路 |
CN102510323A (zh) * | 2011-09-22 | 2012-06-20 | 航天科工惯性技术有限公司 | 一种串口数据的帧识别方法 |
-
2014
- 2014-06-11 CN CN201410257554.XA patent/CN104008023B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63207235A (ja) * | 1987-02-23 | 1988-08-26 | Fujitsu Ltd | フレ−ムアライナ回路 |
CN102510323A (zh) * | 2011-09-22 | 2012-06-20 | 航天科工惯性技术有限公司 | 一种串口数据的帧识别方法 |
Non-Patent Citations (1)
Title |
---|
处理整帧数据的FIFO的巧妙控制设计;房海东;《电讯技术》;20030828(第4期);第63-67页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104008023A (zh) | 2014-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5103446A (en) | Local area network adaptive throughput control for instantaneously matching data transfer rates between personal computer nodes | |
WO2014150607A1 (en) | Dynamic congestion control | |
WO2006058067A3 (en) | Systems and methods for digital data transmission rate control | |
CN109062847A (zh) | 片上系统、用于rs485串口通讯的ip核及其控制方法 | |
CN109828943B (zh) | 一种低速率通信网络的提高串口传输速率处理系统及方法 | |
WO2021057017A1 (zh) | 一种现场总线中自动化重放攻击测试方法 | |
CN104142901A (zh) | 一种具有传输优先级的串口复用器实现方法 | |
CN103297346B (zh) | 一种基于ecn机制的tcp友好速率控制方法 | |
US6388989B1 (en) | Method and apparatus for preventing memory overrun in a data transmission system | |
CN104156334A (zh) | 用于多机通讯的串口自适应数据透明传输协议 | |
WO2009067886A1 (fr) | Procédé et dispositif pour émettre et recevoir un surdébit oam d'une couche physique ethernet | |
CN102088383A (zh) | 一种在线从机查询、应答方法及装置、总线系统 | |
CN105635176A (zh) | 一种基于RapidIO的网络数据传输方法 | |
CN105553795B (zh) | 一种在工业以太网中传输标准以太网数据的方法 | |
CN107579894B (zh) | 一种基于fpga的ebr1553总线协议实现装置 | |
US20130250760A1 (en) | Communication link with intra-packet flow control | |
CN104008023B (zh) | 基于fifo模式的串行通信总线数据智能纠错方法 | |
CN101247305B (zh) | 一种总线系统和数据传输方法 | |
CN102957586B (zh) | 基于无冲突协议的全双工rs485总线通信方法 | |
CN107911372B (zh) | 一种基于逻辑器件实现串口设备接入以太网的方法和装置 | |
CN113141288B (zh) | 一种can总线控制器的邮箱报文收发方法和装置 | |
WO2019080546A1 (zh) | 一种调整参数的方法及参数调整装置 | |
CN104486181A (zh) | 一种基于Modbus协议的从设备 | |
CN202206412U (zh) | 基于无冲突协议的全双工rs485总线通信装置 | |
CN101989249A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |