在IAR Embedded Workbench中选择对应Checksum的CRC算法来匹配MCU的CRC模块

Technical Note

Architectures:

All

Component:

linker

Updated:

2023/10/26 4:00

使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整性中,介绍了如何在IAR Embedded Workbench中配置生成对应代码区域的CRC校验码,然后在运行过程中使用MCU内嵌的CRC硬件模块计算对应代码区域的CRC校验码,并和之前存储的CRC校验码进行比较来检查对应代码区域的完整性

CRC算法有很多种,一般MCU内嵌的CRC硬件模块支持的CRC算法种类是固定的,所以需要在IAR Embedded Workbench中选择对应的ChecksumCRC算法来匹配MCUCRC模块  

本文主要CRC32算法为例介绍如何在IAR Embedded Workbench选择对应ChecksumCRC算法来匹配MCUCRC模块 

CRC32算法简介 

CRC32算法有很多种,下面是对应CRC32算法的一个简单总结 

对应CRC32算法主要跟对应的5个参数相关:Poly(多项式),Init(初始值),RefIn(输入值反转),RefOut(输出值反转)和XorOut(结果异或值)。理论上这5个参数组合最多可以有非常多种算法,不过实际使用中一般以上面几种为主。 

IAR Embedded Workbench中选择对应ChecksumCRC算法 

IAR Embedded WorkbenchChecksum选项中CRC算法的配置与对应CRC算法的参数对应关系如下: 

下面通过两个例子来介绍如何在IAR Embedded Workbench中选择对应ChecksumCRC算法(Project > Options > Linker > Checksum > Generate checksum)。 

CRC-32 

  • Algorithm: 选择 “CRC32”(对应的Poly自动选择为0x04C11DB7) 
  • Complement: 选择 “1’s complement”(对应的XorOut0xFFFFFFFF) 
  • Initial value: 输入“0xFFFFFFFF”(对应的Init0xFFFFFFFF) 
  • Bit order: 选择 “LSB first”(对应RefIn = TRUE, RefOut = TRUE) 

CRC-32/MPEG-2 

  • Algorithm: 选择 “CRC32”(对应的Poly自动选择为0x04C11DB7) 
  • Complement: 选择 “As is”(对应的XorOut0x00000000) 
  • Initial value: 输入“0xFFFFFFFF”(对应的Init0xFFFFFFFF) 
  • Bit order: 选择 “MSB first”(对应RefIn = FALSE, RefOut = FALSE) 

总结 

本文主要CRC32算法为例,介绍如何在IAR Embedded Workbench选择对应ChecksumCRC算法来匹配MCUCRC模块,提高对应Checksum校验代码的效率。 

 

参考文献: 

  1. IAR C/C++ Development Guide (Checksum calculation for verifying image integrity) 

  2. 使用IAR Embedded Workbench和MCU的CRC模块来检查代码的完整性

  3. https://crccalc.com/ 

We do no longer support Internet Explorer. To get the best experience of iar.com, we recommend upgrading to a modern browser such as Chrome or Edge.