主题:MSPM0G1106中讨论的其他器件
工具/软件:
您好、
我们的应用使用 MSPM0G1106微控制器、我们使用 Code Composer Studio 12 (CCS12)进行开发。
我目前正在使用 CRC32值来实现固件完整性检查、想问是否有已知或推荐的方法来可靠地实现此功能。
以下是我尝试的方法:
-
自定义链接器脚本 :我保留闪存的最后4个字节来存储 CRC32值。
-
编译后处理步骤 :我添加了一个 Python 脚本,在整个闪存范围内计算 CRC32 ,不包括保留的4个字节。 然后、该脚本会将计算出的 CRC32写入保留段。 (我已确认 CRC 值已正确插入
.out
文件的最后4个字节中、我也可以在刷写后在 CCS 内存浏览器中看到该值。) -
运行时检查 :在固件中,我实现了一个函数,在闪存中的同一区域重新计算 CRC32 ,并将其与存储的 CRC32进行比较。
但是、运行时 CRC 永远不会与存储的 CRC 值匹配。 仔细检查后,我发现.out
文件似乎有所有未使用的内存填充0x00
,而当映像被加载到闪存时,未使用的内存似乎被填充0xFF
. (大概是由于闪存0xFF
在编程前被默认擦除。)
鉴于此、我使用的方法是否可行、用于实现可靠的固件完整性检查? 或者是否有更好的方法来确保构建时 CRC 和运行时验证之间的一致性?
希望经验丰富的开发人员提供任何建议或见解。
上下文涉及、这是认证(IEC 60730/IEC 61508 B 类)所需的功能安全特性的一部分。
已申请 https://www.ti.com/tool/MSPM0-DIAGNOSTIC-LIB 、但等待处理已有一段时间。
此致、
李庆宰