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 控制卡。 我们能够使用 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、
请参阅 C2000软件控制的固件更新过程以了解更多详细信息: 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。
使用上述二进制文件时、我们尝试更新以下命令中所示的固件。但失败。请检查日志。
从上面的线程中,我们已经下载了 dual2.zip,我们使用了该线程中的二进制文件,它可以正常工作。因此,我的查询是,我们需要在 USB_flash_kernels 的项目属性中添加任何内容吗? 或者我们是否遗漏了任何东西?
谢谢、
PAPAPAANI。
您好、Pavani、
我将无法专门为您进行调试。 如果您提供更多详细信息并启动调试过程并提供更新、我将更好地为您提供帮助。
为了帮助进行调试、您可以尝试加载 CPU2内核并使用 CCS 运行它、然后使用 PC 工具将 CPU2闪存应用加载到它。 然后您可以看到器件正在执行什么操作。
但是、您无法刷写 CPU1映像、因此需要在此处开始调试。 从这个开始、然后您可以再次在这里发布您找到的内容。
SAL