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.

[参考译文] EK-TM4C129EXL:调试在 EPI 闪存上运行的固件

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/602028/ek-tm4c129exl-debugging-firmware-running-on-epi-flash

器件型号:EK-TM4C129EXL
主题中讨论的其他器件:TIDM-TM4CFLASHSRAM

大家好、

我正在尝试调试通过 EPI 连接的外部闪存上运行的固件。 固件可完全正常工作、其中 LED 每1秒闪烁一次。 但我想进行调试并逐步运行。 如果我尝试像通常那样进行调试,我会得到错误“地址超出允许的范围”,我可以理解,因为应用程序基址指向0x60020000。 但如果正常的调试方法不起作用,如何实现?

这目前在不带 RTOS 的 TM4C129EXL 评估板上实现、我正在使用 TI 编译器。 随着时间的推移、我最终将转向使用 GCC 编译器的 TI-RTOS。  

提前感谢。

-Prajnith

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

    您好、Prajnith、

     您能否尝试将下面的行添加到 memorymap_init()中的 GEL 文件中,让我们看看它是否起作用。

    GEL_MapAddStr (0x60000000、0、0x01000000、"R"、0);

    您可以转到 CCS->Tools->GEL Files,然后双击相应的 GEL (即 tms4c1294ncpdt.gel)。 GEL 将如下所示。

    memorymap_init()
    {
    /*
    * GEL_MapAddStr 的语法。
    * GEL_MapAddStr (address、page、length、"attribute"、waitstate);
    
    基本属性类型 派生属性类型
    字符串 说明 字符串 说明
    R 主机 IRQ 无 无内存/受保护
    W 写入 RAM 读取和写入
    P 端口 ROM 只读
    示例 外部 WOM 只写
    Em 仿真器 INPORT 端口只读
    PR 可编程 OUTPORT 端口只写
    呃 可擦除 ioport 端口读取和写入
    da 双存取 Saram 单存取 RAM
    ASN 存取大小 DARAM 双存取 RAM
    SHnC 共享 闪存 闪存 ROM
    高速缓存 高速缓存 EXRAM 外部 RAM
    TX 文本 EXROM 外部 ROM
    Mn 检测器 EPROM 可擦写 EPROM
    SA 单次访问 检测器 监视器 ROM
    左前 闪存 PRAM 程序 RAM
    先生 存储器映射 PROM 编程 ROM
    null null null null
    
    *
    
    GEL_MapAddStr (0x00000000、0、0x00100000、"R"、0); /*闪存*/
    GEL_MapAddStr (0x01000000、0、0x00008c00、"R"、0); /* ROM */
    GEL_MapAddStr (0x20000000、0、0x00040000、"R|W"、0); /* SRAM */ 

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

    感谢您的快速回复。 我尝试了您建议的方法、但在调试外部闪存上的代码时仍然有问题。

    我收到错误消息

    Cortex_M4_0:GEL 输出:
    内存映射初始化完成
    Cortex_M4_0:加载程序:程序的一个或多个部分落入不可写的存储器区域。 这些区域实际上不会写入目标。 检查链接器配置和/或存储器映射。
    Cortex_M4_0:文件加载程序:验证失败:地址0x60000000处的值不匹配请验证目标存储器和存储器映射。
    Cortex_M4_0:GEL:文件:C:\Users\Prajnith\workspace_v7\EPIDM-TM4CFLASHSRAM\ektm4c129_epiflash_boot_demo\Debug\ektm4c129_epiflash_boot_demo.out:发生数据验证错误、文件加载失败。


    我想知道 CCS 在调试模式下是否需要某种 EPI 驱动程序来写入外部闪存? 因为我要通过 LM 闪存编程器和 TI 引导加载程序将代码刷写到外部闪存中。 此外、我还使用 EVK 的内置 ICDI 芯片进行调试。

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

    修改 GEL 文件并修复链接器问题后,我能够调试/停止目标,但无法设置任何早餐,它会弹出消息,指出地址超出允许的范围,您对此有何看法?

    谢谢
    -Prajnith
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Prajnith、
    很抱歉耽误你的回答。 我已离开办公室两周。 您拥有哪个版本的 CCS? 你有最新的吗? 是否可以在非 EPI 区域中设置断点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    是的、我使用的是最新的 CCS IDE。我能够在非 EPI 地址中设置断点、也可以在0xA0000000范围内的外部 SRAM 位置设置断点。

    谢谢

    -Prajnith

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Prajnith、
    我在论坛中进行了一些搜索、看起来 CCS 不支持超出 Cortex M 架构闪存范围的硬件断点。
    我建议您在 CCS 论坛下打开一个新主题、以确认最新版本是否仍然如此。