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.

[参考译文] TMS320F28377D:28377D USB 引导加载程序

Guru**** 2535750 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/735585/tms320f28377d-28377d-usb-bootloader

器件型号:TMS320F28377D
Thread 中讨论的其他器件:controlSUITE

尊敬的团队:

我的一位客户正在开发 USB 引导加载程序。 到目前为止、他们正在测试控制套件中的示例代码、该示例代码位于"C:\ti\controlSUITE\device_support\~Utilities\USB_flash_programmer"中。

根据 “f28027Xd_fw_upgrade_example.txt” ,我们可以:

1) 1) 在    USB 引导 模式下引导 F2837xD (请参阅 contents.txt、 "启动  MCU")
2) 2) 将 USB 从 主机 PC 连接 到 F2837xD。
3) 3)从  主机 命令行 :
        usb_flash_programr.exe  F2837xD_usb_flash_kernels_cpu01.dat  blinky_cpu01.dat

参考“context.txt” ,我们有:

启动 MCU:
复位 MCU、然后使用调试器将0x0C5A 写入引导模式选择地址(0xD00)。
从复位矢量运行以启动 USB 引导加载程序。 将 MCU 连接到 PC。

因此、它们连接了 MCU、加载了"F2837xD_USB_FLASH_kernels_cpu01"、并将0x05CA 连接到0XD00。 然后 CPU REST-->重新启动-->运行。

接下来、使用 USB 将 MCU 连接到 PC、可以找到未知器件:

尝试运行"usb_flash_programr.exe -l "、出现错误:

问题:

1)他们是否按照正确的程序来执行示例代码? 如何正确地“从   复位 矢量运行 以 启动  USB 引导 加载程序”?

2)是否与通过内存浏览器写入0XD00并运行 EMUKEY 和 EMUBMode 相同? 我认为应该是一样的。

3)是否可以在 PC 上加载 USB 驱动程序而不插入或拔出 USB 电缆?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    以上帖子是我的客户提出的问题。 以下是我的一些想法:
    1) 1)我认为没有必要在"Boot the F2837xD in USB Boot Mode (在 USB 引导模式下引导 F2837xD)"是否正确时加载任何代码?
    2) 2)写入0xD00后、复位前 CCS 是否需要任何配置? 复位后、PC 中应该有什么值?
    3) 3)在28379D launchpad 上,是否需要配置任何跳线来激活 USB?

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

    您好、Weiqi、

    有很多问题... 我将尝试做出适当的回应。

    1) 1)似乎遵循了正确的程序。

    2) 2)是、将0x0C5A 写入0xD00存储器地址。

    3) 3)我不确定这个问题是否有意义。

    4) 4) ROM 包含一个 USB 引导加载程序。

    5) 5)写入0xD00将导致器件在复位时引导至 USB 引导加载程序模式。

    6) 6)否

    请使用随附的这些更新的驱动程序。

    此致、

    SAL

    e2e.ti.com/.../windows_5F00_driver.zip

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

    您好、Sal。

    我尝试更新上面附加的 Windows 驱动程序、但它没有什么不同! 仍存在"未知设备"。 我的 PC 是 Win7 64位系统。 我还将 此方法重新设置为无效 。我调试了"F2837xD_USB_FLASH_kernels"示例、在 RAM 中运行、将 USB 电缆连接到 PC 时、如果在此处插入断点、调试器将在"UsbIntHandler"中停止。  USB PIN 配置正确、但 USB Windows 驱动程序出错。

    我尝试了更多、并配置了在闪存中运行的示例"F2837xD_USB_FLASH_kernel"。  其结果如下:

    我使用上面的 zip 文件更新其驱动程序、然后  器件在设备管理器中显示为"F28x7x USB Boot Loader (F28x7x USB 引导加载程序)"。 正确配置!

    但 这种现象使我感到困惑  :“未知设备”仍在 USB 引导模式中被识别(将0x0C5A 写入地址0xD00)。

    有关问题2的更多详细信息:在 CCSV7中进行调试时、EMUKey 在0xD00寻址、EMUBMode 在0xD01寻址;将0x 0C5A 写入0xD00将把 EMUKey 更改为0x0C5A、但 EMUBMode 没有改变。您能解释一下吗?

    然后我在    命令行中执行"usb_flash_programr.exe F2837xD_usb_flash_kernels_cpu01.dat blinky_cpu01.dat"、出现错误:

    其他问题:如何在 RAM 中运行 F021_Flash_API?

    我修改了 Cmd 文件、插入:

    FLASH_API:

       -l F021_API_F2837xD_FPU32.lib//(.text)
    }负载= FLASHA,运行= RAMGS0,
    Load_start (_F021_API_LoadStart)、
    RUN_START (_F021_API_RunStart)、
    Size (_F021_API_RunSize)、
    PAGE = 0、ALIGN (4)

    但是 、当在"F2837xD_USB_FLASH_kernels"项目中执行 Init_Flash_Sectors 函数时、程序会运行到非法 ISR。

    这种配置是否适合在 RAM 中运行的闪存 API、以及如何在错误时进行配置?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "F28x7x USB Boot Loader (F28x7x USB 引导加载程序)"是正确的设备驱动程序。 如果它出现在设备管理器中、则表示这是正常的。

    我不知道您的问题是关于 EMU 引导密钥和引导模式的什么。 您似乎正在正确执行该操作、这就是引导加载程序正在运行并连接到 PC 的原因。

    我不理解您对闪存 API 的问题。

    使用 F2837x USB 引导加载程序时、请确保使用的是 REV C 器件。 USB 引导加载程序的 ROM 中有错误修复。 该错误存在于器件的早期版本中。

    请使用最新的 controlCARD。

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

    您好、Sal。

    只有当我在闪存(入口点:0x80000)中运行"F2837xD_USB_FLASH_kernels_cpu01"示例时、才会显示"F28x7x USB 引导加载程序"、当我通过将0x0C5A 写入0xD00 (带仿真器、复位 MCU 和启动)来强制 MCU 从 USB 引导加载程序运行时、"Unknown Device"。 我验证 MCU (TMS320 F28377DZWTT YFC_65C13ZW)是否为 REV C 芯片。因此 ROM 中的 USB 引导加载程序和 Windows 驱动程序有什么问题。

     当"F2837xD_USB_FLASH_kernels_cpu01"程序   运行到"InitFlash() 函数中时、它进入"非法 ISR"。 我该 如何处理例外情况?

    闪存 API 问题:能否 从 FlashA 加载 F021_API_F2837xD_FPU32.lib 并在 RAM 上运行?

    如  上所示修改 Cmd 文件。 它是否配置正确、以及如何在发生错误时进行配置?

    谢谢。

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

    内核应从 RAM 运行。 我不确定引导加载程序有什么问题。 我们没有遇到过这样的问题。 在引导加载程序运行时正确安装驱动程序后、它应显示为 USB 引导加载程序。

    内核链接为从 RAM 运行。

    在闪存应用程序中、您可以放置闪存 API、但在执行闪存 API 时、必须在将其复制到 RAM 后从 RAM 执行它。

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

    尊敬的 Sal 和 Yang:

    我已使用您提供的最新驱动程序验证 USB 引导模式。

    在我自己的计算机上、在我重置 MCU 后、计算机无法识别 USB。  即使是未知设备也不会出现。

    但是、在我的同事的计算机上、USB 引导可以成功运行。

    我很确定我们遵循了相同的过程、并且我们使用的是 TI 提供的同一台计算机(Win10 64位)。

    请告诉我如何在计算机上启用 USB? 也许 Yang 可以尝试使用另一台计算机。

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

    尊敬的王先生:

    我在办公室计算机和我自己的笔记本电脑上都尝试了相同的过程。 它都在设备管理器中显示"未知设备"。 它们的系统是 Win7 64位。 我还在另一台 win8 64位笔记本电脑上试用过、没有区别。 可能是我应该尝试更多。

    谢谢。

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

    更新的驱动程序支持 Windows 7、8和10。

    我不确定问题可能是什么。 您都使用控制卡吗? 还是定制板? 如果 USB 连接器和原理图部分正确、器件应显示在器件管理器中。

    我们已经能够对控制卡进行认证、以便原理图符合标准并正常工作。

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

    我在我自己的产品控制板中测试它、因此这可能是问题所在。控制器和连接器之间存在一个抗浪涌芯片(NUF2221W1T2G、作为 Attachmente2e.ti.com/.../NUF2221W1T2G.pdf)。请参阅下图、该抗浪涌芯片的阻抗(Rs)为22欧姆、  MCU 在此设计中能否正常工作。如果您需要更多详细信息 来做出判断、请通知我、  如果可以访问、我将尽快提供相关信息。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不熟悉这种类型的浪涌保护器。 但我建议这可能是问题。

    请查看 f28x7x 的 ccard 原理图。 这将对您有所帮助。

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

    尊敬的王和 Sal:

    现在、我可以访问将 MCU 配置 为 F28x7x USB 引导加载程序、它运行良好。非常感谢。

    但是 、当我为我自己的项目自定义 USB 引导加载程序时、 会出现下面列出的一些其他例外情况。

    首先、当我添加另一个 USB loaderEndpointDescriptor 时、插入以下代码:

    const sUsbEndPointDescriptor loaderEndpointDescriptionor1 =
    {
    USB_DTYPE_END<<8 |(2*sizeof (sUsbEndpointDescriptor)-1)、
    {
    1、1、//Endpoint1、在类型中
    2、0、0、0//批量模式传输
    }
    64、
    0
    } 

    这些代码在我的计算机识别 EP1中的批量和批量输出 EP1.我使用以下代码将数据从 MCU 发送到 PC:

    //从 USB 端点1发送数据
    void TxDataEp1 (const UINT16 *数据、UINT16 length8、eDataEnd dataEnd)
    {
    uint16 c;
    //启用 endpoint1方向作为 TX
    //将数据写入 FIFO
    中(c = 0;c < length8;c++)
    {
    USBREG8 (u_O)}(* out_byte
    
    
    );//将数据写入 FIFO 中(c = 1)。 如果没有更多数据、请设置结束位。
    USBREG8 (USB_O_TXCSRL1)=(dataEnd == USB_END_DATA)? (USB_TXCSRL1_TXRDY | USB_TXCSRL1_SETUP):USB_TXCSRL1_TXRDY;
    //将端点1方向启用为 RX
    
    } 

    但是、当我使用"winusb driver lib"读取 USB Pipe 时 、它不返回任何内容。 定制 USB 驱动程序的过程是否 遵循正确的方式? "TxDataEp1"函数有什么问题?

    另外、 当我在 MCU 中运行闪存内核并以  asci8十六进制类型向其发送程序数据时、F021闪存 API 运行良好、程序加载到 MCU。但 当它在复位后运行时、当程序进入"ILLEGAL_ISR"时会发生异常。 我使用 不同 的工具比较不同情况下的闪存数据,一种使用 XDS200U 调试器加载数据,另一种使用 F021闪存 API 通过 USB 引导加载程序加载数据。 位于地址0x097FFE 的存储器中只有一个差异、在 XDS200U 模式下显示"00 06 00 06"、而在 USB 引导加载程序模式下显示"FF FF FF FF"。 我已验证  十六进制文件中是否存在原始数据"00 06 00 06"。

    您能解释一下吗? 我真的很困惑。

     

    此致!

     

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

    请使用 USB 闪存编程器工具和 USB 批量主机示例 Visual Studio 项目作为主机 PC 编程的参考。 我不知道为什么您没有收到数据。

    很难说出差异是什么以及为什么不对一个位置进行编程。 这是否与非法 ISR 相关? 此外、您可以为 USB 闪存编程器修改 VS 项目、并在发送该地址和数据时设置断点、然后单步执行 MCU USB 内核以查看它对该数据执行的操作。

    您可能还需要确保您的闪存映像和段已与64位边界对齐。

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

    您好!

    在输入使用 F021闪存 API 对0x097FFE 地址进行编程时、我会按照您的建议细分 MCU 程序。  要在地址加载的32位数据。 如何将闪存部分配置为与64位边界对齐、cmd 链接文件中是否显示 align (4)配置良好?

    幸运的是、我通过以下方式解决了闪存问题:在更改 cmd 链接文件以重新生成十六进制文件后重新编译工程、使用自定义的 USB 引导加载程序加载到 MCU。 一切都很好!

    我将参考大容量主机示例尝试更多操作。  

    谢谢。  

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

    是的、您应该在链接器命令文件中使用 align (4)。

    在您修改代码后、它可能已通过链接修改的图像来对齐。 ALIGN (4)应该是确保它向前运行的一种方法。

    很高兴您能正常工作。 如果您有更多问题、请打开另一个主题、并验证我的回答之一以关闭此主题。

    谢谢、
    SAL