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.

[参考译文] TMS320F28379D:用于 Z1-BOOTCTRL 和闪存 A 代码的 OTP

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1356562/tms320f28379d-otp-for-z1-bootctrl-and-flash-a-code

器件型号:TMS320F28379D
主题中讨论的其他器件:UNIFLASHC2000WARE

大家好!

我有关于在 OTP 后为 Z1-BOOTCTRL 刷写代码的问题。 我尝试使用 serial_flash_programr.exe 引导、上传 LED_BLINK 示例代码。 在 OTP 引导过程之前、我可以通过 serial_flash_programr.exe -d f2837xD -k f2837xD_fw_upgrade_example\F2837xD_sci_flash_kernels_cpu01.txt -a f2837xD_fw_upgrade_example\blinky_dc_cpu01_alt.txt -b 76800 -p COM10 -v 运行此示例

图1. 操作通道

在该命令之后、我正在运行1-DFU CPU1和0-done、LED 闪烁且代码从闪存运行。 下一步、我想编写 使用 UNIFLASH 将 SCI 引导模式转换为 OTP 。 我写道 0x0000015A (32位)值添加到 0x7801E (Z1-BOOTCTRL)地址。 完成这一步后、我尝试了相同的过程来使用 serial_flash_programr.exe 通过 serial_flash_programr.exe -d f2837xD -k f2837xD_fw_upgrade_example\F2837xD_sci_flash_kernels_cpu01.txt -a f2837xD_fw_upgrade_example\blinky_dc_cpu01_alt.txt -b 76800 -p COM10 -v 并包含此命令内核已上传并进行器件固件升级 (DFU CPU1) 流程已完成。 但代码无法正常运行(LED 没有闪烁)。 此步骤是否有任何问题? 非常感谢!

此致、

F·S·弗坎

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

    尊敬的 Furkan:

    您可以检查的一件事是查看应用程序是否确实向器件发送了该数据。 您可以擦除设备的闪存,然后再次尝试固件升级。 完成此操作后、您是否能够对器件内容执行存储器转储、或者查看应用是否在 CCS 存储器窗口中达到了正确的地址?

    另一项需要检查的是应用的映射文件。  

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    感谢您的快速响应! 我尝试擦除器件闪存 (3-擦除 CPU1) 和固件升级 (1-DFU CPU1) 但代码并未运行。 如何查看申请地址? 例如、您的意思是、如果我使用特定地址(0x00080000)运行 CPU1、我可以从 UNIFLASH 中看到这些地址上的一些值。 我是否理解正确?

    要检查的另一件事是应用程序的映射文件。

    我怎么能做这一步呢?

    谢谢。

    此致、

    F·S·弗坎

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

    我想说另外一点。 凭借此 0x0000015A 值、Bootpins 将 GPIO84 和 GPIO72对吧? 此外、引导模式将是 SCI。 默认 SCI GPIO 引脚为 GPIO84 GPIO85兼容。 GPIO84 SCI 和自举引脚的引脚相同。 这会引起任何冲突吗?

    谢谢。

    此致、

    F·S·弗坎

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

    尊敬的 Furkan:

    >如何执行此步骤?

    若要查看映射文件、在 CCS 中构建工程后、您可以导航至 Build Configuration 文件夹并单击扩展名为.map 的文件。

    >我可以检查申请地址吗?

    在映射文件中、应该有一个程序 codestart 的原始地址以及程序的.text。

    >例如,您的意思是,如果我运行具有特定地址(0x00080000 )的 CPU1 ,我可以从 UNIFLASH 中看到这些地址的一些值。 我是否理解正确?

    如果使用 CCS/Uniflash 加载应用程序、则运行 CPU1、它应按预期运行应用程序。 如果没有、则工程的构建方式可能存在问题。

    >我想说另一件事。 凭借此  0x0000015A  值、Bootpins 将  GPIO84  和 GPIO72对吧? 此外、引导模式将是 SCI。 默认 SCI GPIO 引脚为  GPIO84  GPIO85兼容。  GPIO84  SCI 和自举引脚的引脚相同。 这会引起任何冲突吗?

    0x015A 放置在 CPU1的 BOOTCTRL 寄存器位字段中的值是指使用 GPIO84和 GPIO85的 SCI 引导0。 BootPins 本身仍将是器件上的 GPIO84和 GPIO72 (连接到开关 A:SW1)。 SCI 引导的替代方法是使用 BOOTCTRL 寄存器位字段值 0x815A 指 SCI 引导1、它使用 GPIO28和 GPIO29。 串行闪存主机编程器默认使用 GPIO28和 GPIO29、因为这两条线路与使用 USB-C 电缆进行 UART 通信的线路相同。 在使用默认的主机编程器时会发生冲突、因为它使用 GPIO28和 GPIO29通过 UART 线路进行通信。

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    >> 要查看映射文件、在 CCS 中构建工程后、您可以导航至 Build Configuration 文件夹并单击  扩展名为.map 的文件。

    -好了,我在 CPU1_FLASH 文件夹中找到了它。 谢谢。

    >> 在映射文件中、应该有程序 codestart 的原始地址 以及  程序的.text。

    -.map file 中有一行->  入口点符号:"code_start" 地址:00080000

    >>如果您使用 CCS/Uniflash 加载应用、则运行 CPU1、它应按预期运行应用。 如果没有、则工程的构建方式可能存在问题。

    -当我为 CPU1闪存运行 blinky_dc (通过 CCS 调试)示例时,它可以工作,但在复位后(电源复位)代码没有运行。

    >>  0x015A  放置在 CPU1的 BOOTCTRL 寄存器位字段中的值是指使用 GPIO84和 GPIO85的 SCI 引导0。 BootPins 本身仍将是器件上的 GPIO84和 GPIO72 (连接到开关 A:SW1)。 SCI 引导的替代方法是使用 BOOTCTRL 寄存器位字段值  0x815A  指 SCI 引导1、它使用 GPIO28和 GPIO29。 串行闪存主机编程器默认使用 GPIO28和 GPIO29、因为这两条线路与使用 USB-C 电缆进行 UART 通信的线路相同。 在使用默认的主机编程器时会发生冲突、因为它使用 GPIO28和 GPIO29通过 UART 线路进行通信。  

    -建议在新器件上使用带有0x0000815A 命令的 OTP 吗?  

    感谢 Charles 的一切!

    此致、

    F·S·弗坎

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

    尊敬的 Furkan:

    >当我为 CPU1闪存运行 blinky_dc (用 CCS 调试)示例时,它可以工作,但在重置设备后(电源重置)代码没有运行。

    引导模式开关 SW1是设置为 SCI 引导模式(GPIO72低电平、GPIO84高电平)、还是默认设置为获取模式/闪存(GPIO72高电平、GPIO84高电平)? 器件复位后、根据引导模式开关、器件将从 SW1引导设置确定的引导模式运行。 由于 SW1开关未设置为闪存引导模式、它可能未在运行。

    >建议在新器件上使用带有0x0000815A 命令的 OTP 吗?

    如果您计划使用 GPIO28/GPIO29并无 CCS 从 SCI 引导、则答案是肯定的。 但是、您应注意这是一个  永久性 更改为器件、并且通过向 OTP 写入此值、与引导模式开关关联的其他默认引导模式(并行 I/O、等待、获取模式/闪存默认模式)将与之前一样。

    谢谢。此致、

    查尔斯

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

    你好,我希望你是好的。

    >>引导模式开关 SW1是设置为 SCI 引导模式(GPIO72低电平、GPIO84高电平)、还是默认设置为获取模式/闪存(GPIO72高电平、GPIO84高电平)? 器件复位后、根据引导模式开关、器件将从 SW1引导设置确定的引导模式运行。 由于 SW1开关未设置为闪存引导模式、它可能未在运行。

    --是的,它是使用 OTP 模式的获取模式。 GPIO72和 GPIO84是高电平。 另外、A:SW1是0。

    >>如果您计划使用 GPIO28/GPIO29并无 CCS 从 SCI 引导、则答案是肯定的。 但是、您应注意这是一个  永久性 更改为器件、并且通过向 OTP 写入此值、与引导模式开关关联的其他默认引导模式(并行 I/O、等待、获取模式/闪存默认模式)将与之前一样。

    --我只是想使用 OTP 作为 SCI 引导选项。 在这里、这些是我为 SCI 引导执行的步骤。

    第1步: 使用 UNIFLASH 将0x0000015A 值写入 Z1-BOOTCTRL 地址。

    第2步: 从0x7801E 地址读取器件存储器以检查0x0000015A 的值、这似乎没有问题。

    第3步: 通过 TTL USB 将器件 GPIO84和 GPIO72连接到计算机。

    第4步: 测试 Blinky_dc_cpu01 实现 F2837xD_sci_flash_kernels_cpu01 内核文件来自 \utilities\flash_programmers\serial_flash_programmer\f2837xD_fw_upgrade_example 文件夹。

    第5步: 1-DFU CPU1、0 -从 serial_flash_programmer.exe 完成。(它不工作)。

    第6步: 我使用这条命令尝试了第5步并且 LED 在闪烁、但在重置电源后、代码未运行。 (1-DFU CPU1、11-运行 CPU1和十六进制。 地址0x00080000)。 您可以在上看到 图2

    图2. 运行 CPU-1命令的操作 PChannel。

    这些步骤中是否有错误 Charles? 您能告诉我为 SCI 使用 OTP 的所有步骤吗? 因为我将在新器件上执行这些步骤、我不想做错事。

    感谢 Charles 的一切。

    此致、

    F·S·弗坎

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

    您好!

    有人能帮我解决这个问题吗?

    此致、

    F·S·弗坎

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

    尊敬的 Furkan:

    我将能够在一天结束时向您进一步介绍最新情况。

    此致、

    查尔斯

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

    Furkan,  

    如果您已从1-6开始执行步骤并使用主机编程器成功下载内核和应用程序、则说明这些是正确的。 请向我说明这是否确实是图2的生成方式。

    您放置在主机编程器中的应用起点地址是0x80000。 此应用快照中显示的地址为0x82aa5。 我认为这可能是出现问题的原因。

    谢谢。

    查尔斯

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

    您好 Charles、

    >>如果您已从1-6开始执行步骤并使用了主机编程器成功下载内核和应用程序,则这些是正确的。 请向我说明这是否确实是图2的生成方式。

    -- Fig.2已成功结束,并且 LED 在这一步骤后闪烁。 当我重置设备电源时、LED 不闪烁。 我认为代码无法自动启动。 如果我使用 以下命令来使用 serial_flash_programr_appln.exe:  ..\serial_flash_programr_appln.exe -d f2837xD -k f2837xD_fw_upgrade_example\F2837xD_sci_flash_kernels_cpu01_alt.txt -a f2837xD_fw_upgrade_example\blinky_dc_cpu01.txt -b 76800 -p COM10  提供1-DFU CPU1后、代码再次运行。 您可以在图3上看到它

    图3.  串行闪存编程器 APPLN

    >> 您放置在主机编程器中的应用起点地址为0x80000。 此应用快照中显示的地址为0x82aa5。 我认为这可能是出现问题的原因。

    我认为这一步没有问题。 因为我的测试对象  0x82aa5  地址、并且在电源复位后停止闪烁。 我的意思是代码无法跳转(分支)到应用程序。 这个问题我真的需要帮助。  

    此致、

    F·S·弗坎

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

    您好、Charles、我有最新消息。 在我发送" AA "或" AA "重置过程后从串行(例如 PuTTY)发送到卡的消息、代码正在运行并且 LED 闪烁、但是每次重置、我应该从串行发送此消息吗?  

    此致、

    F·S·弗坎

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

    Furkan,

    对于 F28379Dx 器件、如果已配置获取模式、则无法将引导模式选择引脚重新配置为在器件复位后从闪存引导(只能配置一次获取模式)。  

    从串行发送'AA'消息可使器件默认为闪存引导模式。  

    谢谢。此致、

    查尔斯

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

    Charles

    感谢您的答复。 因此我理解、每次电源复位时、我都应该从 UART 发送'AA'消息、从而将引导模式从 SCI (OTP 值)更改为闪存引导。 您的 TRM 对于此序列是不够的...  

    此致、

    F·S·弗坎

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

    Charles  

    我还有一个问题。 如果我更改 Zx - BOOTCTRL。 OTP_KEY 具有 0xFF 而不是 0x5A ,它将是 从闪存引导 ? 我错了吗?  例如、我想通过改变 Z1-BOOTCTRL  --> 0x000081FF ,现在它将使用 SCI 备用 ,引导引脚将 GPIO84和 GPIO72 OTP_密钥 将不相等 0x5A 。 它对 SCI 备用 IO 和跳转到闪存步骤是否有效? 您可以在以下位置查看此步骤:  图4.

     图4.  独立和休眠启动流程

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

    尊敬的 Furkan:

    将键值的 MSB 更改为0xFF 的任何变化都将表明 BOOTCTRL 寄存器无效。 它将默认为引导模式开关值。  

    如果您遵循 SCI 备用 IO 的流程图、则设置 keyvalue (例如0x0000815A)将有效

    谢谢。此致、

    查尔斯

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

    您好 Charles、

    >> 将键值的 MSB 更改为0xFF 的任何变化都将表明 BOOTCTRL 寄存器无效。 它将默认为引导模式开关值。  

    "是的,我明白了。 我的意思是、在更改 SW1:0|1 (SCI 引导)之后、它将查看 OTP_BMODE。 OTP_BMODE 将为0x81 (SCI 备用)。 SCI 引导后、我将更改 SW1:1|1 (获取模式)、它将看起来像 OTP_KEY。 因此、这不会等于0x5A、它将从闪存引导。 我对吗?

    此致、

    F·S·弗坎

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

    尊敬的 Furkan:

     SW1:0|1 (SCI 引导)、器件将使用 BMODE 0x01 (SCI 默认)查找用于固件升级(GPIO84和 GPIO85)的默认 GPIO 引脚。  

     SW1时:1|1 (获取模式) 且 OTP_KEY 未设置为0x5A、它将从闪存引导。

    如果 SW1:1|1 (获取模式)并且 OTP_KEY 已设置、并且 BMODE 与0x81一起、它将从 SCI 交替模式引导。 请注意、如果通过 OTP 进行设置、您将无法再在器件上使用闪存 BMODE。

    谢谢。此致、

    查尔斯

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

    您好 Charles、

    >>如果 SW1:1|1 (获取模式)并且 OTP_KEY 已设置、并且 BMODE 与0x81一起、它将从 SCI 交替模式引导。 请注意、如果通过 OTP 进行设置、您将无法再在器件上使用闪存 BMODE。

    --我的意思是,如果我设置 SW:0|1(SCI 模式)并且 OTP_KEY 设置为0xFF(不是0x5A)且 BMODE 设置为0x81,那么它会从 SCI 交替模式引导吗? 在此步骤(从 SCI 交替引导)之后、如果我设置 SW:1 | 1 (获取模式)、它将从闪存引导。 我对吗?

    此致、

    F·S·弗坎

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

    尊敬的 Furkan:

    >如果我设置 SW:0|1( SCI 模式)且 OTP_KEY 设置为0xFF (不是0x5A)且 BMODE 为0x81,它会从 SCI 交替模式启动吗?

    它将从默认 SCI 模式引导、因为引导控制寄存器未被视为有效(不是0x5A)。

    >在此步骤之后(从 SCI 交替引导)如果我设置 SW:1|1(获取模式),它将从闪存引导。 我对吗?

    由于 SCI Alternate 将无法被识别、因此它仍会从闪存引导。

    对于该器件、如果从不设置 OTP_KEY 以识别寄存器更改有效、则获取模式将继续引导至闪存。 我希望这对您有所帮助。

    谢谢。此致、

    查尔斯

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

    您好 Charles、

    感谢您的答复。 关于这些步骤、我还有一个问题。 我想写 OTP_KEY --> 0x5A、BMODE --> 0x81。 使用此值,我的卡将始终等待 SCI 备用引导。 完成启动过程后、我希望在不写入"A"或"A"字符的情况下跳转到闪存。 我该怎么办?

    此致、

    F·S·弗坎

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

    尊敬的 Furkan:

    自动波特率检查是此器件的 SCI 外设的一部分、以及 C2000ware 中的串行闪存主机编程器和 SCI 闪存内核代码的一部分。   器件 TRM 的第4.10.4.2节介绍了 SCI 引导模式、即需要在主机和 SCI 引导加载程序之间实现波特率锁定。 本节中的图4-9显示、在实现自动波特锁定后、它会等待接收键值。 如果键值无效、则跳转到闪存。 您可能需要通过 SCI 创建自定义引导加载程序来下载 SCI 闪存内核和以下应用程序。  

    谢谢。此致、

    查尔斯

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

    您好 Charles、

    感谢您的答复! 我将查找自定义引导加载程序。 祝您度过美好的一天!

    此致、

    F·S·弗坎