ST意法半导体
直播中

王平

8年用户 1428经验值
私信 关注
[问答]

STL库配置为一次测试多个扇区的问题求解

STL 库配置为一次测试多个扇区(每个 128kByte)。
我们的使用模型与 ST 提供的 Nucleo 参考项目紧密相关,该参考项目用于帮助集成 STL 库;我们正在该包中使用 IAR 项目。
截至今天,我们的代码使用了 3 个扇区(2 个完整扇区和一个部分扇区)。
Flash 测试(通过 STL_SCH_RunFlashTM API)在前 2 个扇区运行良好,但总是在第 3 个扇区失败。
事实证明,这是因为 ST 提供的 CRC 表生成器实用程序(使用选项 -sl 调用的 STM32_Programmer_CLI.exe)不会在第 3 个扇区内使用中内存的最后一个字节之后生成 CRC。
为了解决这个问题,我使用了 IAR IDE 中内置的内存填充选项,以强制填充到已知模式,而不是 0xFF。
当我尝试将调试构建加载到目标中时,这会导致 IAR IDE 抛出“多个图像重叠”错误。
附件“ELF-map.txt”显示了准确的错误消息和 ELF 查看器的输出。
在文件底部的第三个日志中可以清楚地看到重叠。看起来 CRC 表生成器实用程序为每个程序部分的 32 位对齐做了一些填充,可能会侵占下一个部分。
你有什么建议?
在调用 CRC 表生成器实用程序之前加入 2 个段 A0 和 Fill1?
其他?
注意:该问题仅与 IDE 加载到目标中的 ELF 文件有关。如果我通过 STM32CubeProgrammer 在 IDE 外部下载调试 *.bin 文件,我可以实现 100% 的覆盖率(所有 3 个扇区)。我正在考虑由 IDE 与 ELF 文件一起生成的 *.bin 文件。







回帖(1)

王静

2022-12-6 11:07:53
当代码未与 32 位字对齐时,我确认这是一个已知问题。这是一个由 STL 硬编码的基本块。如果你参考你应该收到的带有 STL 的固件用户手册,CRC 计算的前提条件在“闪存测试”一章中有描述,特别是其中写道“用户程序的边界必须是 32 位对齐”。
图像之间重叠的根本原因是,当代码未按字对齐时,STM32CubeProgrammer 使用零自动填充,同时它忽略了编译器提供的 ELF 文件的其他部分,这些部分保留有关通过预定义模式自动填充内存间隙的信息。
避免此类问题的解决方案是在调用 ST CRC 计算工具之前确保代码的 32 位对齐,以避免 STM32CubeProgrammer 自动填充。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分