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.

[参考译文] CCS/MSP430F5529:断开/重新连接USB解决方法

Guru**** 2595770 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/637382/ccs-msp430f5529-disconnecting-reconnecting-usb-workaround

部件号:MSP430F5529

工具/软件:Code Composer Studio

大家好

我们的处理器上有一个引导加载程序(不使用BSL)和应用程序。 我们通过USB在我们正在使用的Windows C#应用程序中连接到设备,通过这种方式,我们选择要发送到bootloader的固件映像,以便刷新映像。 这一切都很好。

在引导加载程序中刷新映像时,引导加载程序将跳转到应用程序 在这里,处理器重新配置并继续运行,但我们失去了与应用程序的USB连接。

如果我们移除USB (从PC应用程序到嵌入式设备上的USB)并将其重新插入,USB将再次开始工作。 我们还可以进入设备管理器,右键单击MSP430 USB并禁用/重新启用以使其正常工作。

我们在c#应用程序中发布通信端口,还运行嵌入式中的库功能以释放USB。

我们使用以下命令进行初始化(在两个上):

USBHAL_initClocks(2400万);              //配置时钟。
USB_setup (TRUE,TRUE);                  //初始化USB和事件;如果存在主机,请连接

 我们以这两种方式结束:

      USB_disconnect();
    USB_disable();
    _disable_interrupts();
    sysctl &=~SYSRIVECT;            //关闭RAM中断
    ((void (*))) app_reset_vector)();//jump

当我们从应用程序转到bootloader时,我们使用BOR而不是Jump,因为我们的重置矢量始终位于bootloader中。  

             USB_disconnect();
       USB_disable();
       Brown_Out重置//这将导致BOR并启动引导加载程序

我们正在为MSP430使用最新的TI堆栈

问题是,我们如何保持或刷新USB连接,这样我们就不必物理断开连接并重新插入? 我认为这可能是车窗侧的问题,但我想先检查是否有办法在嵌入式侧执行此操作。 如果您需要更多信息,请告诉我。

谢谢。

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

    我使用自己的(CDC) BSL更新类似设备上的固件。 BSL更新完成后,PC端(Win / Linux / OSX)向MSP发送重置命令,并立即关闭串行(CDC)端口。 MSP通过WDT超时自动重置,并启动主应用程序,操作系统再次枚举主应用程序并准备就绪。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从理论上讲,断开和禁用USB模块应被视为主机断开连接。

    引导加载程序和应用程序之间有多长时间? 您是否可以尝试插入延迟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您迄今为止的回答。 在断开和重新连接之间,我确实出现了5秒的延迟,同样的情况也发生了。

    我相信现在可能是在窗户边。 我们在C#应用程序上有一个端口事件处理程序,因此当USB设备连接或断开时,它可以检测到它并采取适当的操作,它会侦听HKEY_LOCAL_MACHINE中的注册表项\\HARDEVICEMAP\\SERIALCOMM

    我们发现,当我们添加或删除USB设备(任何类型)时,将触发此事件,您可以在Windows注册表和设备管理器中看到连接出现(连接)和消失(断开连接), 但奇怪的是,TI MSP430 USB连接-断开连接后,它将从“设备管理器”中删除,而不是从Windows注册表中删除,这是唯一的情况。 这就是我们没有重新连接的原因,因为没有看到断开连接。

    我对Windows驱动程序的了解不是100 % ,所以如果我错了,请纠正我的问题,但我认为这可能是TI的串行通信驱动程序未正确注销或我们的C#应用程序未完全释放它的问题。 已在Windows 7和10上对其进行了测试。

    我们将继续尝试并随时为您提供最新信息。

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

    您应该 注册设备通知 以获取 WM_DEVICECHANGE 消息。

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

    只是一个更新,我们发现注册表中的条目在某种程度上是重复的。 这似乎是我们无法控制的,我们不知道为什么会发生这种情况,但我们现在通过在C#应用程序中执行两个端口断开来解决此问题。 然后,成功检测端口的断开连接和重新连接。

    感谢您对设备通知的建议,这可能是一种更有效的方式,但不幸的是,由于用户PC上的权限受限,我只是嵌入式工程师,应用工程师希望保持C#应用程序中的状态, 但不管怎样,它现在仍然在工作。

    再次感谢。