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.

[参考译文] TM4C123GH6PM:通过 USB 记忆棒实现固件更新

Guru**** 2511985 points
Other Parts Discussed in Thread: TM4C123GH6PZ, EK-TM4C1294XL, TM4C123GH6PGE, TPS2052B

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/760070/tm4c123gh6pm-implement-firmware-update-by-usb-stick

器件型号:TM4C123GH6PM
主题中讨论的其他器件:DK-TM4C123GTM4C123GH6PZEK-TM4C1294XLTM4C123GH6PGETPS2052B

尊敬的:  

  我想使用 USB 记忆棒进行固件更新。 下面是我的电路图。 引导代码我在 TivaWare 中的 dk-m4c123g 中使用了 USB_stick_update。

我特别注意我的应用程序代码和设置中的应用程序星形地址0x4800  
但是、当我在上电时按下按钮(端口 F.4)时、程序似乎已输入引导代码、但没有响应。 请提供建议。

谢谢、此致

廖利奥  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果器件仅包含"USB_stick_update"中的代码、它是否会从 USB 记忆棒加载应用代码? 您可以使用 JTAG 检查0x4800处的闪存是否为空、之后是否包含代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

      我发现 DK-TM4C123G 的 USB_stick_update 使用 PL6 (USBDP)和 PL7 (USBDM)、  

    但是、我选择的 MCU TM4C123GH6PZ 没有 PL6和 PL7。

    我尝试修改 TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c123g\USB_stick_update 的 ConfigureUSBInterface()

    已从 PL6.PL7更改为 PJ0.PJ1  

    仍然不工作、请提供建议

    蓝色字是我的修改内容

    此致
    廖利奥

    无效
    配置 USB 接口(空)

    //
    //启用 uDMA 控制器并设置控制表基址。
    //此为 usblib 所必需的。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UDMA);
    uDMAEnable();
    uDMAControlBaseSet (g_sDMAControlTable);

    //
    //启用 USB 控制器。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_USB0);

    //
    //将 USB 引脚设置为由 USB 控制器控制。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
    ROM_GPIOPinConfigure (GPIO_PG4_USB0EPEN);
    ROM_GPIOPinTypeUSBDigital (GPIO_PORTG_BASE、GPIO_PIN_4);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
    ROM_GPIOPinTypeUSBAnalog (GPIO_PORTJ_BASE、GPIO_PIN_0 | GPIO_PIN_1);
    ROM_GPIOPinTypeUSBAnalog (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);

    //
    //注册主机类驱动程序
    //
    USBHCDRegisterDrivers (0、g_ppHostClassDrivers、NUM_CLASS_DRIVERS);

    //
    //打开海量存储类驱动程序的实例。
    //
    G_psMSCInstance = USBHMSCDriveOpen (0、MSCCallback);

    //
    //初始化电源配置。 这将设置电源使能信号
    //为高电平有效且不使能电源故障。
    //
    USBHCDPowerConfigInit (0、USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER);

    //
    //在模式发生更改后,强制 USB 模式成为主机,而不进行回调
    //不应该有任何。
    //
    USBStackModeSet (0、eUSBModeForceHost、0);

    //
    //等待10ms 以使引脚变为低电平。
    //
    SysCtlDelay (SysCtlClockGet ()/100);

    //
    //初始化主机控制器。
    //
    USBHCDInit (0、g_pHCPool、HCD_MEMORY_SIZE);

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

    它在什么硬件上运行? 定制板? LaunchPad?

    您是否已建立 USBID 和 VBUS 连接、以便 TM4C 能够在主机模式下运行? 您能否验证 VBUS 电压?

    从 API 的角度来看、这两个调用应该就足够了、因为 USB0VBUS 和 USB0ID 仍在端口 B 上、USB0EPEN 仍在端口 G 上
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ralph:

      我发现我使用的电源开关(AP2141)的控制极性不正确、修改后的电路如下、我也尝试连接  

    直接 USB0ID 和 USB0VBUS、 仍然失败、 我将我测量的波形放在网页上、 看看您是否能给出建议。  顺便说一下、USB0VBUS 和 USB0ID (EK-TM4C1294XL)之间不存在短路

    EK-TM4C1294XL (正确)  

    USB0VBUS 和 USB_DM

    我们自己的原理图(误差)  

    USB0VBUS 和 USB_DM

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

    我今天出差、所以今天我无法详细了解这一点、明天我将向您提供一些反馈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Leo 您好、

    很抱歉、看一下您的原理图、我不得不说我不熟悉 AP2141。 但即使如此、我也不明白为什么您需要在它上面使用 BJT。 它在建议的原理图中未显示任何类似的内容。

    如果您绕过 AP2141、USB 是否正常工作? 我认为 AP2141是造成这种情况的根本原因、而且由于它不是 TI 器件、因此我提供的反馈有限。

    如果您确实看到、当 AP2141被旁路时 USB 工作正常、 我唯一可以提出的建议是、我将根据 AP2141规范以及 USB 2.0规范研究该信号的时序、并确保在您进行修改后能够正常工作。

    此外、我还会要求您参考我们的系统设计指南、并验证有关原理图、布局等的所有建议、这些建议均已针对您的系统提供: www.ti.com/.../spma059.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

       在 DK-TM4C123G 和 EK-TM4C1294XL 的开发板中、有一个 USB VBUS 负载开关 TPS2052BDRB、您应该知道此 IC 的用途、因为我们公司有许多 AP2141WG 库存、所以功能与 TPS2052BDRB 相同。 仅控制电源输出引脚的极性不同、因此为其添加了 BJT。

        您之前建议的 USB0VBUS 和 USB0ID 需要连接在一起、绕过 AP2141WG、我尝试过但失败了

       最后、我附上原理图和代码、希望您能找到有效的解决方案。

     
    因为 DK-TM4C123G 中的代码 USB_stick_update 正在使用 TM4C123GH6PGE、但我正在使用
    TM4C123GH6PZ、蓝色字是我修改的内容

    无效
    配置 USB 接口(空)

    //
    //启用 uDMA 控制器并设置控制表基址。
    //此为 usblib 所必需的。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UDMA);
    uDMAEnable();
    uDMAControlBaseSet (g_sDMAControlTable);

    //
    //启用 USB 控制器。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_USB0);

    //
    //将 USB 引脚设置为由 USB 控制器控制。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
    ROM_GPIOPinConfigure (GPIO_PG4_USB0EPEN);
    ROM_GPIOPinTypeUSBDigital (GPIO_PORTG_BASE、GPIO_PIN_4);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
    ROM_GPIOPinTypeUSBAnalog (GPIO_PORTJ_BASE、GPIO_PIN_0 | GPIO_PIN_1);
    ROM_GPIOPinTypeUSBAnalog (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);

    //
    //注册主机类驱动程序
    //
    USBHCDRegisterDrivers (0、g_ppHostClassDrivers、NUM_CLASS_DRIVERS);

    //
    //打开海量存储类驱动程序的实例。
    //
    G_psMSCInstance = USBHMSCDriveOpen (0、MSCCallback);

    //
    //初始化电源配置。 这将设置电源使能信号
    //为高电平有效且不使能电源故障。
    //
    USBHCDPowerConfigInit (0、USBHCD_VBUS_AUTO_HIGH | USBHCD_VBUS_FILTER);

    //
    //在模式发生更改后,强制 USB 模式成为主机,而不进行回调
    //不应该有任何。
    //
    USBStackModeSet (0、eUSBModeForceHost、0);

    //
    //等待10ms 以使引脚变为低电平。
    //
    SysCtlDelay (SysCtlClockGet ()/100);

    //
    //初始化主机控制器。
    //
    USBHCDInit (0、g_pHCPool、HCD_MEMORY_SIZE);

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

    稍等、我没有说 USB0VBUS 和 USB0ID 信号应该连在一起!!

    这一点绝不应该这么做。

    USB0VBUS 连接到 USB 连接器并为 USB 器件供电。

    USB0ID 也连接到 USB 连接器、有助于根据 USB 规范确定插入的 USB 器件类型。

    它们从未连接在一起。

    您尝试使用的电源开关旨在防止热插拔情况下的电流过大、因此我的想法是临时绕过电路、仅测试电路是否有问题、 这实际上意味着不使用 USB0EPEN 和 USB0PFLT 来控制器件的电源、而是直接通过 VBUS 供电。 不过、这似乎并不容易实现、因此我有一种替代的调试方法。

    您可以执行的另一项测试是监测 LaunchPad 上 TPS2052B 的 USB0VBUS、USB0ID、USB0EPEN、USB0PFLT 信号以及电压输出、并将其与您的系统进行比较。 这可能表明这些信号中的一个或多个不是以相同的方式工作、并提供有关可能是什么根本原因的见解。

    此外、在原理图上的电源开关主题上、应使用 USB0VBUS 作为输入、而不是5V。

    最后、我将再次询问您是否已经查看过系统设计指南文档? 对于 USB、需要遵循许多非常关键的布局要求、您必须验证此电路板是否遵循这些要求、否则您将无法使 USB 正常工作。 有关此功能的链接再次为: www.ti.com/.../spma059.pdf