您好!
我几乎处于完成 C2000 Cortex M3内核的引导加载程序的最后阶段。 我需要一些帮助来解决我在从引导加载程序跳转到闪存的应用部分时遇到的问题。
目前为止我拥有的内容:
现在、引导加载程序能够读取通过 UART 接收的数据、解析数据并使用 TI 闪存 API 库将数据闪存到相关地址。 为简单起见、我考虑使用 blinky m3示例从引导加载程序刷写。 我选择了32位宽 ROM 和内存范围的英特尔十六进制格式。 我正在尝试使用来自主机的 python 代码发送此生成的十六进制文件。
考虑的闪存扇区:
Bootoader ->扇区 N、M 和 L
应用->扇区 K 到 A
我面临的问题:
在我将各自解析的十六进制文件写入闪存存储器并尝试跳转到闪烁应用程序后、控制台会抛出一条消息、提示"0xfffffffe"位置中没有内容。 但我的闪烁应用的复位矢量位于位置0x0022162B、这是我尝试跳转的位置。 我也可以在"Disassembly"窗口中看到内容。
但没有意义的是闪烁应用的堆栈终端地址值。 闪存后、在存储器区域窗口内的矢量表中查看该特定值为0x20002358。 但是、当我尝试从引导加载程序读取该值时、该值为0x21002358!! 我无法理解这里的情况,因为我在闪存存储器区域看到了磁珠值,但通过软件读取时却看到了不同的值??
一些故障排除:
当我使用 TI 闪存实用程序将扇区 K 指定为 A 并刷写专为扇区 N 至 L 的 Bottloader、从而擦除闪烁应用时、我可以使用相同的复位矢量地址轻松跳转到闪烁应用。 但是、读出堆栈结束地址时出现问题、该地址看起来与矢量表中的相同。
但是、如果我尝试通过引导加载程序擦除和写入闪存内容并尝试进行跳转、则问题似乎会发生。
下面是一些屏幕截图。
这是我捕获 appstack 值的位置。 它显示了我读取的内容和矢量表地址中的内容的比较。
2.从引导加载程序跳转时看到的内容
3.我尝试在0x0022162b 上设置断点以尝试反汇编中的分步调试、但这似乎对我也不起作用。
谢谢







