This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Starterware/TM4C1294NCPDT:内部闪存上的 OTA FW 更新

Guru**** 1839620 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/583193/starterware-tm4c1294ncpdt-ota-fw-update-on-internal-flash

器件型号:TM4C1294NCPDT

工具/软件:Starterware

您好!

更新内部闪存上的固件时出现问题。 代码是来自 Stellaris 控制器的端口。 我可以启动 tm4c129控制器、连接到云、初始化文件系统并执行一些射频处理。但现在、我在触发固件更新时遇到问题。 我正在将新的 FW 更新下载到外部闪存文件系统。  

我的链接器脚本寻址如下:

引导(Rx):origin = 0x00000000、length = 0x00007FF0 /
BOOTINFO (Rx):origin = 0x00007FF0,length = 0x00000010  
闪存(Rx):origin = 0x00008000、length = 0x00073BC0  
FLASHINFO (Rx):origin = 0x0007BBC0,length = 0x00000040  
工厂(Rx):origin = 0x0007BC00,length = 0x00000400
CFG (Rx):origin = 0x0007C000,length = 0x00005000

我在引导加载程序中有一个自定义更新代码、该代码将在重新引导时检查并在必要时进行更新。


while (offset < fe->filesize){
FlashErase (START + OFFSET);// start 是应用程序起始地址、最初为0x8000、偏移量为0
偏移量+= 1024;// 1KB 大小
}

我注意到、0x7bbc0到0x7bbf4中的数据已存在、但0x7bbf8的其余数据已擦除、并且为-1或 ff、包括工厂块和 CFG 块。

我不知道问题是什么。

同样、我在使用 openocd 来刷写代码时注意到的问题也是如此。 因此、我需要完全擦除整个闪存并重新闪存。 我的 openocd 版本是  

打开片上调试器0.10.0-DEV-00419-gbcaf775 (2016-11-23-16:36)
GNU GPL v2许可

我的.gdbinit 具有  

复位

监控闪存写入映像擦除固件。AXF

任何帮助都将是伟大的。

谢谢你

库马尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Kumar、
    请注意、TM4C129's erasble sector size 为16k、而 Stellaris 的可擦除块为1k。 请先更改16千位增量的偏移量、然后重试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    昨天我也尝试过、将偏移量更改为16k、而不是1k。

    while (offset < fe->filesize){
    FlashErase (START + OFFSET);// start 是应用程序起始地址、最初为0x8000、偏移量为0
    offset +=(16*1024);// 1KB 大小


    我遇到了固件更新正确但0x7bbc0至0x7bbf4中的数据存在但来自0x7bbf8的其余数据被擦除、并且为-1或 ff、包括工厂块和 CFG 块。

    然后、我尝试修改地址以匹配链接器脚本中的16KB 块大小

    闪存(Rx):origin = 0x00008000,length = 0x00074000
    FLASHINFO (Rx):origin = 0x00074000,length = 0x00000040
    工厂(Rx):origin = 0x00074040,length = 0x00000400
    CFG (Rx):origin = 0x00074440,length = 0x00004000

    在这里、当使用 openocd 来闪存初始映像时、我注意到只有0x8000处的闪存块被写入、FlashInfo 不被写入、工厂也是如此、只有一些字节的 CFG 被写入地址0x76440中、0x74000到0x76440的整个块为 FF。

    我有何错误或错误的想法。

    谢谢你
    库马尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Kumar、
    如果闪存原点从0x8000开始、长度为0x74000、那么它将在0x7C000结束。 但是、FLASHINFO 原点从0x74000开始? 您能否在0x7C000处启动 FLASHINFO 原点并相应地调整其余部分?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好,查尔斯
    我完全忘记了在周五向您提供更新、我使用了以下修改、并且能够进行刷写、而不会出现任何问题、包括从引导加载程序更新软件。

    闪存(Rx):origin = 0x00008000,length = 0x00074000
    FLASHINFO (Rx):origin = 0x00074000,length = 0x00000040
    工厂(Rx):origin = 0x0007C000、length = 0x00000400
    CFG (Rx):origin = 0x00078000,length = 0x00004000

    当然、即使我只使用几个字节、我也必须为每个分区分配整个16KB 块。 如果两个分区最终位于同一个块中,则不起作用。 不知道为什么。

    无论如何,由于闪存上有足够的可用空间,我们可以分配块。

    当连接电源但连接调试器时工作正常时、引导加载程序中的 SPI 闪存访问问题也会出现另一个问题。
    使用的调试器是 mikroprog。 在尝试执行 SPI 虚拟读取时、访问失败。
    我将在单独的帖子中发布更多详细信息。

    我将关闭此项。

    谢谢你
    库马尔