超高频 EPC GEN2协议 CRC5校验电路生成算法

 关于校验我网上搜了一堆资料,看不懂,所以那些都是狗屁,没讲到关键点上。

有一篇还可以,它是关于实际的校验码是如何计算的,http://blog.csdn.net/liyuanbhu/article/details/7882789但是还是有错误。我知道一个概念,就是它的最基本的原理是:设定一个被除数,比如01001,被校验的是11011,那么就是拿后者除以前者,注意作除法时,不借位。实际上就等于异或。01001被称为生成多项式。

好吧实际应该根据EPC GEN2协议里面定义电路来。

 

 

图1-4  EPC GEN2 CRC校验码生成电路。

 

上面的生成电路,总共5个D触发器,特性。时钟沿上升来临时,输出等于输入。

电路预设的输出值为Q4-Q0为01001(2进制)。现在开始计算,为方便起见,右边为高位,左边为低位。

 

输入值为:11011

预设值为:10010

 

第①步:

取输入值最高位1,与预设值的最高位0相异或,得到1,1再作为第一个触发器的输入,作为第四个触发器的前面异或器的输入。现在看每一位的值更新为多少。

最后一位,随着上升沿的到来,更新为原来第四位的值为1。

倒数第4位,更新为第三位的值与1的异或,第三位的值是0,所以第四位为1

第三位 为原先的第二位的值 为0,

第二位,为原先第一位的值为1

第1位,为原先最高位和预设值最高位的异或值,为1

所以输入一个字节之后。Q4-Q0的值是11011(右边是最高位),所以现在预设值变为11011

 

那么上面的过程可以简化成什么呢?

它可以简化成

当预设值最高位与输入的数字异或结果是1时

预设值变成((预设值>>1)^10010)(这里还是右边是最高位)

这个很好理解啊,如果预设值右边移出来1位,最低位补零,那么最低位与1的异或值是1,满足要求,第二位就是原来的第一位、第三位就是原来的第二位,相当于分别异或0,第四位是原先第三位与1的异或值,满足异或1的表达式,最后一位就是原先的第四位,满足异或0的条件,上面是各自位异或的情况。

 

上面是对原先最高位异或是1的情况,如果最高位异或结果是0的情况,这个时候直接把预设值右移出一位便可,相当于不需要异或。

 

上面就是根据电路分析的生成校验码的过程。下面是伪代码,依然是右边是最高位。

 

BEGIN

预设值

输入

校验多项式

While(输入所有位数没校验完)

{

  If 输入最高位^预设值最高位结果是1

预设值=(预设值>>1)^校验多项式

  Else

预设值=预设值>>1;

输入>>1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值