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.

[参考译文] TM4C129ENCPDT:如何使用 UART0清除 TM4C129ENCPDT 的闪存?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/627196/tm4c129encpdt-how-to-clear-flash-of-tm4c129encpdt-using-uart0

器件型号:TM4C129ENCPDT
主题中讨论的其他器件: UNIFLASHEK-TM4C1294XLTM4C1294NCPDTTM4C123GH6PM

您好!

我有一个新的 TM4C129ENCPDT 处理器、我使用 LM 闪存编程器实用程序通过 UART0成功刷写了闪烁代码。

现在,我想再次刷新一个新代码,但使用 LM Flash 重新编程代码时遇到错误(错误是:同步波特率失败)。 我认为问题是:当我第一次刷写闪烁代码时,调用了 ROM 引导加载程序(它检查了位置0x04,它是空的),并使用 UART0刷写了代码。 但是、由于 ROM 引导加载程序不工作、闪存中已经存在某些内容、因此波特率不同步。

因此、每次我要通过 ROM 引导加载程序使用 UART0刷写代码时、我都必须擦除闪存、但无法找到任何实用程序来执行此操作。

我尝试了 UNIFLASH、但电路板无法被识别。

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

    尊敬的 Apoorv:

     您需要清除 BOOTCFG 寄存器的 EN 位。 ROM 引导加载程序检查0x4处等于0xFFFFFFFF 的地址位置或 BOOTCFG.EN 为0。 如果任一条件为真、则会 再次加载您的应用程序。 请参阅数据表。 以下是摘录。 请确保提交 BOOTCFG 寄存器、以便在下电上电后生效。  

    寄存器68:引导配置寄存器(BOOTCFG)、偏移量0x1D0
    注意:偏移量是相对于0x400F.E000的系统控制基址而言的。
    注意:引导配置(BOOTCFG)寄存器要求在提交前进行一个 POR
    更改生效。
    该寄存器不是直接写入的、而是使用 FMD 寄存器、如"非易失性"中所述
    寄存器编程—Flash 存储器驻留寄存器”。 该寄存器的值
    确认后、在下电上电之前无法读回新值。 该寄存器提供的值
    配置 GPIO 引脚以启用 ROM 引导加载程序、以及一次性写入机制
    禁用外部调试器对器件的访问。 复位时、用户有机会引导
    内核来执行 ROM 引导加载程序或使用任何 GPIO 信号执行闪存存储器中的应用程序
    从端口 A 到端口 H、由该寄存器中的位进行配置。 复位时、以下序列
    已执行:
    读取 BOOTCFG 寄存器。 如果 EN 位被清零、那么执行 ROM 引导装载程序。
    2.在 ROM 引导装载程序中、将指定 GPIO 管脚的状态与指定的进行比较
    极性。 如果状态与指定的极性匹配、那么 ROM 被映射到地址0x0000.0000
    并且继续执行 ROM 引导加载程序。
    如果 EN 位被置位或者状态与指定的极性不匹配、则地址上的数据
    读取0x0000.0004、如果这个地址上的数据是0xFFFF.FFFF、那么 ROM 被映射到
    地址0x0000.0000并继续执行 ROM 引导加载程序。
    4、如果地址0x0000.0004处的数据不是0xFFFF.FFFF、堆栈指针(SP)将被装载
    从地址0x0000.0000处的 Flash 存储器加载程序计数器(PC)
    地址0x0000.0004。 用户应用程序开始执行。

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

    感谢您的回答、但我无法刷写电路板中的任何代码、因为我没有 Launchpad 中的任何 JTAG 引脚或外部编码器。 因此我无法配置 bootconfig 寄存器。 因此、ROM 引导加载程序只能通过 UART0刷写代码、因为这是设计电路板中唯一可用的功能。 但我无法使用 LM 闪存编程器通过 UART0刷写代码、我认为原因是闪存现在不为空、因此基于 ROM 的引导加载程序不运行(如果闪存为空、则运行基于 ROM 的引导加载程序、或者我们写入 bootconfig 寄存器)。

    因此、如果我回答正确、我的问题会简化为使用一些外部实用程序或硬件擦除闪存。 但我也无法使用 UNIFLASH 擦除闪存、因为未检测到器件。

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

    如果电路板上没有 JTAG 接口、如何调试应用? 我认为构建没有任何调试功能的电路板不是一个好主意。

    您现在可能需要探索基于闪存的引导加载程序。 Tivaware 中提供了使用 UART 的基于闪存的引导加载程序示例。 您将首先擦除闪存。 首次使用 ROM 引导加载程序加载基于闪存的引导加载程序。 基于闪存的引导加载程序仅是一个小型程序。 基于闪存的 UART 引导加载程序驻留在闪存中后、它可以与 LM 编程器进行交互以加载您的应用程序映像。 基于闪存的引导加载程序必须在闪存中永久存在。 有关详细信息、请参阅《TM4C 引导加载程序用户指南》。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已经加载了 blinky 程序、无法清除闪存、无法使用基于 ROM 的引导加载程序加载基于闪存的引导加载程序。 是否有任何方法可以清除闪存?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我没有发现任何解决方案。 您应该强烈考虑在设计中添加 JTAG 接口。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    是否无法使用硬件拉取引脚以运行基于 ROM 的引导加载程序。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、有-如果您愿意成为 LQFP 外科医生、您可以从 MCU 的 JTAG 引脚上焊接微型跳线。
    那么、最好对这些导线进行热粘结、以免它们缩短或容易被拔出...
    所涉及的工作可能不仅仅是重新设计电路板并构建新的旋转... ;)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Charles Tsaaa">如果您的电路板上没有 JTAG 接口、您甚至如何调试您的应用? [/报价]

    无需 JTAG 来调试程序。 我同意、不使用某种不依赖于内部 SW 状态的编程微控制器的方法是愚蠢的、因此我同意 JTAG 是必不可少的。 我想说的是、这些引脚不应被重新用于其他用途、而应仅用于 JTAG。

    Robert

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

    正如这两个引脚(在我之前)所指出的那样、您(可能)对 JTAG 或 SWD 引脚的收集并未产生高昂的成本!

    在设计 PCB 之前-"所有此类问题"应"进行测试/验证"-以确定您(建议)的方法(CAN)是否起作用...  及其-"困难程度。)

    如果您已"改变用途"这些 JTAG 引脚、则焊接到它们的端接点或布线过孔可能"更容易"、或者(如果您非常幸运)通过电路板的接头连接到这些关键引脚!   (假设您路由/输出这些 JTAG 信号供使用、"非板载")

    Fir/I 发现的最有效策略是、 "始终-将 JTAG (包括4个上拉 Rs)路由到0.050"间距、10引脚接头"。   在开发过程中、您将"插入并使用该标头"-一旦您掌握了某些(不同的可选编程技术)、您将会"填充 DNF"(请勿填充)该标头。

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

    您好!

    我添加了 JTAG 引脚、并使用 EK-TM4C1294XL 上的 Stellaris ICDI 来调试非板载 TM4C129ENCPDT。 我能够使用 LM Flash Programmer 一次刷写代码、但 sincr 随后始终出现错误:Unable to initialize target-0。 我还尝试解锁器件。 但我仍然会得到相同的误差。 如何再次刷写代码、这是什么错误?

    我使用了折页机。 链接: www.ti.com/.../spma075.pdf

    此外、当我在评估套件中连接到 TM4C1294NCPDT 时、我可以刷写代码、但一旦我将其连接到定制的 TM4129ENCPDT、我就会收到错误: 无法初始化 TARGET-0。 此外、在我得到误差之前、我将在微控制器的 TDO 引脚中获取数据。

    出现错误的原因可能是什么?是因为我没有基于闪存的引导加载程序?

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

    您好!

     您是否在 Windows 设备管理器下看到 Stellaris 内电路调试接口? 将定制板从 LaunchPad 上断开后、您是否可以连接到 LaunchPad 并将代码编程到 MCU? 您还可以尝试另一台 PC 机吗? 我们需要隔离这个问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    是的、当我将 Stellaris 内电路调试接口连接到外部 TM4C129ENCPDT 和内部 TM4C1294NCPDT 时、在这两种情况下、我都可以在 Windows 引导管理器下看到它。

    如果我移除定制板并将 EK-TM4C1294XL 评估套件中存在 TM4C1294NCPDT 的 JTAG 跳线配置短接、我可以在 MCU 中对代码进行编程。

    我能够使用 JTAG 将代码闪存到外部 TM4C129ENCPDT 一次、但之后我开始得到错误。

    此致、
    奥 poorv
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道您将 JTAG 布线焊接到了正确的引脚上、对吧?
    这些 N/C 是否被电路板上的其他电路使用?
    有很多可能出错的东西、包括焊接本身... 但其他想法:
    -您是否断开了用作 ICDI 的 launchpad 上目标 MCU 的电源?
    -复位线路上是否有正确的 WPU?
    -如果是、那么最后一个资源:您在其他行上是否有 WPU? 我没有需要这样的服务,但这里的一些同事捍卫了他们的利益。
    ——在做手术时,您是否没有炸过或短接您的 MCU?
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    除了 Bruno 的建议之外、还请使用示波器检查来自定制板的 TDO。 它是否处于活动状态或保持相同的水平?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    1) 我已经使用示波器检查了 TDO 引脚提供信号直到 LM 闪存编程器给出错误。
    2) 我是否需要为 JTAG 通信编写引导加载程序?
    3) 我使用电源为 Launchpad 和使用不同电源的外部 IC 供电。 我认为这可能导致了问题。

    这是硬件问题还是我未正确使用 LM 闪存编程器、或者我是否必须编写一个引导程序?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您上次成功刷写到目标 MCU 中的程序是什么? 您说过、您可以通过外部 LaunchPad 作为调试探针刷写一次定制板。 该程序是否仍在运行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!
    它不工作。 我在很短的时间内获得 TDO 信号。 这是否意味着 MCU 正在响应、但由于某些同步问题、我将面临此错误? 此外、我使用 TM4C123GH6PM 作为编程器对 TM4C1294NCPDT (成功)和 TM4C129ENCPDT (失败)进行编程。 它的编程是否会有问题?

    我在 LM Flash Programmer 中使用以下配置:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还检查了外部板的晶体是否不工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是不是说定制板上的晶体不工作? 如果是这种情况、则没有为 MCU 提供时钟。 如果没有系统时钟、仿真器将无法与 MCU 通信、尽管为 JTAG 接口提供了 TCK。 您是否了解晶体不工作的原因?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我终于找到了这个问题。 当我闪存闪烁码时、我能够通过 JTAG 进行多次编程。 但当我刷写代码时、JTAG 引脚会被锁定。 然后、一旦我使用 LM 闪存解锁器件、我就能够再次使用 JTAG 进行编程。 那么、我的代码中是否有锁定 JTAG 引脚的问题? 我尚未使用引脚 PC0。 PC1、PC2和 PC3。 此外、我的代码使用以太网、并且 JTAG 引脚能否由于硬件中的某些问题而被锁定?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    系统时钟配置不正确。
    仔细检查时钟设置、确保其他"继承的库"不会在其他位置影响这些设置。
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您可以通过两种方法将 MCU 锁定在调试之外、一种是将 JTAG 引脚用于 GPIO、另一种是死系统时钟、两者都可能由软件引起。 您已经提到您没有为 GPIO 重新配置 JTAG 引脚、在您的帖子中、您之前提到了错误的 OSC。 因此、问题很可能是由于计时造成的。 您可以从 MCU 监控 DIVSCLK 引脚(PQ4)。 DIVSCLK 是一个基于所选时钟源的分频基准时钟输出。 您还可以修改代码以输出基于时基的简单 PWM。 如果您丢失 PWM、它还会指示时钟以某种方式丢失。 也许您的应用中已经有了一些 PWM。 它们是否正常工作? 这是我上次询问的、您上次成功加载到 MCU 中的代码是什么、如果它仍然在运行?
    您还可以检查您的应用是否写入 BOOCFG 寄存器以禁用调试功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我已将系统时钟配置为120MHz。 以下代码片段用于配置系统时钟。 没有其他库会影响这些设置。

    //
    //从 PLL 以 CONFIGCPU_CLOCK_Hz MHz 运行。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、
    CONFIGCPU_CLOCK_Hz);

    此外,我可以使用 Launchpad 的内部 MCU:TM4C1294NCPDT 对同一代码进行编程,而不会出现任何问题。 但是、当我使用外部定制板:TM4C129ENCPDT 时、JTAG 引脚会被锁定。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我尝试刷写示例 enet_lwip 代码、但遇到相同的错误。
    我发现配置时钟会造成问题。 因此、我在成功运行的 blinky 示例程序中添加了配置时钟代码、我也开始在 blinky 程序中遇到同样的问题。
    我将添加以下用于配置时钟的代码片段:

    define CONFIGCPU_CLOCK _Hz (无符号长整型) 120000000 )

    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、
    CONFIGCPU_CLOCK_Hz);

    这是所有示例程序中使用的相同代码。 我的设备被锁定的原因可能是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我不会发现代码有任何问题。 您有哪个 TivaWare 版本? 如果您不使用最新版本、能否尝试使用最新的 TivaWare 版本? 您是否也可以尝试不使用 MAP_前缀、看看它是否会有所不同?

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

    您好!

    我现在能够刷写代码。 外部25MHz 晶体有一些问题。 但我又面临1个问题。 我的笔记本电脑上没有从定制板检测到以太网。

    代码类似于 lwip 示例。 由于我无法读取 MAC 地址寄存器、因此返回1。相同的代码在 TM4C1294XL (Launchpad 内的微控制器)中正常工作。 代码片段为:

    //
    //从用户寄存器获取 MAC 地址。
    //
    map_FlashUserGet (&ui32User0、&ui32User1);
    if ((ui32User0 == 0xffffffff)||(ui32User1 == 0xffffffff)

    退货(1);

    我有2个疑问:

    1) 自定义电路板通电后、便会在笔记本电脑上直接检测到以太网。

    2) 这是因为硬件中存在一些问题、以至于我无法读取以太网特定的寄存器。

    3) 定制 TM4C129EXL 电路板中是否可能没有 MAC 地址?

    如果不是其中的任何一个、问题可能是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否将此问题发布到单独的主题上? 这个新问题与标题无关。
    每个线程的成本保持不变! ;)
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此外、"成本/线程"-剧情在哪里?    (针对"运动疾病"的补救措施、因为...海报面临另一个问题(仅此而已)!)   (不太可能)

    该主题对于海报的"自制 PCB "是否实现了"通过 UART0清除闪存"仍不清楚。   (这是它的预期目标!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    只有 LaunchPad 使用 MAC 地址进行了预编程。 您的客户电路板将没有 MAC 地址。 对于定制设计、MAC 地址必须来自分配给组织/公司的 MAC 地址池。 请为新问题创建新主题帖。 谢谢。