news 2026/4/22 18:06:50

CRC-8通信校验真实示例详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CRC-8通信校验真实示例详解

一、选定标准(通用:CRC8-0x07)

  • 多项式:0x07
  • 初始值:0x00
  • 无输入反转
  • 无输出反转
  • 无最终异或
  • 适用:LIN 总线、传感器、UART、I2C

固定规则

  1. crc初始值 =0x00
  2. 对每个字节:
    • crc = crc ^ 字节
    • 循环8 次
      • 如果得到的crc结果(最高位 = 1)则 →crc = (crc << 1) ^ 0x07
      • 否则→crc = crc << 1

二、数据示例

待校验数据:2 个字节 →0x320x01要算出它的CRC8 校验值


三、手动计算全过程

初始状态

crc = 0x00


处理第 1 个字节:0x32

  1. crc = crc ^ 0x32 = 0x00 ^ 0x32 = 0x32
  2. 对 0x32 循环8 次移位判断

0x32 =00110010

  1. 最高位 = 0 → 左移 → 0x64
  2. 最高位 = 0 → 左移 → 0xC8
  3. 最高位 = 1 → 左移 + 异或 0x07 → 0x97
  4. 最高位 = 1 → 左移 + 异或 0x07 → 0x29
  5. 最高位 = 0 → 左移 → 0x52
  6. 最高位 = 0 → 左移 → 0xA4
  7. 最高位 = 1 → 左移 + 异或 0x07 → 0x4F
  8. 最高位 = 0 → 左移 → 0x9E

更详细:

第 1 次

最高位 0 → 左移 1 0011 0010 << 1 =0110 0100 (0x64)

第 2 次

最高位 0 → 左移 1 0110 0100 << 1 =1100 1000 (0xC8)

第 3 次

最高位1→ 左移 1 再异或 0x07 0xC8 << 1 = 0x90 0x90 ^ 0x07 =1001 0111 (0x97)

第 4 次

最高位1→ 左移 1 再异或 0x07 0x97 << 1 = 0x2E 0x2E ^ 0x07 =0010 1001 (0x29)

第 5 次

最高位 0 → 左移 1 0010 1001 << 1 =0101 0010 (0x52)

第 6 次

最高位 0 → 左移 1 0101 0010 << 1 =1010 0100 (0xA4)

第 7 次

最高位1→ 左移 1 异或 0x07 0xA4 << 1 = 0x48 0x48 ^ 0x07 =0100 1111 (0x4F)

第 8 次

最高位 0 → 左移 1 0100 1111 << 1 =1001 1110 (0x9E)

👉 处理完第 1 字节:crc = 0x9E


处理第 2 个字节:0x01

  1. crc = 0x9E ^ 0x01 = 0x9F1001 1111
  2. 对 0x9F 循环8 次移位判断

最终 8 次算完结果:👉crc =0xD4

其中8次循环细节

  1. 最高位 1 → <<1=0x3E ^0x07 = 0x39
  2. 最高位 0 → <<1 = 0x72
  3. 最高位 0 → <<1 = 0xE4
  4. 最高位 1 → <<1=0xC8 ^0x07 = 0xCF
  5. 最高位 1 → <<1=0x9E ^0x07 = 0x99
  6. 最高位 1 → <<1=0x32 ^0x07 = 0x35
  7. 最高位 0 → <<1 = 0x6A
  8. 最高位 0 → <<1 = 0xD4

四、最终结果

数据:0x32, 0x01CRC8 校验值 =0xD4

CRC8(0x32, 0x01) = 0xD4


五、发送端与接收端完整流程

发送端

  1. 原始数据:0x32 0x01
  2. 计算 CRC8:0xD4
  3. 发送:0x32 0x01 0xD4

接收端

  1. 收到:0x32 0x010xD4
  2. 对前 2 字节重新计算 CRC8 → 得到 0xD4
  3. 对比收到的 CRC 与计算值一致 → 数据正确

六、可直接运行的 C 代码(验证结果)

c语言

#include <stdio.h> #include <stdint.h> uint8_t CRC8_Calc(uint8_t *data, uint32_t len) { uint8_t crc = 0x00; while(len--) { crc ^= *data++; for(int i=0; i<8; i++) { if(crc & 0x80) crc = (crc << 1) ^ 0x07; else crc <<= 1; } } return crc; } int main(void) { uint8_t buf[2] = {0x32, 0x01}; uint8_t crc = CRC8_Calc(buf, 2); printf("CRC8 = 0x%02X\n", crc); return 0; }

运行输出

CRC8 = 0xD4

✅ 和手算完全一致


七、示例对应真实场景

这就是车载 LIN 总线传感器帧的真实校验:

  • 0x32 = 传感器 ID
  • 0x01 = 有效数据
  • 0xD4 = CRC 校验汽车车窗、雨刮、空调面板 都用这套逻辑。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 18:03:32

命运2提示找不到msvcp140.dll安全修复指南

命运2提示找不到mscp140.dll安全修复指南《命运2》启动时&#xff0c;屏幕上突然弹出“找不到msvcp140.dll”的提示&#xff0c;这无疑是浇在游戏热情上的一盆冷水。这个文件到底是什么&#xff1f;为什么它会让整个游戏停摆&#xff1f;简单来说&#xff0c;msvcp140.dll是Mic…

作者头像 李华
网站建设 2026/4/22 17:51:07

Helixer深度学习基因预测工具:3分钟快速入门完整指南

Helixer深度学习基因预测工具&#xff1a;3分钟快速入门完整指南 【免费下载链接】Helixer Using Deep Learning to predict gene annotations 项目地址: https://gitcode.com/gh_mirrors/he/Helixer Helixer是一款基于深度学习技术的真核生物基因结构预测工具&#xff…

作者头像 李华
网站建设 2026/4/22 17:48:31

3分钟搞定B站字幕提取:终极免费工具使用指南

3分钟搞定B站字幕提取&#xff1a;终极免费工具使用指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为B站视频的字幕提取而烦恼吗&#xff1f;无论是外语…

作者头像 李华
网站建设 2026/4/22 17:48:27

多语言语音合成实战:fish-speech-1.5镜像部署与效果测评

多语言语音合成实战&#xff1a;fish-speech-1.5镜像部署与效果测评 1. 引言 语音合成技术正在改变我们与数字世界的交互方式。今天&#xff0c;我们将深入体验fish-speech-1.5这款支持12种语言的先进TTS模型。通过CSDN星图镜像的一键部署&#xff0c;即使是技术新手也能快速…

作者头像 李华