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:配置 OTP BOOTCTRL 寄存器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/827849/tms320f28379d-configuring-otp-bootctrl-register

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

大家好、

我们正在开发 TMS320F28379D 控制卡。 我们能够使用 USB_flash_programmer.exe 执行 USB 闪存、为此、我们已将 EMU_BOOTCTL 寄存器的值配置为0xC5A。

现在、我们要为 USB 引导模式对 boot_CTRL OTP 寄存器进行编程、并测试 usb_flash_programr.exe 和。 您能告诉我们、如何读取 BOOT_CTRL 寄存器的当前值以及如何为 USB 引导模式配置 BOOT_CTRL 寄存器吗?

我们的理解是、一旦 BOOST_CTRL 寄存器配置为 USB 引导模式、如果器件连接到 USB 主机、它将从 USB 引导或从内部闪存引导。 是这样吗?

此致、

瓦拉达帕瓦尼。

 

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

    您好、Varada、

    请参阅 C2000Tm软件控制的固件更新过程以了解更多详细信息: http://www.ti.com/lit/an/spracn1/spracn1.pdf

    2.如技术参考手册中所述"默认情况下、GET 引导模式在独立模式下执行闪存引导、或在仿真器连接到器件时等待引导。" 所以我认为你写的是正确的。

    谢谢、此致

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

    您好!

    将 BOOT_CTRL 编程为 USB 引导模式后、您将无法选择引导至闪存。

    为了对 boot_CTRL 进行编程、您可以看到具有 DCSM 的闪烁示例、或者您可以使用片上闪存编程器对 OTP 位置进行编程。

    如果希望选项引导至闪存或 USB、则应将器件配置为始终引导至闪存、然后让闪存应用程序确定是否应从引导 ROM 调用到 USB 引导加载程序。

    希望这对您有所帮助。

    SAL

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

    您好 Sal、

    感谢您的输入。

    您所说的是、如果我们使用 USB 引导配置 boot_CTRL 寄存器、我们将无法返回到闪存引导模式。

    我无法从您的陈述中明确说明"如果您希望选项引导至闪存或 USB、则应将器件配置为始终引导至闪存、然后让您的闪存应用程序确定是否应从引导 ROM 调用 USB 引导加载程序。"  请您进一步详细说明/阐明。


    您的语句显示"从引导 ROM 调用 USB 引导加载程序"。 如何执行此操作? 请给出建议吗?

    谢谢、

    瓦拉达帕瓦尼。

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

    您的理解是正确的。 通过将 USB 引导模式编程为 Get 模式选项、您将无法引导至闪存。

    相反、如果您需要这两个选项、请始终引导至闪存。

    在闪存应用程序开始时、您可以检查某些引脚或 USB 连接、以查看您的器件是否收到通过 USB 进行固件更新的信号。 如果收到执行 USB 闪存编程器更新的信号、则通过将引导 ROM 符号链接到工程来对引导 ROM 进行函数调用、然后对 USB 引导加载程序进行函数调用以启动固件更新过程。 否则、只需继续使用您的闪存应用程序即可。

    请参阅有关此内容的其他论坛帖子。 其他国家也实施了这一做法。 程序是直接的、论坛也将为您提供帮助。

    SAL

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

    您好 Sal、

    我们可以从应用程序中识别 USB 连接的 GPIO 状态。

    2.我在项目中包含了 Boot Rom 符号、如下所示:这是正确的吗?

    属性-->包含选项>/home/ti/C2000Ware_2_00_00_02_Software/libraries/boot_rom/f2837xd/revB/rom_symbol_libs  

    3.您能向我提供从应用程序引导 ROM 和 USB 引导加载程序的函数调用的任何文档或任何线程吗?

    谢谢、此致、

    瓦拉达帕瓦尼。

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

    您可以查看源代码。 TRM 中的引导 ROM 文档也很有用。

    将您拥有的符号库(.lib)包含在内、然后将#include "C1_bootrom.h"添加到源代码文件中、从而调用 USB 引导加载程序函数。

    该函数为 UINT32 USB_Boot (UINT16引导模式)。 它位于 USB_Boot.c 中

    不使用引导模式参数、因此您可以向其传递任何所需的内容。 正如您在源代码中看到的、这个函数将配置 AUXCLK、然后在 ROM 中运行 USB 引导加载程序。 然后、您应该能够枚举主机并建立 USB 连接以使用 USB 闪存编程器。

    SAL

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

    您好 Sal、

    我们从应用程序调用 USB 引导加载程序、如下所示。

    EntryAddr = USB_Boot (USB_boot);

    但无法启动 USB 引导加载程序。  在使用 CCS 进行调试时,我们注意到由于 USB 模块未启用,USB_Boot()函数返回 FLASH_entry_point。 下面是 USB_Boot 函数的代码片段。

    //如果 USB 模块未启用,则绕过引导加载程序

    IF (DevCfgRegs.DC12.bit.USB_A == 0)
    返回 FLASH_entry_point;

    在这里,我的查询是如何在从应用程序调用 USB_Boot()之前启用 USB 模块?

    谢谢、

    瓦拉达帕瓦尼。

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

    您使用的是 F28377还是 F28379? 您的器件型号是什么? 它有 USB 吗?

    由于您使用的是调试器和 CCS、因此可能无法启用 USB。 复位后、您可能不会通过引导 ROM 运行、因此 c1brom_device_config()函数不会从 c2brom_boot.c 文件中的引导 ROM 执行。

    因此、在您的最终应用中、您可能不需要启用 USB、但对于您的开发、您可以自行向 DC12寄存器写入数据。

    DevCfgRegs.DC12.bit.USB_A = 1;

    希望这对您有所帮助、

    SAL

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

    您好 Sal、

    从我的应用程序调用 USB_boot 后、我们可以在设备管理器中看到 USB 设备(F28x7x USB 引导加载程序)。

    DevCfgRegs.DC12.bit.USB_A = 1;
    uint32_t EntryAddr = USB_Boot (USB_boot);
    返回 EntryAddr;

    但我们无法使用 usb_flash_programr.exe 刷写我们的新固件

    usb_flash_programr.exe F2837xD_usb_flash_kernels_cpu01.dat blinky_cpu01.dat。

    我们是否在这里遗漏了任何东西?

    请找到以下屏幕截图和错误消息。

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

    您是否能够使其正常启动到 USB 引导加载程序?

    我建议您先使其工作、然后开始创建您的解决方案。 这将帮助您调试问题。

    SAL

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

    您好 Sal、

    器  件能够进入 USB 引导加载程序。并且在从应用程序调用 USB_Boot()后、在器件管理器中检测到 F28x7x USB 引导加载程序。

    使用命令行  usb_flash_programr.exe -l 枚举成功。

    仅执行设备检查

    制造商:德州仪器(TI)

    产品 ID:TMS320F28X7X USB 引导加载程序

    序列号:2.

    固件 usb_flash_programr.exe 的闪存如下所示、在此传输 过程中、F2837xD_usb_flash_kernels_cpu01.dat 成功、但闪存  new_image.dat 失败。 请查看以下日志。

    usb_flash_programr.exe F2837xD_usb_flash_kernels_cpu01.dat new_image.dat

    制造商:德州仪器(TI)

    产品 ID:TMS320F28X7X USB 引导加载程序

    序列号:2.

    正在从文件  F2837xD_usb_flash_kernels_cpu01.dat 发送14206字节数据... 完成!

    已发送14206个字节中的14206个字节

    成功!

    枚举设备接口时出错:0x0103
    这可能意味着设备未连接或驱动程序未安装
    错误:无法打开 USB 设备

    从应用方面来说、我们是否缺少任何东西? 除了 USB_Boot(),我们是否需要初始 化任何内容?

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

    您好!

    我认为您不需要做任何不同的事情?

    您能否确认内核完全链接到从 RAM 加载和运行?

    您能否确认您的闪存应用程序已完全链接到从闪存加载和运行?

    您是否通过使用 EMU 引导程序引导至 USB 引导加载程序使解决方案正常工作? 我想知道、在引导至闪存、然后从您的应用程序引导至 USB 引导加载程序时、您是否已使 DFU 解决方案正常工作。

    SAL

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

    您好!

    此外、请尝试通过 CCS 加载内核并自行运行、并与 PC 应用程序连接、仅加载闪存应用程序.dat 文件。

    请告诉我这是否可行。

    SAL

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

    您好 Sal、

    您能否确认内核完全链接到从 RAM 加载和运行?
    是的,但这是关于 F2837xD_usb_flash_kernels_cpu01.dat 吗?

    您能否确认您的闪存应用程序已完全链接到从闪存加载和运行?
    您能 不能再详细说明一下这一点吗?

    您是否通过使用 EMU 引导程序引导至 USB 引导加载程序使解决方案正常工作? 我想知道、在引导至闪存、然后从您的应用程序引导至 USB 引导加载程序时、您是否已使 DFU 解决方案正常工作。
    是的、下面是我们为仿真启动到 USB 引导加载程序所遵循的过程。

    1.使用开关设置连接目标11.

    2.打开存储器浏览器并使用0x0C5A 更新存储器位置0xD00。

    3.然后将 USB 从 PC 连接到 F2837xD 控制卡顶部的 Micro USB 端口。

    4.按 CCS 上的 CPU Reset and run 按钮。

    5.在主机 PC 控制卡上,设备管理器中检测到"F28x7x USB 引导加载程序"。

    6.在主机 PC 中执行了以下命令,并能够刷写新的固件。
    "usb_flash_programr.exe F2837xD_usb_flash_kernels_cpu01.dat new_image.dAT"

    此外、请尝试通过 CCS 加载内核并自行运行、并与 PC 应用程序连接、仅加载闪存应用程序.dat 文件。

    我们尝试通过 CCS 加载内核(F2837xD_USB_FLASH_kernels_cpu01),它正在运行,但在主机 PC 上显示为“未知 USB 设备”。

     

    谢谢、

    瓦拉达帕瓦尼。

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

    如果您能够在使用 EMU 引导模式时使该解决方案正常工作,我不能确定在调用 Boot ROM USB_Boot()函数时它为什么不起作用。

    我的意思是、您的闪存应用应该完全链接到闪存、因为 USB 内核默认不能对 RAM 进行编程。 无论接收到什么数据、它都使用闪存 API 进行编程、因此只对闪存进行编程。

    这可能是你的问题 调用 USB_Boot()后,函数将返回而不是分支到内核的入口点。 您需要分支或对从 USB_Boot()发送并返回的内核入口点进行函数调用。

    SAL

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

    您好 Sal、

    是的、USB_Boot 返回的入口点似乎有问题。  

    我们修改了 blinky_cpu01固件、下面是代码片段。

    uint32_t gpio46_value = GPIO_readPin (46);
    if (gpio46_value = 1)//检查 USB 是否已连接。

          //USB 与主机 PC 相连。
          DevCfgRegs.DC12.bit.USB_A = 1;
          EntryAddr = USB_Boot (USB_boot);//调用 USB_Boot 函数。
          返回 EntryAddr;

    上述函数调用是否足够或需要调用任何其他函数以分支到入口点?


    我们已将 ROM 符号包含在项目中。

    项目属性-->构建-->文件路径-> C2000链接器”中添加了以下路径“ti/C2000Ware_2_00_00_02_Software/libraries/boot_ROM/f2837xd/revB/rom_symbol_libs/c1_rom_api/F2837xrevB_c1bootrom_BootROMSymbols_fpu32.lib”

    向工程添加了以下文件。
    shared_Boot.c
    USB_Boot_funcs.c
    USB_Boot.c
    USB_Structs.c
    从以下位置“/ti/C2000Ware_2_00_00_02_Software/libraries/boot_rom/f2837xd/revB/rom_sources/F2837x_bootROM/cpu01-bootROM/source”

    在调试期间、我注意到 USB_Boot fucnion 返回的 EntryAddr 为0x00000000。 是这样吗?

    我有什么问题吗?

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

    我对你在做什么有点困惑...

    我认为您是从应用程序调用 USB_Boot 的。 以下是您应采取的步骤。

    1A -器件)从您的应用程序调用 USB_Boot。

    1b -主机)使用 USB 闪存编程器将内核加载到器件中。

    2A -器件)分支至入口点。 这将分支到您刚刚加载到 RAM 的内核。 入口点可能为0x00000000。 这将执行闪存内核。

    2B -主机) 使用 USB 闪存编程器加载闪存应用。

    3 -器件)内核将在完成后分支到闪存应用程序的入口点。

    SAL

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

    您好 Sal、请在线查看我的回复。

     

    我认为您是从应用程序调用 USB_Boot 的。 以下是您应采取的步骤。

    是的、我们从应用程序调用 USB_Boot 函数。

    1A -器件)从您的应用程序调用 USB_Boot。

    设备:检查与主机的 USB 连接并在应用程序中调用 USB_Boot 函数。

    1b -主机)使用 USB 闪存编程器将内核加载到器件中。

    主机:使用 USB 闪存编程器加载内核、如下所示。 我在这里包括了 USB 闪存编程器的日志。

    usb_flash_programr.exe F2837xD_usb_flash_kernels_cpu01.dat new_image.dat”

    usb_flash_programr.exe F2837xD_usb_flash_kernels_cpu01.dat new_image.dat

    制造商:德州仪器(TI)

    产品 ID:TMS320F28X7X USB 引导加载程序

    序列号:2.

    正在从文件 F2837xD_usb_flash_kernels_cpu01.dat 发送14206字节数据... 完成!

    已发送14206个字节中的14206个字节

    成功!

    枚举设备接口时出错:0x0103
    这可能意味着设备未连接或驱动程序未安装
    错误:无法打开 USB 设备


    从上面的日志中可以看出,当 USB 从设备中移除并刷写 应用程序失败后,“F2837xD_USB_flash_kernels_cpu01.dat”似乎正在加载到设备中。

    2A -器件)分支至入口点。 这将分支到您刚刚加载到 RAM 的内核。 入口点可能为0x00000000。 这将执行闪存内核。

    USB_Boot 函数调用后、是否需要调用任何函数以分支到入口点?

    2B -主机) 使用 USB 闪存编程器加载闪存应用。

    3 -器件)内核将在完成后分支到闪存应用程序的入口点。

    由于内核加载后 USB 器件从主机中移除、因此加载闪存应用程序失败。

    谢谢、

    Pavani

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

    是的、需要在内核加载后分支到入口点。 您没有2a。

    SAL

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

    您好 Sal、

    感谢您的支持。 我们能够通过 CPU1闪存上的 USB 对固件进行升级。

    现在、我们尝试通过 USB 更新 CPU1和 CPU2闪存。  我们已参考 与 CPU 闪存的 USB 固件升级相关的线程之一。 以下是链接。

    我在这里提到了所有映像的构建配置。

    F2837xD_USB_flash_kernel_cpu01.dat--双路

    F2837xD_usb_flash_kernels_cpu02.dat ---- RAM

    BLINK _直流_CPU1.dat--CPU1_FLASH_ONstandalone

    BLINK 直流 CPU2.dat--CPU2_FLASH。

    使用上述二进制文件时、我们尝试更新以下命令中所示的固件。但失败。请检查日志。

    usb_flash_programr.exe F2837xD_usb_flash_kernels_cpu01.dat blink_dc_cpu1.dat F2837xD_usb_flash_kernels_cpu02.dat blink_dc_cpu2.dat

    制造商:德州仪器(TI)
    产品 ID:TMS320F28x7x USB 引导加载程序
    序列号:2.

    从文件 F2837xD_USB_FLASH_kernel_cpu01.dat...发送17166个字节的数据 完成!
    发送的17166字节中有17166字节
    成功!
    制造商:德州仪器(TI)
    产品 ID:TMS320F2837xD USB 引导加载程序
    序列号:2.

    正在从文件 Blbing_dc_cpu1.dat...发送9268字节的数据
    发送批量传输时出错:0x0079
    在9268字节中发送256个字节
    USB 操作失败!
    由于使用我们构建的二进制文件进行固件升级失败,我们已尝试使用您共享的二进制文件。

     从上面的线程中,我们已经下载了 dual2.zip,我们使用了该线程中的二进制文件,它可以正常工作。因此,我的查询是,我们需要在 USB_flash_kernels 的项目属性中添加任何内容吗? 或者我们是否遗漏了任何东西?

    谢谢、

    PAPAPAANI。

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

    您好、Pavani、

    我将无法专门为您进行调试。 如果您提供更多详细信息并启动调试过程并提供更新、我将更好地为您提供帮助。

    为了帮助进行调试、您可以尝试加载 CPU2内核并使用 CCS 运行它、然后使用 PC 工具将 CPU2闪存应用加载到它。 然后您可以看到器件正在执行什么操作。

    但是、您无法刷写 CPU1映像、因此需要在此处开始调试。 从这个开始、然后您可以再次在这里发布您找到的内容。

    SAL