CN101630997B - 一种环形总线数据报文crc校验字的动态修正方法 - Google Patents
一种环形总线数据报文crc校验字的动态修正方法 Download PDFInfo
- Publication number
- CN101630997B CN101630997B CN 200910061656 CN200910061656A CN101630997B CN 101630997 B CN101630997 B CN 101630997B CN 200910061656 CN200910061656 CN 200910061656 CN 200910061656 A CN200910061656 A CN 200910061656A CN 101630997 B CN101630997 B CN 101630997B
- Authority
- CN
- China
- Prior art keywords
- crc
- data
- message
- network
- check word
- 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.)
- Expired - Fee Related
Links
Images
Abstract
本发明提出一种环形总线数据报文CRC校验字的动态修正方法,该方法采用FPGA实现。当网络报文经过各从站点时,网络报文与从站完成数据交换并被发送给下一站,与此同时,从站根据交换数据后的新网络报文的数据计算新的CRC校验字,新的CRC校验字的计算采用按位计算法,并采用4至16倍网络芯片工作时钟作为CRC的高频计算频率,减少了CRC校验字的计算时间,在网络报文几乎无延时等待的情况下,实现新的CRC校验字紧随网络报文发送给下一站,从而实现CRC校验字的动态修正。网络报文延时和CRC高频计算频率和CRC类型有关,8倍网络芯片工作时钟下,CRC-32校验的网络延时是2个网络芯片工作时钟。本发明数据报文的延时很短,几乎可以忽略不计,非常适合于“飞读”通信模式。
Description
技术领域
本发明涉及现场总线领域,尤其涉及一种环形总线数据报文CRC校验字的动态修正方法。
背景技术
高档数控系统内部控制器和伺服驱动器之间大都采用现场总线的数字通信方式。如FANUC采用FSSB总线,SIMENS采用PROFINET等现场总线。和模拟量、脉冲串方式相比,现场总线具有较高的实时性和可靠性,能满足数控机床高速、高精度的加工要求。
在这种总线式数控系统中,控制装置和伺服驱动器或I/O设备之间通过现场总线联网形成网络。通常,经由现场总线进行的数据交换按照主从原则执行。在总线网络中,主导总线上的数据传输的站点称为主站,如数控系统中的控制装置。而被动执行数据传输的站点称为从站,即它们只被允许应主站要求确认收到信号或者转发信号,如数控系统中的伺服驱动器或I/O设备。
通常,为了避免布线复杂化,具有主从结构的现场总线网络采用环形拓扑结构,所有总线用户都连接到一个环形传输路径,如图1所示。
然而网络通信中,由于信道传输特性不理想以及噪声、电磁干扰等问题,导致传输信号发生畸变,从而产生误码。为了保证信息可靠传输,须采取措施使数据接收方能实时检测出误码,并采取相应的补救措施。通常的做法是在数据帧中设有一个帧校验码字段,并规定它所采用的帧校验码编码方法。在数据传输时,发送端对数据帧中的数据码进行帧校验编码,编码结果存放在帧校验码字段上,并随数据帧一起传送给接收端。接收端接收到带有校验码的数据帧后,采用相同的编码方法对数据帧中的数据码进行编码,并与帧校验码字段上的校验码进行比较,以检验它们之间的一致性。如果不一致,则说明传输有差错。循环冗余校验方法(CyclicalRedundancy Check,缩写为CRC)因为具有编码和解码方法简单,检错和纠错能力强等特点,在网络通信中得到了广泛的应用。常用的CRC校验方法有CRC-32、CRC-16等。
在图1所示的环形结构中,主站将需要发送给各从站的数据信息按照一定的规则打成一个如图2所示的数据包发送给环形传输路径,环形网络中各从站在数据包经过时,无需接收全部数据包,而是在报文经过其节点时只下载属于本站的编址数据,并将需要上传的数据插入至报文相应的位置之中,并将数据包转发给与其相连的下一个站点,数据包最后由主站的另一个端口接收。数据包从主站发出,依次不停留地通过各个从站,以近似均匀的速度在网络中流动,从站在数据包经过时,与数据包进行实时的数据交换,这种传输方式称为“飞读”。
然而,由于数据报文在经过各从站时,从站与数据报文交换了数据,数据报文的数据内容发生了变化,因而,数据报文中的CRC校验字也必须相应的进行修改,以确保后续站点能正确的对数据报文进行校验。这就要求从站能根据数据报文的内容,对数据报文中的CRC校验字进行动态修正,并将整个报文顺利发送到下一个站点。
发明内容
本发明的目的在于提供一种环形总线数据报文CRC校验字的动态修正方法,该方法可以实时计算并动态修正数据报文中CRC校验字。
本发明提供的环形总线数据报文CRC校验字的动态修正方法,各从站按照下述过程进行处理:
第1步等待接收网络报文;
第2步当网络报文到达时,判断是否接收数据,如果是,则并发执行过程A和过程B,否则返回第1步;
过程A包括下述第A1步至第A6步
第A1步提取网络报文中数据中的地址信息;
第A2步判断提取的地址信息与本站的地址是否匹配;是者执行第A3步;否则丢弃该报文数据,结束过程A;
第A3步从网络报文下载属于本站点的数据至双端口RAM,同时将本站点需要上传的数据插入报文;
第A4步将经过第A3步处理后的网络报文除原CRC校验字之外的部分按网络芯片的工作时钟发送给下一站,同时计算新的CRC校验字;
第A5步将新的CRC校验字按网络芯片的工作时钟紧随网络报文数据发给下一站;
第A6步过程A结束;
过程B包括第B1步至第B3步
第B1步对本站接收到的网络报文进行实时硬件CRC校验;
第B2步判断CRC校验是否正确,是,则提示本从站的CPU从双端口RAM里下载数据,否则丢弃双端口RAM里的数据;
第B3步过程B结束。
“飞读”传输方式要求通信站点能够对CRC校验字进行动态修正。以往的各种CRC校验方法一般都有比较长的延时,不能满足“飞读”传输方式的要求。本发明方法基于环形网络在“飞读”通信状态,对数据报文动态读取,依据变化了的数据报文内容,可以实时计算并动态修正数据报文中CRC校验字。
附图说明
图1为现场总线环形网物理连接结构图;
图2为现场总线数据帧格式;
图3为CRC校验字数据格式示意图;
图4为实时CRC计算及动态修正程序模块划分示意图;
图5为CRC校验字动态修正方法的流程图;
图6为CRC校验字计算流程图;
图7为飞读方式下按位实时CRC计算时序图与接收转发方式下按位CRC计算时序图。
具体实施方式
CRC校验字是一组线性、分组的系统码,通常前k位为信息码元,后r位为监督码元(如图3所示)。CRC校验采用多项式编码方法,被处理的n个比特的数据,可以看做一个(N-1)阶多项式。如1101 0101对应的多项式为x7+x6+x4+x2+1。CRC校验一般采用二进制模2运算法则,在该法则下,多项式乘法和除法运算与普通代数式的乘除法运算是一样的。多项式的加减运算以2为模,加减时不带进位,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价。
CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以约定的生成多项式G(x)产生一个校验用的r位CRC校验字,并附在二进制码序列末尾,构成一个新的(k+r)位二进制码序列,最后发送出去。在接收端,用G(x)去除接收到的k+r位的信息,若有余数,则传输出错。
设K位二进制信息码元对应的多项式为M(x),CRC校验字的产生规则是,先将要发送K位信息码元左移r位,即将M(x)乘以xr.然后将M(x)xr除以生成多项式G(x),得到的余数R(x)就是CRC校验字。如(1)式所示。其中M(x)表示k位的二进制信息码元,G(x)为生成多项式,Q(x)为商多项式,R(x)是余数多项式(即CRC校验字)。
M(x)xr=Q(x)G(x)+R(x) (1)
把(1)式移项得
M(x)xr-R(x)=Q(x)G(x) (2)
由于模2的加法、减法运算等价,所以(2)式可表示为:
M(x)xr+R(x)=Q(x)G(x)=T(x) (3)
T(x)就是发送方要发送的数据,与图3所示的格式一致。
由(3)式可知,如果通信过程没有错误,接收方收到的信息T’(x)应该等于T(x),即能被G(x)整除,余数为0。如果余数不为0,则T’(x)不等于T(x),表明通信过程发生了错误。
根据生成多项式G(x)的不同,CRC校验方法可分为CRC-32、CRC-16、等。CRC-32的生成多项式G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1,CRC-16的生成多项式G(x)=x16+x12+x5+1。
CRC校验在工程实现上,常用的两种方式分别是按位计算法和查表计算法。本发明采用的是按位计算法,即把每一个比特都作为一个数据来处理。
对于先接收再转发的网络通信模式,从站是先接收整个数据报文,然后对数据进行替换和CRC校验字修改后,再将整个数据报文转发出去。在这种通信模式中,CRC的计算和修改可按照传统的按位计算法和查表计算法进行,但数据报文在本从站点有一定时间的延时。而在“飞读”通信方式中,网络上的报文比特流不允许在从站“停留”,从站必须在报文比特流不停留地通过本从站点时实时计算并动态修正CRC校验字。
为了解决这种“飞读”通信模式中,数据报文的校验问题,本发明提出一种实时计算和动态修正CRC校验字的方法。
该方法采用按位计算法并利用FPGA实现。图4为实时CRC计算及动态修正程序模块划分示意图。它包括CRC计算模块,网络延时模块和发送控制模块。CRC计算模块采用按位计算法,实时计算CRC校验字,并把更新的临时CRC值存放在移位寄存器中,当CRC计算过程完成后,门1开,将存放在移位寄存器中的CRC校验字传送给发送控制模块。在发送控制模块中,信息比特流和新的CRC值按图3所示格式要求组合后被发送给下一站,实现CRC校验字的动态修正。由于该方法采用的是按位计算CRC法,在进行CRC计算时须在比特流后增加r位0,所以会带来了几个phy_clk(网络芯片工作时钟)的延时,这个延时取决于CRC计算频率和CRC校验类型,本发明的实施例采用8倍频的phy_clk作为CRC计算频率,这样网络延时就是r/(2×8)=r/16个phy_clk。所以CRC-32校验的网络延时是2个phy_clk,CRC-16校验的网络延时则是1个phy_clk。CRC的计算频率可以根据具体的硬件条件采用更高倍phy_clk倍频,倍频系数越高,网络延时越短。为了使CRC校验码紧随信息码元,有必要对信息比特流加一个时延为r/16个phy_clk的延时补偿模块,如图4中所示。
下面结合附图以CRC-32(32位CRC校验)为例对本发明提出的方法的实施方式进行详细说明。
环形总线数据报文CRC校验字的动态修正通常由从站在数据处理过程中完成。如图5所示,本发明方法的流程包括:
步骤1,等待网络报文;
步骤2,当网络报文到达时,判断是否接收数据,如果是,则并发执行过程A和过程B,否则返回步骤1;
过程A包括下述步骤A1~A6;
A1提取网络报文中数据中的地址信息;
A2判断提取的地址信息与本站的地址是否匹配;是者执行步骤A3;否则丢弃该报文数据,结束过程A;
A3从网络报文下载属于本站点的数据至双端口RAM,同时将本站点需要上传的数据插入报文;
A4将经过步骤A3处理后的网络报文(不包含原CRC校验字)按网络芯片(PHY)的工作时钟发送给下一站,同时计算新的CRC校验字。
该步骤中的网络报文数据发送和新的CRC校验字的计算是并发进行的,这是实现数据报文CRC动态修正的关键;
A5将新的CRC校验字按PHY的时钟紧随网络报文数据发给下一站;
A6,过程A结束。
过程B包括B1~B3
B1实时硬件CRC校验;
B2判断CRC校验是否正确,是,则提示CPU对双端口RAM里的数据进行相关处理;否,丢弃双端口RAM里的数据;
B3过程B结束。
如图6所示,步骤A4中,新的CRC校验字计算过程包括:
步骤①,CRC校验字运算开始;
步骤②,将数据长度寄存器(16位)、临时数据寄存器(32位)及CRC计算移位寄存器(33位)初始化为0;
步骤③,将报文比特流长度值赋给数据长度寄存器;
步骤④,将报文比特流(不包含原CRC校验字)按位存放在临时数据寄存器,并在其尾部添加32位比特0,作为待发送比特流;
步骤⑤,将待发送比特流按位写入CRC计算移位寄存器最低(右)位;其中,报文比特流的写入频率为网络芯片工作时钟phy_clk,32位尾比特0的写入频率为8×phy_clk。
步骤⑥,CRC计算移位寄存器左移一位;
步骤⑦,判断CRC计算移位寄存器移出比特是否为1,是,则执行(CRC计算移位寄存器低32位数据)=(CRC计算移位寄存器低32位数据)异或(CRC生成多项式),然后进入步骤8;否则判断信息比特流是否处理完毕,是,则CRC计算移位寄存器中低32位为新的CRC校验字,再进入步骤8;否则返回步骤5;
步骤8,程序结束。
图7为飞读方式下按位实时CRC计算时序图与转发方式下按位CRC计算时序图,其中:
Phy_clk为网络芯片(PHY)的工作时钟;
Data_in[1..0]为从站接收的网络报文比特流;
Data_valid为接收数据有效电平;
Crc_in[1..0]为经过从站数据处理后需要发送的数据加上32位尾比特0,也就是流入图5所示寄存器数组二的比特流;
Data_out[1..0]为该站发送给下一站的网络报文比特流;
Crc_temp为图5中CRC计算移位寄存器中的临时CRC计算结果;
飞读方式下,从站CRC校验是在从站开始接收网络数据时就开始。如图6所示,当Data_valid由低电平跳变到高电平时,即Data_in[1..0]报文比特流开始被从站接收时,CRC校验字的实时计算就开始进行。经过从站数据“飞读飞写”模块后,原来的网络报文中的数据Data_in[1..0]按网络芯片工作时钟phy_clk依次被更换,形成需要发送的报文比特流。按照CRC校验字的计算规则,为了进行按位CRC校验,须在其后加上32位尾比特0,需要发送的报文比特流及后面的32位尾比特0一起构成Crc_in[1..0]。此时CRC计算移位寄存器按照如图5所示的程序流程移位,按位将Crc_in[1..0]读入寄存器的最低位(需要发送的报文比特流读入频率为phy_clk,32位尾比特0的读入频率为8*phy_clk)。同时将最高位移,如果移出位为1,则执行(CRC计算移位寄存器低32位数据)=(CRC计算移位寄存器低32位数据)异或(CRC生成多项式)。如果移出位为0,则继续移位。
由于该方法采用的是按位计算CRC法,在报文比特流后增加了32位0,所以会带来了几个phy_clk的延时,这个延时取决于CRC计算频率,本发明的实施例采用8倍频的phy_clk作为CRC计算频率,这样网络延时就是r/2*8=r/16个phy_clk。所以CRC-32校验的网络延时是2个phy_clk,CRC-16校验的网络延时则是1个phy_clk。CRC的计算频率可以根据具体的硬件条件采用更高倍phy_clk倍频,倍频系数越高,网络延时越短。
为了使CRC校验码紧随报文比特流,必须对报文比特流进行2个phy_clk的延时,如图6所示的Data_out[1..0]。这种方式能保证当需要发送的报文比特流按网络芯片的时钟phy_clk发送到最后一位时,CRC校验字(Crc_temp[1..0]最后一个数据)恰好计算完毕,CRC校验字可以紧随报文比特流一起发出。
以上所述为本发明的较佳实施例而已,但本发明不应该局限于该实施例和附图所公开的内容。所以凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。
Claims (1)
1.一种环形总线数据报文CRC校验字的动态修正方法,各从站按照下述过程进行处理:
第1步等待接收网络报文;
第2步当网络报文到达时,判断是否接收数据,如果是,则并发执行过程A和过程B,否则返回第1步;
过程A包括下述第A1步至第A6步
第A1步提取网络报文中数据中的地址信息;
第A2步判断提取的地址信息与本站的地址是否匹配;是者执行第A3步;否则丢弃该报文数据,结束过程A;
第A3步从网络报文下载属于本站点的数据至双端口RAM,同时将本站点需要上传的数据插入报文;
第A4步将经过第A3步处理后的网络报文除原CRC校验字之外的部分按网络芯片的工作时钟发送给下一站,同时计算新的CRC校验字;
第A5步将新的CRC校验字按网络芯片的工作时钟紧随网络报文数据发给下一站;
第A6步过程A结束;
过程B包括第B1步至第B3步
第B1步对本站接收到的网络报文进行实时硬件CRC校验;
第B2步判断CRC校验是否正确,是,则提示本从站的CPU从双端口RAM里下载数据,否则丢弃双端口RAM里的数据;
第B3步过程B结束;
第A4步按照下述过程计算新的CRC校验字:
第C1步将数据长度寄存器、临时数据寄存器及CRC计算移位寄存器初始化为0;
第C2步将报文比特流长度值赋给数据长度寄存器;
第C3步除去报文比特流中的原CRC校验字,并在其尾部添加32位尾比特0,并按位存放到临时数据寄存器,作为待发送比特流;
第C4步将待发送比特流按位写入CRC计算移位寄存器最低位,其中,报文比特流的写入频率为网络芯片工作时钟,32位尾比特0的写入频率为报文比特流的写入频率的4至16倍;
第C5步CRC计算移位寄存器从最高位移出一位;
第C6步判断CRC计算移位寄存器移出的一位是否为1,是,则执行式(I),然后进入第C7步;否则判断待发送比特流是否处理完毕,是,则CRC计算移位寄存器中低32位为新的CRC校验字,再进入第C7步,否则返回第C4步;
(CRC计算移位寄存器低32位数据)=(CRC计算移位寄存器低32位数据)异或(CRC生成多项式) 式(I)
第C7步结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910061656 CN101630997B (zh) | 2009-04-14 | 2009-04-14 | 一种环形总线数据报文crc校验字的动态修正方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910061656 CN101630997B (zh) | 2009-04-14 | 2009-04-14 | 一种环形总线数据报文crc校验字的动态修正方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101630997A CN101630997A (zh) | 2010-01-20 |
CN101630997B true CN101630997B (zh) | 2012-08-15 |
Family
ID=41575963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200910061656 Expired - Fee Related CN101630997B (zh) | 2009-04-14 | 2009-04-14 | 一种环形总线数据报文crc校验字的动态修正方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101630997B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106209681B (zh) | 2016-06-28 | 2019-05-10 | 华为技术有限公司 | 一种队列管理方法和装置 |
CN106921550B (zh) * | 2017-02-08 | 2019-09-17 | 广州广哈通信股份有限公司 | 可识别站点顺序及数量的环网信令传输方法 |
CN112269424A (zh) * | 2020-11-19 | 2021-01-26 | 珠海零边界集成电路有限公司 | 一种芯片时钟频率校准方法、装置、设备和介质 |
CN117220833B (zh) * | 2023-11-09 | 2024-01-26 | 新华三网络信息安全软件有限公司 | Crc计算电路、芯片、报文处理方法及网络安全设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1930814A (zh) * | 2004-01-16 | 2007-03-14 | Zih公司 | 在数据传输系统中计算并验证数据完整性的方法和系统 |
CN101083657A (zh) * | 2007-06-29 | 2007-12-05 | 华中科技大学 | 数控系统实时同步网络控制器及通信控制方法 |
CN101141451A (zh) * | 2007-10-26 | 2008-03-12 | 华中科技大学 | 数控系统通信接口、数控系统及数据接收和发送方法 |
-
2009
- 2009-04-14 CN CN 200910061656 patent/CN101630997B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1930814A (zh) * | 2004-01-16 | 2007-03-14 | Zih公司 | 在数据传输系统中计算并验证数据完整性的方法和系统 |
CN101083657A (zh) * | 2007-06-29 | 2007-12-05 | 华中科技大学 | 数控系统实时同步网络控制器及通信控制方法 |
CN101141451A (zh) * | 2007-10-26 | 2008-03-12 | 华中科技大学 | 数控系统通信接口、数控系统及数据接收和发送方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101630997A (zh) | 2010-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3306210B2 (ja) | Crcコードの確認方法及び装置 | |
CN101630997B (zh) | 一种环形总线数据报文crc校验字的动态修正方法 | |
CN101702639B (zh) | 循环冗余校验的校验值计算方法及装置 | |
US9300421B2 (en) | Methods to achieve accurate time stamp in IEEE 1588 for system with FEC encoder | |
CN105119694B (zh) | 一种计算高速网络中crc值的方法及系统 | |
CN104158624B (zh) | 一种用于btm系统的冗余二取二解码控制装置及解码方法 | |
AU669746B2 (en) | Method and device for detection and correction of errors in ATM cell headers | |
CN107154836A (zh) | 一种基于fpga的并行循环冗余crc校验方法 | |
CN106598889A (zh) | 一种基于fpga夹层板的sata主控器 | |
CN1841976B (zh) | 一种传输实时并行数据流的方法及系统 | |
CN109936376A (zh) | 按字节运算循环码crc16-ccitt校验的方法 | |
CN104052588A (zh) | 用于为利用fec编码器的系统实现按ieee 1588的精确时间戳的方法 | |
US6982994B2 (en) | Synchronization correction circuit | |
CN101039323B (zh) | 多速率多协议比特流处理器 | |
CN103684736A (zh) | 一种高速通信中时钟同步的方法 | |
CN103763064A (zh) | 适用于超高速通讯系统的循环冗余校验码生成方法与电路 | |
CN201054609Y (zh) | 基于光纤的高速串行工业实时通信总线系统 | |
CN101588222B (zh) | 具有纠错处理功能的通讯适配器及其应用 | |
CN105141395A (zh) | 一种宽带接入网系统中帧净荷提取方法 | |
EP0737390B1 (en) | Device for establishing cell boundaries in a bit stream and crc calculation | |
CN102457431B (zh) | 信元传输方法及装置 | |
CN104113940A (zh) | 用于建筑和工业控制中无线传感器信息传输的装置及方法 | |
Nayani et al. | Design and Implementation of Uart Protocol for Avionics Applications | |
CN1798014B (zh) | 一种循环冗余编码定帧方法 | |
CN112104537B (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120815 Termination date: 20160414 |
|
CF01 | Termination of patent right due to non-payment of annual fee |