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.

[参考译文] TM4C123GH6PM:远程/无线固件更新

Guru**** 2534260 points
Other Parts Discussed in Thread: TM4C123GH6PM, CC3200, EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1096942/tm4c123gh6pm-remote-firmware-over-the-air-updates

部件号:TM4C123GH6PM
主题中讨论的其他部件: CC3200EK-TM4C123GXLTM4C123

大家好,

我一直在研究使用boot_loader更新TM4C123GH6PM TIVA处理器上的应用程序的选项。 请特别参阅TivaWare bootloader用户指南SPMU301E文档。

我的问题是执行远程更新时的过程。 我想我知道如何将设备置于更新模式,并将新应用程序从外部程序发送到UART 0或I2C。

但是,如果新应用程序已经在本地字符数组中,我该如何操作? 例如,通过UART2上的Cell模块接收。 如何运行bootloader并将字符数组从UART1发送到UART0? 假定UART1和UART0的硬件在PCB上绑定在一起。

我注意到有UART功能,如UARTReceive()和UARTSend()。 我是否只使用UARTReceive()函数发送数据,然后跳转到bootloader? 这对我来说也没有意义。

感谢您的任何建议。 (我来自CC3200方面,我将新应用程序写入闪存,设置变量,然后重新启动。 在重新引导过程中,boot_loader将检查标志,然后验证闪存中保存的新应用程序。)

再次感谢,
Bob

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

    您好,

    [quote userid="5.1949万" url="~/supp/smspectros/arm-based mspectros/group/arm-based微控制器/f/arm-based微控制器-forum/109.6942万/tm4c123gh6pe-remote-firmware-over the air-updates">但是如果我的新应用程序已经在本地字符阵列中,我该怎么办? 例如,通过UART2上的Cell模块接收。 如何运行bootloader并将字符数组从UART1发送到UART0? 假定UART1和UART0的硬件在PCB上绑定在一起。[/QUOT]

    很抱歉,我不清楚您要做什么。 您在本地char数组中已经有了一个新的应用程序,这意味着什么? 为什么固件位于阵列中? 您提到了UART2,UART1和UART0。 您使用的是哪一种? 我想您已经阅读了引导加载程序用户指南。 闪存引导加载程序是将驻留在地址0x0的一小部分软件。 此引导加载程序将配置您选择的其中一个UART端口(例如 UART 2)以从外部主机接收程序映像。 引导加载程序不是将数据从一个UART端口传输到另一个UART端口作为网关应用程序的应用程序。 当然,您可以修改bootloader,但不建议将bootloader放大为完整的flege应用程序。  应用程序固件更新后,它可以跳回引导加载程序,以便您可以再次更新固件。 将在非0x0地址(如0x2800)对应用程序固件进行编程。 这意味着您的应用程序固件决定何时跳回引导加载程序以启动另一个固件更新。  

    为什么不在TivaWare中尝试引导加载程序示例?  C:\tiaWare_C_Serie-Boot.BOOT\Examples\boards\EK-tm4c123gxl\boot_serial 2.2 是一个示例引导加载程序,C:\ti\TivaWare_C_Serie-Boot.Tiv\Examples\boards\EK-tm4c123gxl\boot_demo1是一个示例应用程序。0.295 2.2 0.295 boot_serial将配置UART端口并 通过UART端口下载应用程序映像"boot_demo1",然后编程到闪存。 在每次关机后再开机时,引导加载程序将确定是否已对应用程序进行编程。 如果应用程序已存在,则它将跳至该应用程序,然后应用程序将启动。 在此简单应用示例boot_demo1中,它将闪烁LED并等待几秒钟,然后跳回引导加载程序以等待另一固件更新。 这就是TivaWare引导加载程序的工作原理。  

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

    忽略字符数组语句,这并不重要。

    基本上,我可以通过无线方式下载新的固件映像(使用连接到UART 2的手机模块)。  现在我需要将此映像获取到bootloader。  我该怎么做?

    我是否可以直接从我的应用程序写入闪存,然后触发引导加载程序以从闪存获取它?

    重要的是TIVA芯片将远离人类的交互作用,因此它必须自动完成所有工作。

    感谢您的回复,

    Bob

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

    Bob,您好!

     就我个人而言,我没有看到有人这样做。 您说您的应用程序已通过UART2下载了新固件。 如果我的理解不正确,请更正我。 如何确保您有足够的内存来存储新映像。 TM4C123仅具有256KB闪存和32kB SRAM。 您的应用程序可能已经占用了大部分闪存。 您只能将新固件的一部分存储在SRAM中。 如果您打算执行此操作,您将要求自己将当前存储在SRAM中的新固件编程为闪存。 同时从闪存运行代码时,您将要求擦除闪存。 这不奏效。  

     我认为您需要修改引导加载程序,以便它知道在哪里可以找到已下载的新固件映像,并让引导加载程序执行闪存编程。  

      我建议您查看BL_main.c文件并查找"Updater"功能。 这是使用新固件对闪存进行编程的功能。  

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

    谢谢。  感谢您的反馈。   我将在明天晚上回复(来自汇款账户)并结束问题。

    请注意,

    Bob

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

    您好,Charles:

    我忘了回答你的一个问题。  我正在使用的单元格模块(在UART2上)具有用户文件空间的1.5 MB。  它将保存映像,引导加载程序将从此处获取。  (以前的设计使用CC3200,其闪存尺寸比TIVA大得多...)

    再次感谢,
    Bob