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.

[参考译文] CCS/TM4C1294NCPDT:使用 UART 和 Tivaware 引导加载程序升级固件

Guru**** 2478765 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/688030/ccs-tm4c1294ncpdt-upgrade-the-firmware-using-uart-and-tivaware-bootloader

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

工具/软件:Code Composer Studio

您好!

目前、我们正在使用 TI JTAG 编程器直接加载 TM4C1294固件、而不涉及引导加载程序。 在最终设计中、TM4C1294与连接
通过 UART 接口嵌入式 CPU。 我正在尝试启动引导加载程序、以便我们可以通过 UART 接口从嵌入式 CPU 进行固件更新。

我在 TivaWare_C_Series-2.1.3.156版本中的 EK-tm4c1294xl 下的 boot_serial 示例和 EK-tm4c129x 下的 boot_demo_UART 示例。  
基于之前的社区线程、决定遵循 EK-tm4c1294xl 下的 boot_serial 示例。 此时、我有以下问题、您能帮助澄清一下
详细信息?

1. 您是否有用于 boot_serial 的 CCS 工程?

2.能否提供使用 TM4C1294上的 CCS 构建和加载引导加载程序的步骤 ?

3.如何知道引导加载程序已成功加载? 在电路板上加载引导加载程序后、我能否访问  
  引导加载程序是否通过 JTAG 或 UART 接口提示?

4.要从引导加载程序加载固件、我需要对当前固件进行哪些更改?

5. 如何在加载引导加载程序后通过 UART 接口将固件从嵌入式 CPU 复制到 TM4C1294?

目前、我遇到了这个问题。 感谢您的及时帮助。 如果需要任何其他信息、请告诉我。

谢谢、
SENTHIL

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

    [引用用户="Senshil Paramasivam"]

    1. 您是否有用于 boot_serial 的 CCS 工程?

    2.能否提供使用 TM4C1294上的 CCS 构建和加载引导加载程序的步骤 ?

    [/报价]

     在 TivaWare 库中、您可以在示例文件夹下找到 boot_serial 和 boot_dem1。 您不需要重建它们。 .out 文件已在那里。 如果您对示例进行修改、则您将像编译任何工程一样重新编译这些示例。  

    [引用 user="Senshil Paramasivam"]3. 如何知道引导加载程序已成功加载? 在电路板上加载引导加载程序后、我能否访问  
      引导加载程序通过 JTAG 或 UART 接口提示?[/quot]

     您将需要使用 JTAG 接口加载引导加载程序。 加载引导加载程序后、它将等待加载固件。 您可以使用 LM 闪存编程器并选择 UART 接口将固件加载到 MCU。

    [引用用户="Senshil Paramasivam"]

    4.要从引导加载程序加载固件、我需要对当前固件进行哪些更改?

    [/报价]

    如果使用 boot_demo1、则没有任何变化。 在 LM 闪存编程器中、只需指定 boot_demo1.bin 的位置、然后单击编程按钮。 引导加载程序会将 boot_demo1固件映像和程序传输到闪存中。 您可以查看 boot_demo1源代码的方式、并将其引用以构建您自己的固件。

    [引用用户="Senshil Paramasivam"]

    5. 如何在加载引导加载程序后通过 UART 接口将固件从嵌入式 CPU 复制到 TM4C1294?

    [/报价]

     什么是嵌入式 CPU? 它可以运行 LM 闪存编程器吗? LM 闪存编程器是 Windows 程序。 如果无法在嵌入式 CPU 上运行 LM 闪存编程器、则需要构建自己的程序。 您可能需要查看 TivaWare 库随附的 sflash 实用程序的源代码、看看您是否可以适应嵌入式 CPU。

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

    感谢您的快速响应。

    我有与 CCS 连接的 MSP-EXP432P401R。 我尝试从 CCS 加载 boot_serial.out、但没有执行任何操作
    错误、因此我假设成功、然后尝试从 CCS 加载 boot_demo.out、器件被锁定、如下所示
    错误、

    Cortex_M4_0:无法运行目标 CPU:(错误-1268 @ 0x1090001)器件锁定在硬件故障或 NMI 中。 重置设备、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。 (仿真包7.0.188.0)

    在当前实验中、我没有嵌入式 CPU。 编程器通过 JTAG 直接连接到 TM4C1294 MCU。 因此、我认为我们不需要 LM 闪存编程器。 我是否缺少从 CCS 加载它的任何步骤? 在使用 CCS 验证此步骤后、我计划接下来尝试使用嵌入式 CPU。

    请告诉我是否需要尝试其他步骤。

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

    您好!

     boot_demo1是一个从地址0x4000开始的应用、而引导加载程序被加载到从地址0x0开始的闪存中。 我想可能发生的情况是、除了您使用 CCS 加载 boot_demo1之外、CCS 首先擦除整个闪存、从而擦除引导加载程序。 加载结束时、0x4000处仅显示 boot_demo1、但从0x0开始的引导加载程序已消失。 您可以通过查看存储器浏览器窗口来验证这一点、以查看0x4000处是否存在 boot_demo1以及0x0处的引导加载程序是否擦除至所有 F。

     也就是说、要加载 boot_demo1、您需要防止 CCS 擦除整个闪存、这是加载新程序时的默认值。 请参阅以下内容、并更改为 "仅必要页面"以了解擦除方法。

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

    在更改为"仅限必要页面"选项后、我不再看到器件锁定、并且不确定 boot_dem1是否正常工作、因为它在 UART 调试端口上没有任何打印。 为了仔细检查、我想在 boot_demo.c 的 SetupForUART()之后添加 UARTprintf() 我希望 UARTprintf()能在这个地方工作。 请确认。 此外、您能否提供示例 CCS 项目文件、用于从 CCS 中重建和加载 boot_demo1? 我尝试将 boot_demo1作为工程打开、但 CCS 无法识别为有效的 CCS 工程、因此无法从 CCS 编译或加载。

    关于 sflash 实用程序、我是否可以像嵌入式 CPU 一样交叉编译代码并在 Ubuntu 中运行? 我是否需要传递 UART 端口号
    有什么好处?

    我计划按照以下步骤从嵌入式 CPU 加载固件、

    1. TM4C1294加电后、它将自动从闪存0x0地址加载引导加载程序(boot_serial.out)并等待 UART 通信。

    2.使用以下命令从嵌入式 CPU 复制固件:
    sflash test.bin -p 0x4000 -r 0x820 -c tty0

    3.由于我的串行调试端口连接了 MCU UART,如果加载成功,我应该能够看到打印的内容。

    如果我错过了完成 UART 启动的任何其他步骤、请进行更正。

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

    如果您已成功加载 boot_demo1、则应该会看到 LED 切换。 或者、您可以在存储器浏览器中转到地址0x4000、您应该会看到正在加载 boot_dem1。

    您是否下载了最新的 TivaWare? 用于 boot_demo1、boot_demo2和 boot_serial 的整个 CCS 工程都应该位于 TivaWare 库中。 在 CCS 中、您只需导入这些 CCS 工程、并且可以在将其导入到工作区后随时对其进行重建。

    [引用 user="Senshil Paramasivam"]1. TM4C1294加电后、它将自动从闪存0x0地址加载引导加载程序(boot_serial.out)、并将等待 UART 通信。[/quot]

     是的。 如果您使用的是 LM 闪存编程器、那么在您按下"Program"选项卡中的"Program"按钮后、boot_demo1.bin 将被下载到闪存中。 请参见下图。

     

    [引用 user="Senshil Paramasivam"]2. 使用以下命令从嵌入式 CPU 复制固件、
    sflash test.bin -p 0x4000 -r 0x820 -c tty0[/quot]

    我从未尝试过闪存、但它应该起作用。 应使用-c 交换机指定虚拟 COM 端口号。  

    [引用 user="Senshil Paramasivam"]3. 由于我的串行调试端口与 MCU UART 连接、因此如果加载成功、我应该能够看到打印件。

     我建议您在使用 sflash 之前首先使用 LM 闪存编程器、然后按原样尝试该示例。  

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

    从 CCS 加载 boot_demo1 (运行->加载->选择程序加载-> boot_demo1.out)后、我看不到任何 LED 切换、也无法捕获存储器浏览器中的任何条目、因为程序将被终止。

    目前、我有 Tivaware 库2.1.3.15、我在以下路径下看到 boot_demo1、boot_demo2和 boot_serial (ti/TivaWare_C_Series-2.1.3.156/examples/boards/ek-tm4c1294xl/)。

    当我为 boot_demo1执行"导入 CCS 项目"时、我收到以下错误消息、
    ""Error: import failed for project 'boot_demo1' because its meta-data cannot be inar义。 请联系支持部门。""

    我是否缺少其他步骤?

    由于我是 MAC 用户、因此我不使用 LM 闪存编程器、而是直接使用 CCS V8对闪存进行编程。 验证 boot_dem1后、计划直接切换到 sflash。 如前所述、计划交叉编译 sflash 以便从嵌入式 CPU Linux 运行。 如何在运行 Ubuntu 发行版的嵌入式 CPU 上获取虚拟 COM 端口号?

    感谢您的及时回应。

    谢谢、
    SENTHIL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请下载最新的 TivaWare 并重试。 如果您在内存浏览器中未在0x4000处看到 boot_demo1、则固件未正确加载。 我根本看不到这个问题。 如果确实加载了引导加载程序和 boot_demo1、则需要首先重置器件。 复位后、引导加载程序将首先通过检查堆栈指针和复位矢量是否为非 F 来检查0x4000处是否存在应用程序。 如果这两个条目不是 F、则会向引导加载程序指示应用程序固件已存在。 引导加载程序将跳转至应用程序 boot_demo1并开始执行它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您的问题是否已解决?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您的问题是否已解决? 我将关闭该线程。 如果您还有其他问题、欢迎您打开新主题。