Thread 中讨论的其他器件:controlSUITE
我能够使用引导加载程序将代码成功加载到 闪存中。 但是、 对于我的应用、如果 通信中断或器件断电、我需要引导加载程序自动重启。
为了提供一些背景资料、下面是我拥有的内容:
GPIO37和34都设置为1 (为了进入 Get 模式)。 这些值是固定的、用户不能修改。
2.然后输入我的主函数。 请参见下图。 "enter_bootloader"建立 SCI 并执行自动波特。 如果所有操作都成功,则输入 SciBoot()。 SciBoot 是在汇编文件中定义的函数。 然后分支到 SCI 引导 Rom。
然后、使用 C2000串行固件升级程序。 首先将"f28069_flash_kernel"加载到 RAM 中。 这两个 C2000串行固件升级程序和闪存内核最初都来自 TI controlSUITE。
成功完成后、闪存内核会将应用程序代码加载到闪存中。
5.完成此操作后,主板将重新启动。 由于不发送自动波特字符,因此电路板超时"enter_Bootloader()函数,并与其余应用程序代码一起继续。 如果在引导加载过程中从未关闭电源或通信从未中断、则到目前为止的所有操作都可以正常工作。
为了使这项工作即使引导加载程序不成功、我决定将与引导加载程序关联的所有函数置于扇区 E 中。闪存内核永远不会擦除该扇区。 所有其他应用程序代码都位于扇区 F、G 和 H 中。为此、我修改了链接器命令文件、以便在扇区 E 中列出 引导加载程序的特定地址。 然后、我在 Main.c 中使用了 CODE_SECTION pragma 请参见下图:
添加后、在器件加载到闪存时将其断电。 当我重新打开它时、似乎它没有尝试进入"enter_bootloader"函数、因为 C2000串行固件升级程序无法开始加载闪存内核。 是否有人知道问题可能是什么? 这是因为 main 引用的是一个函数"DynalinkXLoop ()"、它位于扇区的一部分、该扇区在引导加载程序过程中被擦除并写入到该扇区中吗?
很抱歉这个长帖子。