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.

[参考译文] MSP430F5510:USB键盘接口在一段时间后不工作

Guru**** 2589280 points
Other Parts Discussed in Thread: MSP430F5510, MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/615917/msp430f5510-usb-keypad-interface-is-not-working-after-some-time

部件号:MSP430F5510
主题中讨论的其他部件: MSP430F5529

大家好,

  我正在使用USB协议将定制键盘与MSP430F5510连接起来。 我正在使用下面的GitHub中提供的参考示例链接:

但是键盘按键一直都在正常地进行,直到一段时间。控制器随机挂起(从意义上说,它不是从睡眠中出来的),所以不会发生键盘按键。我尝试了很多方法来实现它。 但在调试模式下,我尝试了小时和调试过程。 我当时没有任何挂起。一旦我删除了调试器,我将单独尝试,那一次我就遇到了这样的问题。

有时即使是一整天都能用,但到了第二天就会死机,请给些建议

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

    您好,

    感谢您的帖子。 您能否分享您正在使用的USB API版本? 另外 ,我不确定GitHub链接是否包含 来自使用MSP430Tm微控制器的USB键盘的未经修改的源代码 ,因此我建议尝试我们的代码,看看问题是否仍然存在。 您可以从下面的链接下载它。

    根据您的描述,设备似乎没有正常唤醒。 在调试模式下,我怀疑调试会话阻止设备休眠,从而阻止CPU关闭。 可能GitHub中的代码未正确处理USB状态。

    此致,

    詹姆斯

    MSP客户应用程序

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

    为了让我们的社区受益,这个问题似乎与以下主题中的问题有关。

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好Raj,

    该代码在进入休眠状态之前禁用所有中断,因此,按键时程序不会退出休眠模式。   您可以通过以下两种方法之一解决此问题: 在 TI_USBKBD_MAIN.c文件中注释掉__disable_interrupti(),或者在进入睡眠状态之前添加__enable_interrupti(),条件是:

    如果((TI_USBKBD_Report_CanSleep()== true_t))

    此致,

    Arthi  

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

    感谢您的宝贵回复。 还有一些问题...
    1)如果这可以解决我的问题,那么在进入睡眠状态之前,在启用中断的情况下,代码如何执行几个小时?
    2)此外,我仅使用UNMI_ISR。 它不可屏蔽。无论中断屏蔽寄存器设置如何,它都可以随时中断。 我对这一点不是很确定,你可以纠正我这一点。
    但非常感谢您的建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Arthi和James

     我发现了代码被卡住的问题。 我从usbhid_sendReport例程获得kUSBHID_intfBusyError状态。例程usbhid_sendReport在TI_USBKBD_Report_Update()例程中调用。

    我还在3.5 sec.9的Lauchpad用户指南中找到了一些关于这个问题的讨论。我附上了下面的链接。

    MSP430F5529 LaunchPadTm开发套件用户指南

    根据讨论,我无法移除和插入与主机的USB连接,因为它是固定布局轨道连接。 那么我如何才能用软件设计本身来明智地处理这个错误。 分享一些有关这方面的建议。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果此kUSBHID_intfBusyError是实际问题,那么正常键盘如何工作而不出现任何停止问题? 有没有什么缺点要摆脱这种情况???
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Prithvi,

    设备似乎保持在接口忙状态,即使在发送报告后也不会脱离此状态。  所以我注意到在文件usbEvenHandling.c中调用usbhid_handleSendCompleted()的函数总是返回FALSE。  您是否可以将其设置 为始终返回true并查看这是否有帮助。  设置为true时,设备将退出睡眠模式。

    此致,

    Arthi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Arthi,
    非常感谢您的回答。 我找到了其他的选择。如果我在While循环中的TI_USBBD_Report_Update()例程中看到kUSBHID_intfBusyError,在While循环中,我将看门狗密码冲突重置为我的微控制器并开始我的所有USB初始化。 这样,我就可以与主机通信,而无需在设备中执行电源循环。 但是,我当时错过了一个按键。
    这不是大问题。 我尝试了你在最后回复中所说的,但我无法解决。 无论如何,谢谢你Arthi和James
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Arthi和James,
    我还需要你们的帮助。 在这里,我成功完成了我的项目。但是,在编程时,需要花费太多的时间来编程。我发现原因是因为该项目是基于COFF的项目。如果我的项目是elf项目,那么它只需要不到5秒的时间来编程。

    我尝试了以下步骤。
    1.我在项目属性中将COFF更改为ELF (常规)选项,它使我在调试过程中创建的临时文件中遇到错误。
    2.然后我将Driverlib更改为最新的driverlib,因为我认为driverlib是用于coff支持。
    3.然后,它影响了不了解定义的USB API,因此我更新到最新的API,
    4.然后所有错误都消失了,我根据新的usb430更新了函数名称。
    但是,现在没有错误,但在调试时,MSP430没有向主机发送键值。并且在TI_USBKBD_Report_Update()上首次调用函数调用(usbhid_sendReport())时返回usbhid_send_complete;
    第二次调用时,usbhid_sendReport()仅返回usbhid_interface_busy_error。该代码只在所有时间停止。
    是否有任何简单的方法可以将正在工作的COFF项目更改为具有16.9 4或4.4 5编译器支持的ELF项目?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Prithvi Raj,

    不确定您在这里要做什么。  但是,我认为返回到基于ELF的项目的一个简单方法是 重新下载MSP430USBDevelopersPackage并 导入用于启动应用程序的项目,或者从资源管理器下载示例。  然后,您可以将应用程序代码复制到示例中。  driverlib和USB API将被设置回原始API。

    此致,

    Arthi