CRC_8 计算方法及代码实现

这篇具有很好参考价值的文章主要介绍了CRC_8 计算方法及代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、引言

(1). CRC寄存器初始值为 0x00。
(2). CRC-8 的模型为:X8+X2+X1+1,由于8进制数只能0~7位,所以舍去X8,最后得出多项式:0x07H( 0000 0111 B)。

2、 计算步骤

(1). 预置 8 位寄存器为十六进制 0x00(即全为 0) ,称此寄存器为 CRC 寄存器;
(2). 把第一个 8 位数据与 8 位 CRC 寄存器的相异或,把结果放于 CRC 寄存器;

(3). 检测相异或后的CRC寄存器的最高位(第7位),若最高位为1,CRC寄存器先左移1位,再与多项式0x07H进行异或;若为0,则CRC寄存器左移1位,无需与多项式进行异或。

(4). 重复步骤 3 ,直到右移 8 次,这样整个 8 位数据全部进行了处理;
(5). 重复步骤 2 到步骤 4,进行下一个 8 位数据的处理;
(6). 最后得到的 CRC 寄存器即为 CRC 校验码。

附参考:
数据(16进制):01 03 61 00 00 02 CRC校验:C2

3、代码的实现(计算法)

/*
* 函数名 :CRC8
* 描述 : 计算CRC8
* 输入 : puchMsg---数据地址,usDataLen---数据长度
* 输出 : 校验值
*/
uint8_t CRC_8(uint8_t *puchMsg, uint8_t usDataLen){
	
	uint8_t uCRC = 0x00;//CRC寄存器
	
	for(uint8_t num=0;num<usDataLen;num++){
		uCRC = (*puchMsg++)^uCRC;//把数据与8位的CRC寄存器的8位相异或,结果存放于CRC寄存器。
		for(uint8_t x=0;x<8;x++){	//循环8次
			if(uCRC&0x80){	//判断最低位为:“1”
				uCRC = uCRC<<1;	//先左移
				uCRC = uCRC^0x07;	//再与多项式0x07异或
			}else{	//判断最低位为:“0”
				uCRC = uCRC<<1;	//右移
			}
		}
	}
	return uCRC;//返回CRC校验值

}

int main(void) {
	uint8_t x[]={0x01 ,0x03 ,0x61 ,0x00 ,0x00 ,0x02};
	while(1){
		uint8_t wCRC_8 = CRC_8(x,sizeof(x)); //获取CRC8校验值
		//输出校验值wCRC_8 即可
	}
}

4、在线CRC校验网址

网址: http://www.ip33.com/crc.html.
附参考:
数据(16进制):01 03 61 00 00 02 ===> CRC校验值:C2
crc8在线计算,C语言,单片机,嵌入式硬件,c++,c#,stm32文章来源地址https://www.toymoban.com/news/detail-596664.html

到了这里,关于CRC_8 计算方法及代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CRC校验Verilog代码在线生成

      在FPGA设计的过程中,在有些场景下,我们需要用到CRC(Cyclic Redundancy Check)校验码,比如以太网报文、信道编码等。对应的,我们需要编写相应的Verilog代码用于计算对应的CRC校验码。我们可以根据CRC校验的原理自己编写一个产生CRC校验码的Verilog模块,也可以通过在线网站进

    2024年02月11日
    浏览(31)
  • CRC16/ModBus校验与C语言实现方法

    目录 一、什么是CRC16/Modbus校验 二、CRC16/Modbus校验的计算步骤 三、CRC16/Modbus校验的C语言实现         CRC16/Modbus校验在设备通信时可以验证数据帧的完整性,从而避免错误数据。其应用十分广泛,主要应用于Modbus通信协议等,类似的校验方法还有许多,例如和校验,本文主

    2024年02月07日
    浏览(30)
  • CRC校验码生成逻辑的实现原理详解——结合C语言和Verilog语言代码分析

    因为前段时间用到CRC校验码,所以在网上找到了很多有关CRC校验码计算原理以及生成CRC校验码的代码实现(包括C语言和Verilog语言的实现)的文章,但关于CRC校验码代码实现的原理未能找到相关文章,于是自己结合C语言和Veirlog语言的实现代码以及CRC校验码的计算原理,对CR

    2023年04月22日
    浏览(88)
  • CRC校验(2):CRC32查表法详解、代码实现及CRC反转

    对于现在的CPU来说,基本上都在硬件上实现了CRC校验。但我们还是想用软件来实现一下CRC的代码,这样可以更深入地理解里面的原理。所以这一节就来详细地解释如何使用查表法从软件上来实现CRC-32的校验。另外,CRC还有一种反转的情况,实际上反转和不反转没有什么太大的

    2024年02月09日
    浏览(146)
  • CRC计算流程详解和FPGA实现

            CRC校验,中文翻译过来是:循环冗余校验,英文全称是:Cyclic Redundancy Check。是一种通过对数据产生固定位数的校验码,以检验数据是否存在错误的技术。         其主要特点是检错能力强、开销小,易于电路实现。像网络通信上,就使用了CRC32进行数据校验。

    2024年04月12日
    浏览(22)
  • CRC校验码详解+Verilog实现(含代码)

    目录 CRC码简介 CRC校验码生成步骤  CRC码生成多项式  CRC校验码Verilog实现 CRC即循环冗余校验,是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定 CRC码是由2部分组成的,前部分是信息码,后部分是校验码,如果CRC码长共 n bit,信息码长

    2023年04月08日
    浏览(32)
  • CRC校验码计算,以常用CRC-8为例

    CRC即循环冗余校验码 :是数据通信领域中最常用的一种查错校验码,其 特征是信息字段和校验字段的长度可以任意选定。 CRC校验原理 :在要发送的帧后面附加一个数,生成一个新帧发送给接收端。它要 使所生成的新帧能与发送端和接收端共同选定的某个特定数整除 (注意

    2023年04月14日
    浏览(27)
  • 循环冗余校验(CRC)的计算

    循环冗余校验(Cyclic Redundancy Check,CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。 若信息码字为111000110,生成多项式 x 5 x^5 x 5 + x

    2024年02月11日
    浏览(38)
  • 16位CRC校验码计算,485MODBUS计算

    CRC计算方法是: 1、 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器。 2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。 3、 把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。

    2024年02月11日
    浏览(31)
  • CRC32校验算法原理及计算说明

    本文主要介绍如何使用CRC32校验算法计算得出FCS(Frame Check Sequence帧检验序列). 参考: 1、CRC32加密算法原理 2、CRC多项式对应代码 作用:在远距离数据通信中,为确保高效而无差错地传送数据,对数据进行校验即差错控制。 CRC原理实际上就是在一个K位二进制数据序列之后附

    2023年04月22日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包