CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
CRC算法参数模型解释:
POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。
INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。
REFIN:待测数据的每个字节是否按位反转,True或False。
REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True或False。
XOROUT:计算结果与此参数异或后得到最终的CRC值。
国民芯片的硬件CRC仅支持BUYPASS模式,其他模式比如MODBUS,可以自己添加软件代码进行计算。
Algorithm | Check | Poly | Init | RefIn | RefOut | XorOut | CRC-16/ARC
| 0xBB3D | 0x8005 | 0x0000 | TRUE | TRUE | 0x0000 | CRC-16/AUG-CCITT
| 0xE5CC | 0x1021 | 0x1D0F | FALSE | FALSE | 0x0000 | CRC-16/BUYPASS
| 0xFEE8 | 0x8005 | 0x0000 | FALSE | FALSE | 0x0000 | CRC-16/CCITT-FALSE
| 0x29B1 | 0x1021 | 0xFFFF | FALSE | FALSE | 0x0000 | CRC-16/CDMA2000
| 0x4C06 | 0xC867 | 0xFFFF | FALSE | FALSE | 0x0000 | CRC-16/DDS-110
| 0x9ECF | 0x8005 | 0x800D | FALSE | FALSE | 0x0000 | CRC-16/DECT-R
| 0x007E | 0x0589 | 0x0000 | FALSE | FALSE | 0x0001 | CRC-16/DECT-X
| 0x007F | 0x0589 | 0x0000 | FALSE | FALSE | 0x0000 | CRC-16/DNP
| 0xEA82 | 0x3D65 | 0x0000 | TRUE | TRUE | 0xFFFF | CRC-16/EN-13757
| 0xC2B7 | 0x3D65 | 0x0000 | FALSE | FALSE | 0xFFFF | CRC-16/GENIBUS
| 0xD64E | 0x1021 | 0xFFFF | FALSE | FALSE | 0xFFFF | CRC-16/KERMIT
| 0x2189 | 0x1021 | 0x0000 | TRUE | TRUE | 0x0000 | CRC-16/MAXIM
| 0x44C2 | 0x8005 | 0x0000 | TRUE | TRUE | 0xFFFF | CRC-16/MCRF4XX
| 0x6F91 | 0x1021 | 0xFFFF | TRUE | TRUE | 0x0000 | CRC-16/MODBUS
| 0x4B37 | 0x8005 | 0xFFFF | TRUE | TRUE | 0x0000 | CRC-16/RIELLO
| 0x63D0 | 0x1021 | 0xB2AA | TRUE | TRUE | 0x0000 | CRC-16/T10-DIF
| 0xD0DB | 0x8BB7 | 0x0000 | FALSE | FALSE | 0x0000 | CRC-16/TELEDISK
| 0x0FB3 | 0xA097 | 0x0000 | FALSE | FALSE | 0x0000 | CRC-16/TMS37157
| 0x26B1 | 0x1021 | 0x89EC | TRUE | TRUE | 0x0000 | CRC-16/USB
| 0xB4C8 | 0x8005 | 0xFFFF | TRUE | TRUE | 0xFFFF | CRC-16/X-25
| 0x906E | 0x1021 | 0xFFFF | TRUE | TRUE | 0xFFFF | CRC-16/XMODEM
| 0x31C3 | 0x1021 | 0x0000 | FALSE | FALSE | 0x0000 | CRC-A
| 0xBF05 | 0x1021 | 0xC6C6 | TRUE | TRUE | 0x0000 |
|