CRC校验

采用如下的CRC校验方法

冗余循环码(CRC)包含2个字节。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如两者不相符,则表明出错。

CRC码的计算方法是,先预置16位寄存器全为1。再逐步把8位数据信息进行处理。在进行CRC码计算时只用8位数据位;起始位、停止位及奇偶校验位都不参与CRC码计算。

计算CRC码的步骤:

  1. 预置16bits寄存器为为0xFFFF(即全为1),称此寄存器位CRC寄存器。
  1. 把第一个8bits数据与16bits CRC寄存器的低位相异或,把结果放于CRC寄存器。
  1. 把CRC寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位。
  1. 如果最低位为0:重复第3步;如果最低位为1:CRC寄存器与0xA001进行异或运算。
  1. 重复步骤3和4,直至右移8次,这样整个8bits数据全部进行了处理。
  1. 重复步骤2到步骤5,进行下一个8bits数据的处理。
  1. 最后得到的CRC寄存器即为CRC码。

代码如下:

void crc16(uint8_t data,uint16_t* crc){
  uint8_t i=0;
  while(i<8){
    *crc ^= ((uint16_t)data);
    shift:  *crc >>=1;
    if(*crc&0x0001)
      *crc ^=0xa001;
    else
    goto shift;
    i++;
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CRC校验,全名叫做循环冗余校验码,是数据通讯中最常采用的校验方式。为了学习这个CRC,在网上找了好多资料,下面这...
    AmdyTeng阅读 6,364评论 2 6
  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,368评论 8 114
  • 产品描述 工作频段 **CC1100: **400-464 MHz and 800-928MHzCC1101: 3...
    Alex_Lin阅读 4,745评论 1 0
  • SPI通信实验 SPI简介 串行外设接口(Serial Peripheral Interface Bus,SPI)...
    btskyrmb阅读 9,662评论 1 12
  • 15年的9月1日,这一天,我们分手了,为我们这段谈了七年的恋爱划上了一个永久的静止符。 1、“好,我答应你,我和她...
    张嘴就来阅读 434评论 0 0