我们将使用稍作修改的通用引导加载程序版本来现场将应用程序映像加载到产品中。 加载应用程序映像后、bootrom 会计算 CRC32。 它将此 CRC 与在闪存末尾加载的值进行比较。 我们生成和刷写 CRC 值的方法是 Buggy。 我想将 CRC 附加到十六进制文件的末尾、并进行诸如 tera-term 加载之类的操作。 我已经阅读了 TI 文档、并通过 Google 在网上阅读了有关如何将 CRC 添加到生成的十六进制映像中的说明。 我希望我们有一个更好的例子。 从我读到的内容来看、这对我来说很合适。
我将使用此链接器脚本生成的十六进制文件与不生成 CRC 的旧版本进行了比较、期望在十六进制文件的最末尾找到唯一的区别。 整个过程中存在差异、并且似乎有很多零填充记录。 我不需要零填充记录、因为我们将原本未使用的闪存的一部分用于非易失性参数。 下面是我编写的、针对可读性进行了精简的链接器脚本。 VECTORS0 和 FLASH0供 bootrom 使用。 我需要在闪存结束时、在 CRC_SEC 中使用 CRC。 感谢任何帮助。 我只需要32位 CRC 值。
内存
{
VECTORS0 (X) :origin=0x00000000 length=0x00000020
VECTORS (X) :origin=0x00200000 length=0x00000020
FLASH0 (RX) :origin=0x00000020 length=0x001FFFE0
Flash (RX) :origin=0x00200020 length=0x001FFEE0
CRC_SEC (RX) :origin=0x003FFF00 length=0x00000100
trampoline (RW):origin=0x08000000 length=0x00000020
栈 (RW) :origin=0x08000020 length=0x000107E0
RAM (RW) :origin=0x08010800 length=0x0006f800
}
部分
{
/*具有 CRC 生成功能的 VST 应用的自定义段声明*/
.intvecs :{}>向量
.bss :{}> RAM
.data :{}> RAM
.sysmem :{}> RAM
组(TEXTMEM)
{
.text align (32):{}
.const align (32):{}
.cinit align (32):{}
.pinit align (32):{}
/* FEE_*段必须为32位对齐*/
FEE_TEXT_SECTION ALIGN (32):{}
FEE_CONST_SECTION ALIGN (32):{}
}> FLASH、crc_table (vst_crc_table、算法= CRC32_PRIME)
FEE_DATA_SECTION ALIGN (32):{}> RAM
.TI.crctab:> CRC_SEC
}