您好!
我正在使用 controlCARD 板(TMDCNCD28388D)。 我正在尝试使用 ARM 十六进制实用程序生成固件的十六进制格式。 然后、我使用自己开发的另一个固件将生成的十六进制文件加载到 CM 内核的闪存中。 但是、在加载固件并重新启动内核后、新固件将无法成功运行。 为了弄清这一点、我将十六进制文件内容与 JTAG 生成并加载到闪存中的实际固件进行了比较。 我发现除了某些特定位置外、几乎所有这两个内容都是相同的。 因此、我尝试更改十六进制实用程序生成的固件、并使其与 JTAG 生成的固件类似。 这样、在闪存上加载固件后、固件成功执行、一切正常。 不过,我可以找出这一问题的根本原因是什么。 但是、我发现这两个文件中有两个差异、可能有助于找到解决方案。 我在这里详细介绍 了这两种差异。 如果有人能帮助我解决这个问题、我将不胜感激。
1 -十六进制实用程序生成的固件中有6个额外字节、大小为0xFFFF、而 JTAG 生成的固件中的同一个块中不存在这6个字节。 在下图中、我突出显示了十六进制实用程序生成的额外6个字节。 这张图片是一个大小为0xFFFF 的块末尾的快照。

此外、我在下图中展示了 CM 的存储器映射、其中加载了由 JTAG 生成的同一固件块。 这张图片是我在上图中展示的同一块末尾的快照。

2-由 JTAG 生成的固件中的最后一个字节为"1F"、而十六进制实用程序生成的固件中的最后一个字节(我是指这些额外6个字节之前的最后一个字节)为"00"。
老实说、我不知道这些结束字节的含义。 所以、我只是尝试找到一个解决方案。 因此、我尝试更改十六进制实用程序生成的固件、并使其与 JTAG 生成的固件相同。
另外、作为另一个观察结果、我应该提到、当我尝试生成一个小尺寸固件时、例如其大小小于闪存扇区、一切都正常。 例如、当我使用十六进制实用程序生成 LED_blinky 示例时、生成的文件与 JTAG 生成的文件相同。 但是、当我尝试生成一个大尺寸固件时、如果是~170KB、则会将其放置在闪存的多个扇区上、这将会发生此问题。 如果有人能够解释为什么会发生这种情况、我将不胜感激。
此致、
Alex


