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.

[参考译文] TM4C123BH6ZRB:关于恢复锁定的微控制器的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/589879/tm4c123bh6zrb-question-on-recovering-a-locked-microcontroller

器件型号:TM4C123BH6ZRB
主题中讨论的其他器件:SEGGERTM4C123UNIFLASH

我使该处理器按预期工作、并通过将0xFFFFFF07写入 FLASH_FMPPE3为0x31800至0x33FFF 的内部闪存添加了只读保护。 只读保护工作正常并正确保存(将7写入 FLASH_FMA、将 FLASH_FMC_WRKEY | FLASH_FMC_COMT 写入 FLASH_FMC)。 由于某些原因、我无法通过执行批量擦除序列来恢复。 请发表评论。

我的顺序是:

1.使 RST 信号有效并保持该信号。 为器件通电。

2.使用 Segger JLink 命令器切换到 SWD ("si 1")并切换回 JTAG ("si 0") 5次。

3. Deaasert RST。

4.等待几秒钟。

5.对微控制器进行下电上电。

您认为 Segger JLink 命令器"si 0/1 "在 JTAG 和 SWD 之间切换吗? 纸上谈兵,但我不知道为什么复苏对我来说是不起作用的。

谢谢、

Dennis N

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Dennis:
    根据数据表、您的顺序似乎是正确的、但只是想与您确认一件事。 在步骤2中、您写入了"Switch to SWD ("si 1")和 Back to JTAG ("si 0") 5次。"。 我想确保先从 JTAG 切换到 SWD、然后再从 SWD 切换到 JTAG 五次。 您是否能够探测 SWDIO 的前导码0xE79E、作为调试器在从 JTAG 切换到 SWD 时发送到 MCU 的命令、以及在从 SWD 切换回 JTAG 时发送到0xE73C 的命令?

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

    是以澄清第2步。

    我将此 Segger JLink 用于 JTAG (TM4C)和 SWD (Kinetis Cortex M0)处理器、用于加载和调试、因此我非常确定 SWDIO 命令是否正确。 我们能否确保数据表中的顺序正确?

    谢谢、

    Dennis
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请允许我注意、我们公司长期以来一直在 TM4C123和 LX4F/LM3S 的 SWD (专门)下使用相同的 J-Link、并取得了巨大成功。

    我们部署了这2个"保存的"端口 C GPIO -因此我们"无需"实施 JTAG<->SWD 切换。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dennis:

     如果您有备用的 TM4C123 LaunchPad 板、则可以将其用作定制板的调试探针、并使用 LM 闪存编程器来解锁器件。 如果您有其他仿真器、例如 XDS100或 XDS200、则可以将它们与 Uniflash 结合使用来解锁器件。 请从此处应用手册的第5.3节开始查看 。

     在此诊断帖子中搜索"解锁"也将提供一些提示。

     

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

    [引用 USER="Dennis Nguyen - FLEX ]您是否认为 Segger JLink 命令"si 0/1 "可在 JTAG 和 SWD 之间切换?[/引用]从查看 J-Link 文档中可以看到、问题可能是"si"命令只选择要使用的目标接口、而不实际发送切换序列。

    有一 个 SWDSelect 命令、J-Link 命令帮助文本明确指出它输出 JTAG -> SWD 切换序列:

    SWDSelect 选择 SWD 作为接口和输出
    JTAG -> SWD 切换序列。 

    但是、我找不到输出 SWD -> JTAG 切换序列的等效命令。

    有命令可控制各个 JTAG 线路、JTAG -> SWD 序列可能会发生位 bang、但有点单调:

    -- JTAG-硬件--
    -- c00 在 TDI = TMS = 0
    c 的情况下创建时钟 时钟
    tck0 清除 TCK
    tck1 设置 TCK
    0 清除 TDI
    1 设置 TDI
    t0 清除 TMS
    T1 设置 TMS
    trst0 清除 TRST
    趋势1 设置 TRST
    r0 清除复位
    R1 设置复位 

    J-Link 脚本 JTAG_Write 函  数可以更简单地生成从 SWD -> JTAG 和 JTAG -> SWD 切换所需序列、因为 JTAG_Write 每个引脚最多可写入64位。

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

    感谢大家的快速输入。 在我的开发环境中、我认为我最短的路由是使用 J-Link 脚本。 您度过了美好的一天、

    Dennis