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.

[参考译文] MSP430F5638:如何控制或了解用于USB的2K RAM,如何分配和使用

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430F5638, MSP-FET

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/583333/msp430f5638-how-to-control-or-know-2k-ram-for-usb-how-to-allocated-and-used

部件号:MSP430F5638
主题中讨论的其他部件: MSP-FET

你(们)好

我的MSP430F5638 USB正在工作,但USB COM端口有时无法建立连接。或者用户(如PC)请求MSP430F5638无法获得。  PC和设备识别USB COM端口,连接PC的编辑器发出声音,MSP侧的LED闪烁。  我不知道为什么请求不能传递到MSP,专家告诉我看到USB使用的2K RAM。 它可能无法分配内存空间, USB需要它。但我不知道在哪里可以看到或调试所使用的2K RAM USB。有人知道如何操作吗?  

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

    您是否询问如何使用IDE通过USB查看RAM中的内容(例如 CCS,IAR等)或您是否询问如何分配内存?

    此致,

    詹姆斯

    MSP客户应用程序
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,
    我使用IAR作为开发工具。
    案例1:在JTAG调试期间,从IAR连接它,USB端口工作正常,第二天插入USB时,设备通宵使用电池供电时,保持与PC的通信。

    案例2:但是,如果JTAG连接关闭,设备由电池供电,并且固件在夜间运行,则设备USB端口在第二天早晨插入USB时不再与PC通信。

    我需要解决此问题,以便使产品可用。 您对如何调试它有什么建议吗?

    我可以做的事情:我可以打开/关闭LED灯,或者在运行期间切换LED和内部日志事件,并从其他UART端口访问事件。如果设备重置,则无法调试,然后通过USB再次开始与PC通信。 我认为不在第节中重置设备和调试是非常困难的。 运行固件与JTAG调试固件相同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,James:
    我有兴趣使用IAR查看USB RAM中的内容,了解2K USB内存如何仅用于USB,以及如何在运行过程中分配2K内存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Louis:

    当您单击IAR中的“下载和调试”按钮时,您可以停止调试器以查看RAM的内容。 在IAR中停止时,您可以转到"查看"->"内存",然后在弹出的"内存"窗口中,将下拉框从"内存"更改为"RAM"以查看RAM。

    我想我已经开始理解您的问题了。 您是否说设备USB端口仅在连接到活动调试会话时工作? 通常,当存在活动的JTAG连接时,设备的计时会发生变化。 此外,调试会话可能会阻止您的设备进入低功耗模式(LPM)。 因此,它会保持与PC的USB通信处于活动状态。 但是,如果您输入禁用影响USB模块的时钟/模块的LPM,我可以看到在您不调试时这会阻止通信的位置。

    我假设您有两个USB连接到该设备:一个用于通过具有MSP-FET的JTAG进行调试,一个用于设备USB接口(例如 D+,D-)。

    此致,

    詹姆斯

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

    您好,James:

    带有USB的设备和设备由电池和USB供电,初始设备打开电源,插入和拔下USB时,所有设备上的USB通信都可以正常工作。 但是,如果拔下USB,请保留电池供电的设备,运行日志时间,某些设备可能会在夜间运行, 其中一些可以在周末运行。 其他一些可以运行多天,在多天或长时间运行后,如果没有连接USB,请重新插入(连接) USB,USB通信将无法正常工作。 USB到PC的连接可以始终打开。 它可以从PC设备管理器或固件中看到,设备的LED会亮起。   


    根据您的建议,当USB到PC连接打开时,不要进入LPM,USB有电源线,设备不再需要LPM。  

    从USB_connectionState()可以判断连接是否打开。只有当设备没有USB连接时,才会进入LPM。  在我的测试案例中,在使用电池运行多天的过程中,设备进入LPM3以节省电池电量,当USB连接或USB_connectionState()返回ST_ENUM_ACTIVE,不再进入LPM时,我理解您的错了吗?  昨天的固件测试,设备固件进入LPM0 我测试了7个设备,但都没有出现故障。 当USB_connectionState()返回 ST_ENUM_ACTIVE时,您认为我应该删除PLM0吗?  USB_connectionState()返回 ST_ENUM_IN_PROGRESS,它不在LPM中。  请您确认我做了什么对或错。 请您给我更多建议。

    路易  

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

    您好,Louis:

    这是有道理的。 根据 用户指南中的42.2 部分,MSP430F5638上的USB模块仅支持在电源模式活动模式(AM/),LPM0和LPM1期间的活动操作。 这就是您在使用LPM0而不是LPM3时没有任何失败的原因。

    因此,我建议您继续使用LPM0。 如果您必须使用LPM3来节省功耗,我建议您定期唤醒设备以检查是否有USB连接。 显然,这不允许您立即检测USB连接,并且会有一些延迟。 我不确定这对您的应用程序是否重要。

    希望这能有所帮助!

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,Louis:

    我只是想告诉大家,我也在与Paul合作,在下面的主题中讨论这个问题。 希望我们能为您双方解决此问题!

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,James:

    有三种应用案例。

    1. USB未连接,设备使用电池运行,固件位于LPM3中,但USB端口硬件已准备就绪,可供使用或连接。  

    2.检测USB是否已连接,但枚举正在处理中,设备是否通过USB电源运行,电池是否已连接。 固件位于AM中

    3.检测USB是否已连接。 ENUM已激活,设备使用USB电源运行,电池也已连接,固件位于LPM0或AM中

    在周末测试期间,我的4台设备中的设备最多为1台,星期一早上,4台设备(每次一台为2和3台),我的4台设备都能正常工作。 但我的同事有3台设备,其中两台无法正常工作,一台工作正常。 他使用相同的固件映像

    我的问题是在情况1中,设备应该在LPM0或LPM3中。  您上周五的建议是什么。 如果设备计划使用USB,则该设备应位于LPM0或LPM1中,是否正确?

    如果正确,这是对解释为什么一些装置工作,其他装置不工作,如果装置工作,它总是工作,如果它不工作,无论插入和拔下USB多少次,USB通信都不工作。  USB无法正常工作,很难根据我所了解的情况进行解释。  

    请告诉我您的建议是什么?  如果1个设备应保留在LPM3或LPM0 / LPM1中,以便在用户再次插入USB时保持USB连接再次工作。  

    路易

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,James:
    从用户指南的42.2 部分中,注意:USB模块仅支持在电源模式AM至LPM1期间的活动操作。

    USB模块,USB端口已连接或未连接无关紧要。

    如果固件/用户计划使用USB模块,则MSP430f5638不能在上述LPM2中,这是正确的理解吗?

    路易
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Louis:
    如果您尚未解决问题,Programrs_Guide_MSP430_USB_API.pdf的6.4 and 6.5 部分中列出的项目可能会有所帮助。 本指南是MSP430USBDevelopersPackage的一部分。 由于您的设备始终由电池供电,并且应用程序始终在运行,因此您可能需要更新应用程序,以便在通过USB重新连接到主机时触发事件。

    此外,如果上述建议不起作用,您也可以设置设备的远程唤醒功能。 请参阅6.9 部分。 如果在设备中设置了此功能,则您还必须在Windows端启用此功能。

    最后,您还可以验证descriptors.h文件中USB_support_self_powered的设置是否也设置正确。

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

    还有一件事。  以下 是应用手册的链接,该手册使用电池并在USB和电池之间切换。   

    www.ti.com/lit/pdf/slaa529

    此致,

    Arthi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Arthi Bhat,
    此项目没有执行USB API级驱动程序的程序资源。只有两个或三个功能接口与设备固件一起使用,即USBCDC_handleDataReceived(),cdcSendDataInBackground()和USB_connectionState()。此外,它可能会导致更多问题。另外,2.21 驱动程序是USB.USB 0.39。

    系统基本正常工作。问题是USB通信不能在所有设备上都正常工作,例如10台设备,在夜间运行后(其中一些设备), USB通信工作正常,可能是设备的70 % ,而30 % USB在夜间运行后无法通信示例在上周末测试的8台设备,6台工作,2台不工作。如果再连接一台设备, 它可能不起作用或可能起作用。因此,问题在于使100 % 全部正常工作所做的更改。有信心将设备发送给用户使用。如果您让我再次查看API,这可能会追溯到很远的程度。

    James告诉我,LPM0和LPM1的外观是固定的方向。我只想和他确认一下。但是,您会建议看看API来改变这一点。 我没有时间这样做,也没有资源这样做。您需要与James沟通,获取其他计划来解决问题。

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

    路易

    您需要单击底部的"后退"箭头以查看上一页上的答复。 当有许多回复时会发生这种情况。

    此致,

    詹姆斯

    MSP客户应用程序

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

    我们还没有解决这个问题。  我们将检查您的建议。

    此外,Slau280P在42.2 部分有一个注释,指出“USB模块仅支持在电源模式AM至LPM1期间的活动操作”。  这是否表示我们需要在插入USB电缆之前处于LPM1或更高版本?  或者,这是否意味着我们必须在检测到USB后切换到更高的模式?

    谢谢你。

    此致,

    保罗

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

    您好,Paul:

    这意味着您需要在检测到USB后切换到更高的模式。 在我们的代码示例中,在USB_getConnectionState()状态机中切换到ST_ENUM_ACTIVE案例时,通常会立即执行此操作。

    而(1)
    {
    Switch(USB_getConnectionState())
    {
    案例ST_ENUM_ACTIVE:
    __bis_sr_register(LPM0_bits + GIE);//输入LPM0
    Function_is_USB_active();
    中断;
    案例ST_PHY_DISCONNECTED:
    案例ST_ENUM_Suspended:
    案例ST_PHY_CONNGED_NOENUM_SUSP:
    __bis_sr_register (LPM3_bits + GIE);//输入LPM3
    Function_is_USB_inactive();
    中断;
    默认值:;
    }
    } 

    我看到Louis在上面提到,主板的70 % 通过了测试,而主板的30 % 失败了。 这种行为使我怀疑主板之间存在硬件问题。 如果出现软件问题,我希望所有主板都能通过或失败。 此外,在您观察到的故障期间,您看到PC上的设备管理器中列举了该设备,但该设备无法通信,对吗? 了解上面的哪个案例陈述最终会出现这种情况会很有帮助。

    考虑到这一点,为USB PLL采购什么XT2? MSP430 USB API程序员指南中的11.2 3节介绍了PLL参考的几个重要要求。 如果XT2使用了晶体,则第11.2 5节讨论了负载电容器的重要性。 确保它符合数据表中指定的要求。

    第12.2 章节1中有一些很好的地方可以帮助我们缩小此问题的范围。

    • 检查硬件是否有任何缺失。 请参阅 使用MSP430TmMCU开始USB设计 应用手册中的示意图。
    • 发生故障时,检查XT2上的时钟频率是否可用。 不要直接探测振荡器,而是将XT2发送到SMCLK或ACLK输出引脚并在那里探测。
    • 检查振荡器是否存在故障。
    • 确保正确处理中断。 常规中断可能会在某处被禁用。

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,James:

    我们在检测到USB时从LPM 3切换到LPM 0,并在完成USB通信时切换回LPM 3。

    当主板不通信时,PC始终会识别端口。  我们从计算机获得设备连接声音,并且设备管理器中显示了正确的端口。

    Louis公司的30 % 数据是针对那些立即刷新并测试过的主板的。  重新刷新后,它们都能正常工作。

    问题1:如果PC始终检测到端口,这是否意味着USB振荡器始终在启动?

    问题2:我们正在使用 MSP430USBDevleopersPackage_3_20_00。   我们知道有一个较新的版本,但我们担心 升级会造成其他问题。  这是否会导致我们的问题?

    谢谢你。

    保罗


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

    您好,Paul:

    感谢您提供更多详细信息。 30 % 故障的行为非常奇怪。 我不知道为什么只需重新刷新设备就会有所帮助,除非编程过程中数据发生了某种程度的损坏。

    如何对设备进行编程? 您使用的是哪种调试器(例如MSP-FET)? 您使用的是哪个界面(例如 BSL,4线JTAG,2线SBW)? 您能否提供详细的步骤,包括编程和测试?

    例如,假设您通过2线SBW对设备进行编程,设备由MSP-FET供电。 编程完成后,假设您断开MSP-FET与主板的连接,电池将为主板供电。 然后,假设你通过USB将主板插入PC,它被枚举,由VBUS供电,你可以在主板和PC之间传递数据。 然后,假设您等待3天,主板仅使用电池供电,不会发生断电事件。 然后,通过USB将设备重新连接到PC,主板现在由VBUS供电,设备在PC上枚举,但无法接收数据。

    其他一些问题:

    • 当板通过USB (而不是JTAG接口)连接到PC时,电池电源是否随时关闭?
    • 在几天内执行此测试时,JTAG连接是否处于活动状态?
    • 您能否向我们发送您的设备管理器的屏幕截图? 理想情况下,它将显示两个COM端口(一个用于JTAG连接和USB CDC连接)。
    • 在旧设计中,此代码用于此(假定)新设计的情况下,是否有任何变化?

    Paul Mayer 说:
    问题1:如果PC始终检测到端口,这是否意味着USB振荡器始终在启动?[/QUOT]

    正确。 当枚举发生并且PLL/振荡器以正确的频率工作时,可以在设备管理器中看到设备。

    问题2:我们使用 的是MSP430USBDevleopersPackage_3_20_00。   我们知道有一个较新的版本,但我们担心 升级会造成其他问题。  这是否会导致我们的问题?[/QUOT]

    这不应导致问题。

    最后,我建议您在测试此问题时不要保持活动的调试会话。 相反,请将打开各种状态LED的代码放置在设备枚举但不发送数据后,找出代码结束的状态。

    感谢您耐心等待我们解决问题。

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,James:

    我们有两种方法对板进行编程:JTAG和我们自己的GUI (通过COM端口(USB,48.5232万))。

    通过JTAG编程时,我们使用MSP-FET工具,并使用IAR工具或MSP闪光灯软件。

    我们已让该装置在插入调试器的情况下运行,并使用另一台计算机通过USB进行测试。  这种做法从未失败。

    以下是详细步骤:

    1.使用JTAG和软件将固件闪存至MSP430。 装置仅由JTAG供电

    2.拆下闪光灯。  设备断电。

    3. 连接外部电源(电池)。  装置通电。

    4.打开GUI。  连接USB。  GUI检测USB并识别端口。  使用GUI上的驱动程序下拉菜单选择端口。

     5.建立联系。  使用GUI设置操作参数,单位,时间等

    6.从计算机上拔下USB电缆。  设备现在仅使用电池运行。  关闭GUI

    7.等待2-3天。  打开GUI。  连接USB电缆。 设备被枚举。 PC轮询装置。  无响应。

    电池始终保持打开状态。  关闭电源后重启始终会使通信恢复。

    JTAG在运行几天后不处于活动状态。

    我们在几天内进行了一次测试并进行了活动调试会话,没有出现故障。

    设备管理器端口的屏幕截图如下所示:

    谢谢你。

    保罗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Paul:
    那么,您是否说过在几天后JTAG通信出现问题? 您的GUI在哪个端口上通信? 如果是箭头所示的COM8,则该通信正在JTAG上进行。 USB堆栈3_20_00是外设端USB的代码。 更新和更改USB堆栈3_20_00以修复JTAG通信问题将不起作用。 根据设备管理器,它看起来像COM14所示的外设端CDC设备被枚举。 您的GUI能否在该端口上与设备通信?


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

    我们的问题是,在没有JTAG,USB,没有通信的情况下,设备仅使用电池电源运行,几天后插入USB将无法通信,即使枚举总是发生。

    JTAG没有任何问题。 仅USB。

    谢谢你。

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

    您好,Paul:

    我们不确定您为什么看到设备出现不一致的结果,在某些情况下,设备工作正常,而在其他情况下,直到您重新刷新设备时,设备才会出现。

    我在上一篇文章中发送的链接指向一个应用说明,您可以从中下载代码,说明如何使电池供电+ USB供电设备在每个 USB状态下工作。  它可能值得一看,并根据 您的应用进行调整。  

    由于您看到枚举但设备 与GUI之间没有通信,我假定设备处于活动状态以外的其他状态。 要确定USB状态的确切位置,可能可以在每个USB状态下使用不同的闪烁速率来执行闪烁LED。   确定卡滞状态后,您可以实施类似 以下代码的操作以使其解除卡滞:

     

    案例ST_USB_CONNUSTED_NO_ENUM:
    	//我们打开USB并连接到总线
    	如果(usb_enable()== kusb_s晒){
    	USB_RESET();
    	USB_CONNECT(); //在DP上生成上升边缘->主机将我们的设备枚举为全速设备
    	}
    	enu_in_prog =真;
    	enable_sleep =假;
    中断; 

    此致,

    Arthi