打印
[verilog]

有关CRC校验的问题

[复制链接]
940|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
幽白|  楼主 | 2019-3-11 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近期在做一个数据采集传输模块,采集6000多个数据打包,使用CRC校验。网上查找的相关verilog程序均是对单一数据处理的程序,没有对一个完整数据包的处理。c倒是有之前使用过的程序,但语言转换不熟练,所以暂时卡住了。望大神指教。下面贴出c的程序。
u16 cal_crc16(u8 *ptr, u16 len)
{
  u16 crc;
  u16 i;
  crc=0;
  while(len--!=0) {
      for(i=0x80; i!=0; i/=2){
          if((crc&0x8000)!=0){
              crc *= 2;
              crc ^= CRC16_CCITT;
          }
          else{
              crc *= 2;
          }
          if((*ptr&i)!=0){
              crc ^= CRC16_CCITT;
          }
      }
      ptr++;
  }
  return(crc);
}

相关帖子

沙发
幽白|  楼主 | 2019-3-11 15:21 | 只看该作者
我自己的想法还是基于网上verilog程序的思路。由于使用的是CRC_CCITT,将接收到的数据存入一个寄存器,按字节逆序,计算完毕之后再逆序。不知道这样对不对。

使用特权

评论回复
板凳
zhangmangui| | 2019-3-11 22:57 | 只看该作者
我觉得思路还是边接收边计算   计算结果和最后的CRC位进行对比   
如果可以就是将接收完成的包进行计算对比   
计算方法就是上次的计算结果和下一个新的数据进行计算    这样持续下去

使用特权

评论回复
地板
幽白|  楼主 | 2019-3-12 09:27 | 只看该作者
zhangmangui 发表于 2019-3-11 22:57
我觉得思路还是边接收边计算   计算结果和最后的CRC位进行对比   
如果可以就是将接收完成的包进行计算对比 ...

提供了新的思路,谢谢了。

使用特权

评论回复
5
zhangmangui| | 2019-3-13 22:56 | 只看该作者
幽白 发表于 2019-3-12 09:27
提供了新的思路,谢谢了。

有好的方法了    同样求分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

13

帖子

0

粉丝