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:使用引导串行来通过 UART1更新固件

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/777788/tm4c123gh6pm-use-of-boot-serial-in-order-to-update-firmware-through-uart1

器件型号:TM4C123GH6PM
主题中讨论的其他器件:DK-TM4C123G

是的、我很抱歉写了这个帖子、但我真的被卡住了。 我想使用 UART1接口更新微控制器内部的固件、而不是使用标准 JTAG 接口、因为微控制器已经使用该接口来发送从传感器获取的数据

为了使用 UART1接口、我修改了程序 boot_serial 的 bl_config.h 文件。  原始程序位于目录\Tiva\examples\boards\dk-tm4c123g 中

但是 、我不确定为了使用 UART1接口、以下声明是否正确

#define UART_ENABLE_UPDATE

#define UART_FIXED_BAUDRATE   115200

-#define UART_CLOCK_ENABLE   SYSCTL_RCGCUART_R1

#define UART_RXPIN_BASE   GPIO_PORTB_BASE

#define UART_RXPIN_PCTL   0x1

#define UART_RXPIN_POS   0

#define UARTx_BASE   UART1_BASE

#define UART_TXPIN_CLOCK_ENABLE   SYSCTL_RCGCGPIO_R1

-#define UART_RXPIN_CLOCK_ENABLE   SYSCTL_RCGCGPIO_R1

-#define UART_TXPIN_PCTL   0x1

- #define UART_TXPIN_POS   1.

我已成功使用这些声明编译程序

然后、使用 LM 闪存编程器 、我已经擦除了目标微控制器

之后、我使用  目标微控制器中的 LM 闪存编程器在地址0x0处加载了具有 JTAG 的 boot_serial.bin  

-我最后尝试使用连接到 UART1接口的 FTDI 芯片在地址0x1000处加载目标固件(具有 LM 闪存编程器)。  

但是、LM 闪存编程器 显示以下错误: "与电路板同步波特率失败"

 还有其他步骤要做吗?

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Gabriele、
    我不会发现您的#define 有任何问题。 有一些问题。
    1.目标固件是否已加载到 MCU 中。 如果您使用 CCS 存储器浏览器并检查0x1000中的地址。 您在那里看到了应用程序映像吗?
    2.在 LM 闪存编程器中、您是否配置了与 MCU 匹配的波特率?
    3.尝试在 LM 闪存编程器中单击禁用自动波特率支持。 有什么不同吗?
    4.您是否使用了使用未修改的引导加载程序和 launchpad 板上的应用固件的 UART0来实现它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HY、感谢您的回复。

    我进行了以下测试

    -使用 LM Flash Programmer 微控制器擦除之后、我已成功使用 UART0接口加载未修改的版本

    地址0x0000处的"引导-串行"的说明。 仅当未选中"禁用自动波特率支持"时、加载才会工作。 波特率设置为115200

    -之后、始终使用 UART0接口(波特率:115200、未选中"禁用自动波特率支持"、我尝试在0x4000位置加载"引导-降级1"程序。

    但是 、我收到通信错误"无法与电路板建立通信"。 我还尝试加载程序、但选中了"Disable Auto Bude Rate support"

    我获得了相同的结果

    -然后我擦除了闪存、并使用 JTAG 加载了"引导-串行"的修改版本。

    -之后、使用 UART1接口(波特率:115200、未选中"禁用自动波特率支持"、我尝试在0x4000位置加载"引导-降级1"程序。

    但是 、我收到通信错误"无法与电路板建立通信"。 我还尝试加载程序、但选中了"Disable Auto Bude Rate support"

    我获得了相同的结果。

    -我还尝试使用相同的过程加载使用 UART1接口的最终程序,同时选中和取消选中“禁用自动波特率支持”。 但是、我始终会看到通信错误

    (顺便说一下:我已经在 UART0和 UART1通信之前使用简单的测试程序进行了测试)

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

    您好!

    [引用用户="Gabriele Marcocco8"]

    -使用 LM Flash Programmer 微控制器擦除之后、我已成功使用 UART0接口加载未修改的版本

    地址0x0000处的"引导-串行"的说明。

    [/报价]

    我在这里有点困惑。 boot_serial 是引导加载程序。 通常、引导加载程序通过 JTAG 接口加载。 但是、您说过您已使用 UART0接口成功加载 boot_serial。 这让我认为您正在使用基于 ROM 的 UART 引导加载程序加载 boot_serial、boot_serial 本身就是另一个引导加载程序。 如果您不熟悉 ROM 引导加载程序、TM4C ROM 还包含用于 UART0的引导加载程序。 如果器件被擦除、您可以使用 ROM 引导加载程序加载应用程序固件。 在这种情况下、您似乎使用基于 ROM 的引导加载程序加载 boot_serial 引导加载程序。  

    [引用用户="Gabriele Marcocco8"]

    之后、始终使用 UART0接口(波特率:115200、未选中"禁用自动波特率支持"、我尝试在0x4000位置加载"引导-降级1"程序。

    但是 、我收到通信错误"无法与电路板建立通信"。 我还尝试加载程序、但选中了"Disable Auto Bude Rate support"

    [/报价]

    您使用的是定制板还是 UART0上的 lanchpad? 这是我在上次答复中的一个较早的问题。 我还询问您是否检查0x4000处的存储器内容、以查看是否即使在出现错误消息的情况下也对应用程序映像进行了编程。  

    我只有 LaunchPad。 我尝试像您一样运行该实验。 我会:

    1.使用 JTAG 加载 boot_serial。 BOOT_serial 将编程为0x0。 实际上、我还尝试了 ROM 引导加载程序将 boot_serial 加载到0x0、它也起作用。  

    在 boot_serial 运行时、我首先使用以下配置来配置 LM 闪存编程器。 请注意、您的 COM 端口将与我的端口不同。  

    3.我确保 Windows 设备管理器也具有匹配的 UART 配置。

    4.我对 boot_demo1应用程序进行编程。 您可以看到传输完成。 我看不到错误消息。

    那么 、如果您已经尝试使用 LaunchPad、需要再次询问的问题是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Gabriele、
    如果您有机会在 Launchpad 上运行上述步骤、您能否提供一些反馈? 正如我提到过的、我使用 LaunchPad 运行了该示例、从未遇到任何错误。 我建议您首先从 Launchpad 开始、并了解它如何引导加载和更新应用程序。 或者您已经通过某种方式自行解决了该问题。 如果是这种情况、我现在将关闭该线程。 如果您有新问题、可以随意打开新主题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉耽误你的时间。

    最后、我设法使用 定制板上的 TivaWare 引导加载程序和 UART1来更新定制固件

    存在不同的问题:

    -首先  必须修改例程 JumpToBootLoader(void)  

    无效

    JumpToBootLoader ()

       ROM_SysTickIntDisable();

      ROM_SysTickDisable();

      HWREG (NVIC_DIS0)= 0xffffffff;

      HWREG (NVIC_DIS1)= 0xffffffff;

      HWREG (NVIC_DIS2)= 0xffffffff;

      HWREG (NVIC_DIS3)= 0xffffffff;

      HWREG (NVIC_DIS4)= 0xffffffff;

     

      (*(void (*)(void))(*(uint32_t *) 0x2C))();

    -第二个。  目标固件.cmd 文件中存在的参数 app_base 必须与 在 bl_config.h 文件中声明的参数 vtable_start_address 相同 该值也等于 LM 闪存编程器中存在的"程序地址偏移量"