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.

[参考译文] TM4C1290NCZAD:TM4C1290nczad 在更改应用起始地址以通过从 USB 存储器读取二进制文件来实现 USB 主机至固件更新时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1381066/tm4c1290nczad-problem-in-the-changing-in-start-address-of-the-application-with-tm4c1290nczad-to-get-a-usb-host-to-firmware-update-via-read-a-binary-file-from-a-usb-memory

器件型号:TM4C1290NCZAD
主题中讨论的其他器件:UNIFLASH

工具与软件:

我正在尝试按照 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\dk-tm4c129x\usb_stick_demo\usb_stick_demo_ccs.cmd 文件(#define APP_BASE 0X0008000)中的说明更改客户电路板上应用程序的起始地址、但当我使用 Uniflash 或 LM Flash Programmer 并将程序地址偏移设置为0x8000时、它不会  像通常那样对客户电路板上的代码进行编程。 我已尝试将 ..._ccs.cmd 文件中的#define APP_BASE 0X0008000更改为其他地址、但未成功。 当我更改此 APP_BASE 0X0008000时、它根本不起作用。 我是否需要更改擦除/写入等属性、以及它在哪里修改? 或者是否有必要重建 _ccs.cmd 文件? 如何更改 _ccs.cmd 和 name_ccs.map

此问题涉及到通过从 USB 存储器读取二进制文件进行固件更新。 客户样本具有 微控制器 TM4C1290NCZAD。

TM4C1297NCZAD:将 TM4C1297nczadi3用作 USB 主机-通过从 USB 存储器读取二进制文件进行固件更新-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

NAME_CCS.MAP

存储器配置

名称源长度已使用未使用属性填充
--------------- --- --- --- --- ---
闪存00000000 00100000 00035892 000ca76e RW X
SRAM 20000000 00040000 00012ce4 0002d31c RW X


段分配映射

Run origin load origin length init length attrs 成员
--- --- --- --- --- ---
00000000 00000000 00035898 00035898 r-x
00000000 00000000 00000200 00000200 r--.intvecs
00000200 00000200 00020aea 00020aea r-x .text
00020cf0 00020cf0 00011158 00011158 r--.const
00031e48 00031e48 00003a50 00003a50 r--.cinit
20000000 20000000 00009b98 00000000 rw-
20000000 20000000 00009b98 00000000 rw-.data
20009c00 20009c00 00009150 00000000 rw-
20009c00 20009c00 00007d4c 00000000 rw-.bss
20011950 20011950 00000c00 00000000 rw-.stack
20012550 20012550 00000800 00000000 rw-.sysmem

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="610603" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1381066/tm4c1290nczad-problem-in-the-changing-in-start-address-of-the-application-with-tm4c1290nczad-to-get-a-usb-host-to-firmware-update-via-read-a-binary-file-from-a-usb-memory "]我正在尝试按照 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\dk-tm4c129x\usb_stick_demo\usb_stick_demo_ccs.cmd 文件(#define APP_BASE 0X0008000)所述更改客户电路板上应用程序的起始地址、但当我使用 Uniflash 或 LM Flash Programmer 并将程序地址偏移设置为0x8000时、它不会  像通常那样对客户电路板上的代码进行编程。 我已尝试将 ..._ccs.cmd 文件中的#define APP_BASE 0X0008000更改为其他地址、但未成功。 当我更改此 APP_BASE 0X0008000时、它根本不起作用。 我是否需要更改擦除/写入等属性、以及它在哪里修改? 或者是否有必要重建 _ccs.cmd 文件? 如何更改 _ccs.cmd 和 name_ccs.map?[/QUOT]

    您能回答几个问题吗?

    -你是否已经通过 JTAG 在0x0处加载了 USB_STICK_UPDATE ?

    -你试图用 JTAG 加载 usb_tick_demo 吗?

    以上两个问题的答案很重要。 USB_STICK_UPDATE 必须已位于闪存的0x0位置并正在运行。 usb_stick_demo 是一个应该安装在 USB 记忆棒上的应用程序。 一旦您将 usb_tick 插入 USB 端口、usb_tick_update (引导加载程序)将从您的 USB 记忆棒驱动器加载 usb_tick_demo (应用程序)。  

     如果您尝试使用 JTAG 加载 USB_STICK_DEMO (如上所述、其中提到使用 LM 闪存编程器或 Uniflash 加载代码)、那么它将不起作用

     -首先,只要你通过 JTAG 使用 LM Flash programmer 加载 usb_tick_demo ,它就会覆盖位于0x0的引导加载程序,尽管你将偏移指定为0x8000。 LM 闪存程序和 Uniflash 通常会在加载新代码之前擦除整个闪存。 因此、加载 usb_stick_demo 之后、usb_stick_update 就会消失。 复位后、处理器在0x0和0x4 (堆栈指针和复位向量)处找不到任何内容、并将立即挂起。 如果在0x0处没有有效的引导加载程序、即使在0x8000处加载了应用程序、也不会跳转到应用程序。 您可以使用存储器浏览器来查看0x0是否为空以及应用程序是否位于0x8000。 如果您确实想通过 JTAG 接口使用 Uniflash 同时加载 USB_STICK_UPDATE 和 USB_STICK_DEMO、可以按照以下方法操作。 然而、归根结底、USB_STICK_DEMO 是应该驻留在 USB 记忆棒驱动器上以便通过 USB 接口(而不是 JTAG)加载的应用程序。  

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

    是否已usb_stick_update使用 JTAG 在0x0处加载了?

    • 是的、我就是这么做的。

    2.是否尝试usb_stick_demo使用 JTAG 进行加载?

    • 我也这样做了。 现在、我知道usb_stick_demo不建议使用 JTAG 加载。 最适当的方法是usb_stick_demo只放置在 USB 内存上。

    要替换usb_stick_demo为客户电路板上的应用、它是否可以通过使用相同的起始地址定义 APP_BASE (#define APP_BASE 0x8000)?.. 我是否不需要执行任何其他操作来设置APP_BASE为0x8000才能使我的应用程序正常运行? 应该无需调整闪存存储器组的属性或分段?

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

    如果您重复使用该示例中的相同.cmd、那么您的自定义应用程序没有其他要做的事情。 如果您想将应用程序映射到其他地址(如0xC000或0x10000)、可以这样做。 您还需要相应地更新引导加载程序 USB_应用的起始地址、如我在另一篇文章中所述。