CRC8校验原理

本文详细介绍了CRC8校验的原理,包括步骤和具体实现。首先,CRC初始值和校验key通常根据数据手册设定,例如BQ76930的CRC值为0,多项式为1 0000 0111。校验过程涉及两轮循环,每轮处理8位,通过左移和异或操作进行计算。在每轮循环中,使用掩码对数据进行轮询,根据结果进行CRC的异或操作。最后,提供了一个具体的代码示例和测试函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

假设CRC8校验slave address + data byte
传入两个字节的数据(16位)
CRC初始值及校验key查看数据手册 不同芯片有不同的要求
如(BQ76930)

The CRC polynomial is x8 + x2 + x + 1, and the initial value is 0.

因此,初始CRC=0,多项式表示 1 0000 0111 有提到的位为1 最高位不需要参与校验 结果key为0x07

步骤

1、进行两轮循环 每个循环校验8位

2、在for循环中对CRC进行8次处理,从最高位开始 如果CRC为0则左移1位。如果不为0,则CRC先左移1位,然后和key进行异或

3、每个for中都有一次字节ptr(8位)& i 相当于ptr为掩码 从高位到低位轮询 如果为1 则CRC进行异或 否则不进行操作
数据0x11 key0x07 结果0x77

代码

unsigned char CRC8(unsigned char *ptr, unsigned char len,unsigned char key)
{
	unsigned char i;
	unsigned char crc=0;
	while(len--!=0)
	{
		for(i=0x80; i!=0; i/=2)
		{
			if((crc & 0x80) != 0)
			{
				crc *= 2;
				crc ^= key;
			}
			else
				crc *= 2;

			if((*ptr & i)!=0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值