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-TM4C123GXL:TM4C123GXL / TM4C123GH6PM -访问 ROM 引导加载程序

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1481738/ek-tm4c123gxl-tm4c123gxl-tm4c123gh6pm---access-rom-boot-loader

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:TM4C123GH6PM

工具与软件:

我们尝试使用 FTDI USB 对 MCU 进行编程、以便在 UART0上进行串行通信。 从文档 https://www.ti.com/lit/ug/spmu301e/spmu301e.pdf?中 对于引导加载程序、可以看到它说查询 BOOTCF 寄存器来标识 ts 和状态、从而调用 ROM 引导加载程序。 查看寄存器(0x400FE1E0)。 然后、查看数据表(Tiva C 系列 TM4C123GH6PM 微控制器数据表(修订版 E))、其中指出位15:13是启动 GPIO 端口、12:10是启动 GPIO 引脚。  

Q1: 我是否正在查看 引导 GPIO 端口和引脚的正确位?

Q2: BOOTCFG 寄存器的默认设置是什么?  

Q3:用于启用 ROM 引导加载程序的默认引导 GPIO 端口和引脚是什么?

我们的目标是将 MCU 放在我们自己设计的电路板上、而不使用 Tiva C Series Launchpad。 我们正在尝试验证是否可以通过 FTDI 通过串行(而不是使用 Tiva C Series Launchpad 调试端口)成功上传 bin 文件。 我们要使用通过串行配置的 LM 闪存编程器、但到目前为止尚未成功。  

如果有任何帮助、将不胜感激。

谢谢
James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="644673" url="~GPIO"]]/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1481738/ek-tm4c123gxl-tm4c123gxl-tm4c123gh6pm---access-rom-boot-loader 说明第15:13位是引导 GPIO 端口、12:10位是引导 GPIO 引脚。  [/报价]
    Unknown 说:
    Q1: 我是否查看了 引导 GPIO 端口和引脚的正确位?

    您好!

     您的理解是正确的。

    [报价用户 id="644673" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1481738/ek-tm4c123gxl-tm4c123gxl-tm4c123gh6pm---access-rom-boot-loader "]

    Q2: BOOTCFG 寄存器的默认设置是什么?  

    [报价]

    如果您查看 th 端口的复位值和针对位15:10的引脚全为1。 对于整个寄存器、该值为0xFFFFFFFE。 您可以在 CCS 寄存器窗口中查看该视图。  

    [报价用户 id="644673" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1481738/ek-tm4c123gxl-tm4c123gxl-tm4c123gh6pm---access-rom-boot-loader "]

    Q3:用于启用 ROM 引导加载程序的默认引导 GPIO 端口和引脚是什么?

    [报价]

    由于 BOOTCFG 的默认值是0xFFFFFFFE、这表示默认端口 H、引脚7。  

    2.在 ROM 的 Boot Loader 中、指定的 GPIO 管脚的状态与指定的管脚进行比较
    反极性。 如果管脚状态与规定的极性匹配、那么将 ROM 映射到地址0x0000.0000
    并继续从 ROM 引导加载程序中执行。

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

    Charles

    感谢您的答复。 在 EK-TM4C123GXL (Tiva C 系列 LaunchPad) 端口 H 上、引脚7不存在、或者至少我在40引脚接头上找不到它。  

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

    尊敬的 James:

     没错。 因此、在 LaunchPad 上、由于 LP 上甚至不存在该端口/引脚、因此不能意外跳转到 ROM 引导加载程序。 您需要对 BOOTCFG 寄存器进行编程、使其适用于 LaunchPad 上的可用端口/引脚、以便使用 GPIO 引脚强制 MCU 进入引导加载程序状态;否则、如果器件在0x0和0x4找到有效的 SP 和复位向量、器件将直接跳转到应用程序。  

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

    明白了。 感谢您的澄清。  

    以下哪项正确? :

    1.修改 BOOTCFG 寄存器的端口/管脚分配来提供给可用的 GPIO。

    2.将 BOOTCFG 寄存器中定义的所分配端口/管脚拉低为高电平(如 BOOTCFG 寄存器中定义的那样)。

    3.重置 LP

    4. 将运行 ROM 引导加载程序。

    5.通过串行连接 LM Flash 程序员。

    6.闪存 LP。

    7.移除引脚的高/低电平。

    8.重置 lp.

    9.使用闪存程序运行的 LP。

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

    这是正确的顺序。  

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

    还可以、很棒!  还有几个与 ROM 引导加载程序(没有 LP)有关的问题。  引导加载程序指南(  用于 C 系列的 TivaWare 引导加载程序用户指南(修订版 E)第9页)说明了  "对于 UART、I2C 和 SSI、ROM 引导加载程序分别是固定的对于 UART0、I2C0和 SSI0。"  

    这就引出了我的下一个问题。。。由于我们要使用 LM 闪存编程器和 ROM 引导加载程序、最终我们不会使用 LP 、如何更改 BOOTCFG 寄存器和/或端口 H、可在 TM4C123GH6PM 上访问的引脚7 (假设 BOOTCFG 的默认状态为 H7)?

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

    假设在 E6被置为高电平时、您要使用 GPIO E6引脚强制器件进入 ROM 引导加载程序。 您将需要将以下代码插入应用固件。  

    #define FLASH_FMA 0x400FD000
    #define FLASH_FMD 0x400FD004
    #define FLASH_FMC 0x400FD008
    #define FLASH_FMC_WRKEY 0xA442
    #define FLASH_FMC_COMT 0x9

    // FMA 应具有此值以对 BOOTCFG 进行编程
    HWREG (FLASH_FMA)= 0x75100000;

    //要在 BOOTCFG 中刷写的数据必须存储在 FMD 中。 0xFFFF9AFE 将以高极性启用 GPIO 引脚 E6、以进入 ROM 引导加载程序
    HWREG (FLASH_FMD)= 0xFFFF9AFE

    // FMC 应具有 writekey 和 commit 位
    HWREG (FLASH_FMC)= FLASH_FMC_WRKEY | FLASH_FMC_COMT;

    while (HWREG (FLASH_FMC)和 FLASH_FMC_COMT)

    }

    闪存首次为空时、它将运行基于 ROM 的引导加载程序并加载您的应用固件、包括上述代码。 下次启动设备时、设备中已有代码、处理器将直接运行代码。 但是、如果它检测到 E6已置为有效、则它将再次跳转到 ROM 引导加载程序、以便您可以重新加载/更新固件。  

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

    明白了、感谢您的样片。

    正确的想法是...

    为了首次将应用固件加载到器件上、我需要使用 J-Link 或 XDS110/SDS100? 那么、 在 E6置为高电平的复位后、后续更新可以通过 FTDI USB 在 UART0上进行串行更新?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了首次需要使用 J-Link 或 XDS110/SDS100时将应用固件载入器件? 然后、 在 E6置为高电平的复位后、后续更新可以通过 FTDI USB 在 UART0上进行串行更新?[/QUOT]

    可使用 J-LINK 或 XDS、这是加载固件的 JTAG 方法。 如我所述、如果需要、还可以在第一次通过 UART0加载固件。 由于您已经拥有 J-LINK 或 XDS 等 JTAG 调试探针、因此我建议您使用该探针加载您的第一个程序。 只需使用 CCS 加载代码即可。  

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

    感谢 Charles 的持续支持和回答我的问题。 我还有两个问题...(我认为答案是肯定的、但只是想确定)。

    #1如果我们的电路板上有全新的芯片、闪存将为空、并始终运行 ROM 引导加载程序?  

    #2首次我们可以使用 FTDI USB 串行并使用 CCS 和/或 LM 闪存编程器加载代码时?

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

    尊敬的 James:

    [报价 userid="644673" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1481738/ek-tm4c123gxl-tm4c123gxl-tm4c123gh6pm---access-rom-boot-loader/5692255 #5692255"]#1如果我们的电路板上有全新的芯片、闪存将为空并能始终运行 ROM 引导加载程序?  [报价]

    有。

    [报价用户 id="644673" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1481738/ek-tm4c123gxl-tm4c123gxl-tm4c123gh6pm---access-rom-boot-loader/5692255 #5692255"]#2首次我们可以使用 FTDI USB 串行并使用 CCS 和/或 LM 闪存编程器加载代码?

    如果器件处于原始状态且闪存已完全擦除、则可以使用 ROM 引导加载程序从连接到 FTDI USB 转串行适配器的 UART0下载固件。 CCS 不支持串行下载、但仅支持 JTAG。 是的、您可以使用 LM Flash Programmer (基于 GUI)。 如果要使用命令行、可以使用 C:\ti\TivaWare_C_Series-2.2.0.295_ORG\tools\bin\sflash.exe。