这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ADD8校验介绍及C实现

共1条 1/1 1 跳转至

ADD8校验介绍及C实现

工程师
2026-05-13 20:21:27     打赏

ADD8 校验(也常写作 ADD-8、8-bit Sum Check)是一种非常简单的校验方式,广泛用于:

  • 串口通信

  • MCU 数据帧

  • Bootloader

  • Modbus 私有扩展协议

  • 嵌入式数据包

其核心思想是:

对所有数据字节进行“8位累加”,仅保留低8位作为校验值。


一、ADD8 校验原理

假设有一组数据:

01 02 03 04

进行 ADD8 校验:

0x01 + 0x02 + 0x03 + 0x04
= 0x0A

最终:

checksum = 0x0A

1.1 超过 0xFF 怎么办?

ADD8 只保留低 8 位:

例如:

0xF0 + 0x30 = 0x120

保留低8位:

0x20

即:

checksum = sum & 0xFF

二、常见 ADD8 类型

实际工程中常见 3 种:

类型说明
普通累加和最常见
取反累加和~sum
补码校验使总和为0

三、普通 ADD8算法

Checksum=(∑i=0N−1Datai) mod 256Checksum = \left(\sum_{i=0}^{N-1} Data_i\right) \bmod 256Checksum=(i=0N1Datai)mod256


示例

数据:

11 22 33 44

计算:

0x11 + 0x22 + 0x33 + 0x44
= 0xAA

校验值:

0xAA

四、C 语言实现(普通 ADD8)



 ( ,  )
{
       ;

    (   ;   ; )
    {
          [];
    }

     ()(  );
}

 ()
{
     []  {, , , };

       (, );

    (, );

     ;
}

输出:

Checksum = 0xAA

五、补码型 ADD8

有些协议要求:

所有字节 + checksum 的结果低8位为 0

即:

(sum + checksum) & 0xFF = 0

那么:

checksum = (~sum + 1)

这其实就是:

  • 二进制补码

  • Two's Complement


数学表达

Checksum=(256−(∑Datai mod 256)) mod 256Checksum = \left(256 - \left(\sum Data_i \bmod 256\right)\right) \bmod 256Checksum=(256(Dataimod256))mod256


示例

数据:

01 02 03

求和:

0x01 + 0x02 + 0x03 = 0x06

补码:

0x100 - 0x06 = 0xFA

验证:

0x01 + 0x02 + 0x03 + 0xFA
= 0x100

低8位:

0x00

校验成功。


六、C实现(补码 ADD8)



 ( ,  )
{
       ;

    (   ;   ; )
    {
          [];
    }

     ()(  (  ));
}

 ()
{
     []  {, , };

       (, );

    (, );

     ;
}

输出:

Checksum = 0xFA

七、接收端如何校验方法1:重新计算

接收端:

收到数据 + checksum

重新 ADD8:

如果:

计算值 == checksum

则正确。


方法2:总和为0(补码型)

直接:

sum(all bytes) & 0xFF

若结果:

== 0

则正确。


八、ADD8 优缺点

优点缺点
实现极简单检错能力弱
MCU资源消耗低无法检测部分错误
速度快不适合高可靠通信
不需要查表连续bit错误可能漏检

九、ADD8 vs CRC

项目ADD8CRC16
计算复杂度很低较高
检错能力一般很强
MCU开销极低中等
常见场景简单协议工业通信
能检测bit顺序错误





关键词: ADD8校验    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]