我的任务与大约20年前在 ARM7TDMI 定制 SoC 上工作的任务非常相似、只有一小队工程师。 这次我遇到了一个问题、需要社区提供一些指导。
(一些背景):
我们有一款具有 MSP430F5438A 的产品 、需要现场更新。 产品随附时未连接 JTAG 或串行终端。 因此、更新固件的设计方法是使用 i2c 发送新的固件映像。 该产品是主设备、可从从属设备检索新.bin 映像的大小和 CRC。 然后、它通过 i2c 以较大的块获取图像、填充 RAM 并将图像从 RAM 烧录到闪存中的"暂存区"[重复执行直到完成]。 当整个映像位于闪存中时、将执行 CRC 来验证映像。 如果.bin 映像未验证、任何复位都会导致 MSP430使用旧的"原始"映像重新启动。 如果新映像 验证、复位将导致 MSP430使用新映像重新启动。 为此、我认为我需要从闪存中的"暂存"区域移动"新"图像以覆盖旧图像。
我注意到、在文档中、BSL (引导加载程序)可以使用 UART 和 I2C 通信协议(请参阅 SLAS655G -部分映射 MCU 编程器和调试器页面101)具有 i2c 功能、 虽然我不确定它是否可以用于设计、但现在无法进行设计更改。
目前、我能够通过 i2c 检索新映像、将其刻录到闪存中的"暂存"区域、并执行 CRC。 现在、我需要一只手来介绍有关如何继续的最后一个障碍。
接下来是否要用新映像覆盖旧映像并重新引导? 如果是、我需要一些指导、 例如 :复制新映像的位置、以便"重新设置"将以新映像引导。
如果有任何帮助、我们将不胜感激、
注意: 也许有一种更简单的方法来使用 BSL 和闪存中的新映像-我对不会完全改变设计意图的其他方法持开放态度。