大家好、我目前在 EK-TM4C1294XL 电路板上使用 John 的 TCP 引导加载程序。 简直太棒了。 下面是他的帖子的链接:
现在、我想稍微修改一下引导加载程序、以便在固件更新后 、EEPROM 中的 BOOTLOADING 位置不是由引导加载程序本身写入的、而是仅在经证明是稳定的且正常的情况下由主应用程序写入。
这样、如果我错误地使用无法正常工作的主应用程序更新了电路板、就不必手动(即使用 USB 在本地连接到电路板并使用 LM 闪存编程器或 Energia、 或任何其他刷写工具)对 EEPROM 中的 BOOTLOAD 位置进行重新编程、但只需关闭电路板电源即可(或看门狗过期)将其放入引导加载程序并允许更新新固件。
因此、 在 John 的函数 Read_LocalClient 中、在地址0x00010000处的闪存中进行固件传输后、我注释了将 BOOTLOADING 写入0的代码、并发出无限循环、 并添加了包含在 setup 函数中的相同代码片段以跳转到主应用程序:
HWREG (0xE000E000 +(0xD08))=(0x10000和0xFFFFFFF);//更新矢量表偏移寄存器
asm (" MOVW r0、#0x0000");//加载 r0-Low、地址的低部分、2字节
asm (" MOVT r0、#0x0001");//将 r0-High 加载到地址的高位2字节
asm (" ldr sp、[r0]");//将应用程序矢量地址加载到 SP 中
asm (" LDR r0、[r0、#4]");//准备跳转到起始地址+ 4.
asm (" BX r0");//进行跳转
但遗憾的是、当我尝试刷写固件时、通过 BL 将文件从 TCP 客户端完全传输到电路板、但跳转到主应用程序失败:电路板重置、BL 启动。
附件您可以找到 John 的原始代码(左侧)与我的修改之间的比较。
修改时我出了什么问题?
此致