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.

[参考译文] TM4C1233H6PGE:所需管道上 USBD_STATUS_STALL_PID 的说明

Guru**** 2482155 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/717399/tm4c1233h6pge-explanation-for-usbd_status_stall_pid-on-the-in-pipe-needed

器件型号:TM4C1233H6PGE

大家好、

我们使用 TI 微控制器 TM4C1233设计了定制板。
微控制器的 USB 模块可通过一个输入和一个输出管道编程为大容量器件。
电路板固件的 USB 部分基于 TI Tiva 批量示例、PC 端使用 WinUSB 驱动程序之上的 Lmusb.dll 接收数据。

PC 应用程序使用以下行接收数据:
dwError = ReadUSBPacket (MainForm->husb、szBuffer、sizeof (szBuffer)、&ulRead、450、 null);

问题是接收器通常超时、然后电路板在输入管上报告 USBD_STATUS_STALL_PID 条件。

有人能解释一下、如果使用 Tiva USB 库函数 USBDBulkPacketWrite、会导致管道内失速的条件是什么?

每个提示都将得到批准。

微控制器标记为:
980日元 F
TM4C1233
H6PGEI
38AK3TW
G4

非常感谢您的参与

此致

Nils

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

    我很难根据所介绍的内容提供任何反馈。 USBDBulkPacketWrite API 调用两个 driverlib API、即 USBEndpointDataPut 和 USBEndpointDataSend、这3个 API 之间没有明确的停止位置。 相反、如果 USBDBulkPacketWrite 无法传输数据、它可能会返回"0"。 这可能是什么情况? 但我对如何/何时调用该函数并不了解、因此无法判断该函数是否是发布该堵转的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

    非常感谢您的快速传输!

    以下是有关我们问题的幻灯片概述:

    上述控制器位于分析器件中、通过 CAN 总线控制传动器、传感器和从 PCB 它收集状态信息并通过 USB 将其发送到控制软件。 我们的问题是、在客户安装3-4周后、40%的主板显示所描述的 USB 失速行为。 这里的奇怪之处在于、它是一个不断变化的系统、因此、有时我们会进行有效的通信、有时控制器会停止发送数据。

    在我们确定此原因的过程中、我们已经进行了以下测量:

    1.观察 USB 总线与示波器。 Peakshape 很好。 当我们看到控制器没有通信时、我们看到 PC 的"ping"看起来很好、因此我们认为到控制器的硬件是可以的。

    2.已检查系统时钟和电源。 它们在 USB 超时期间非常稳定。

    3.已检查 CAN 总线从机是否超时、但这些从机按时发送数据。

    4.已使用 Microsoft Message Analyzer 记录 USB 通信。 我们在这里看到了"失速"情况。

    我们的软件设备采纳了您的建议、并在 API 中进行了调查、USB 库源代码显示、这三个 API 函数确实受到了良好的防护、不会被滥用。

    我们现在开始怀疑写入 EEPROM 的情况。 在写入 EEPROM 期间、处理器不会从程序闪存取指令。 但是 EEPROM 写入是否会停止或干扰 USB 模块状态机的运行?

    非常感谢您的参与。

    此致

    Nils

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

    Nils、您好!

    很抱歉、您迟迟未能回复、有大量信息需要消化、并想对其进行一些详细介绍。 不幸的是、我也没有任何真正的答案。

    关于 EEPROM、我花了一些时间来查看 EEPROM 功能以及与之相关的勘误表、我看不到 EEPROM 写入会影响这一点的任何方式。 我有了您的思路、但 EEPROM 不应阻止 USB 工作、除非您的固件专门针对您的系统进行定制。

    前一位专家认为、出现失速的原因是:

    功能停止:器件无法发送或接收数据、并在主机成功收到控制请求响应时清零

    2.协议停止:当主机发送不受支持的控制请求,如错误的 Set Configuration (设置配置)。

    我想我们可以排除2。 因为分析仪捕获结果会很清楚、对吧? 因此、我们将功能失速作为唯一的原因。 也就是说、从您的所有测试和我所看到的结果来看、现在发现根本原因非常困难、所以我至少想尝试讨论一下我们还需要寻求哪种解决方案。

    发生失速时、您是否必须完全复位外设才能使其恢复运行? 如何使器件再次发送数据? 我记得、在某些情况下、器件会"卡在"失速模式下、如果这是真正的问题、那么这将是我可以尝试的并有助于解决的问题。

    按照这些思路、该问题的可接受解决方案是什么? 这个问题是希望在发生时能够非常快速地恢复、还是要完全避免失速发生?

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

    您好、Ralph、

    首先、感谢您付出的巨大努力!

    我们能够根据您的想法解决我们的问题。 这就是我们最终得到的结果:

    我们的定制板充当中间人:它每200ms 通过 CAN 总线从传感器接收一次测量结果、对其进行重新包装并通过 USB 大容量连接发送到 PC。 CAN 总线没有问题、数据包定期无延迟到达。 但是、在 PC 上、接收器有时会在450ms 后超时。 Microsoft 消息分析器显示、IN 管道当时报告了 USBD_STATUS_STALL_PID 条件。

    WeDID 通过首先命令 Tiva 与 USB 断开连接(输出管正常工作)并在一段时间后再次连接来使通信再次进行。 这种在 PC 上强制重新枚举、最终通信被恢复。 然后、我们尝试在 WinUSB 驱动程序的 IN PIPE 策略上打开 AUTO_CLEAR_STALL 选项、这种方法的工作速度要快得多。 但超时问题仍然存在。

    该文书还必须记录它工作了多少小时。 这一记录必须能够承受仪器断电的影响。 决定将此记录写入 EEPROM 并每半小时更新一次。

    我们在固件中发现了编程错误- EEPROM 写入频率更高(大约每秒一次)。 在连续使用几周后、EEPROM 写入时间明显增加到足以阻止传感器数据包传输并导致 PC 超时。 纠正错误后、电路板运行正常。

    秘书长的报告

    EEPROM 写入频率过高似乎是真正的原因、因为:

    1、新电路板最初 正常工作。 运行几周后将出现超时。 最初更换电路板会有所帮助、然后在几周后会返回超时状态。

    2.将超时值从450ms 更改为210ms 使超时在我们从现场返回的一个电路板上更频繁地出现。

    3.上述电路板在修复的固件上正常工作,如果再次使用原始固件进行编程,则会返回超时。

    我将向您转达我们在塔林开发人员的最诚挚问候和非常感谢。

    我们目前正在现场等待更多的"有缺陷"的电路板、看看这是否适用于所有电路板。

    来自德国的最佳评价

    Nils Müller

    我们的定制板充当中间人:它每200ms 通过 CAN 总线从传感器接收一次测量结果、对其进行重新包装并通过 USB 大容量连接发送到 PC。 CAN 总线没有问题、数据包定期无延迟到达。 但是、在 PC 上、接收器有时会在450ms 后超时。 Microsoft 消息分析器显示、IN 管道当时报告了 USBD_STATUS_STALL_PID 条件。

    WeDID 通过首先命令 Tiva 与 USB 断开连接(输出管正常工作)并在一段时间后再次连接来使通信再次进行。 这种在 PC 上强制重新枚举、最终通信被恢复。 然后、我们尝试在 WinUSB 驱动程序的 IN PIPE 策略上打开 AUTO_CLEAR_STALL 选项、这种方法的工作速度要快得多。 但超时问题仍然存在。

    该文书还必须记录它工作了多少小时。 这一记录必须能够承受仪器断电的影响。 决定将此记录写入 EEPROM 并每半小时更新一次。

    我们在固件中发现了编程错误- EEPROM 写入频率更高(大约每秒一次)。 在连续使用几周后、EEPROM 写入时间明显增加到足以阻止传感器数据包传输并导致 PC 超时。 纠正错误后、电路板运行正常。

    秘书长的报告

    EEPROM 写入频率过高似乎是真正的原因、因为:

    1、新电路板最初 正常工作。 运行几周后将出现超时。 最初更换电路板会有所帮助、然后在几周后会返回超时状态。

    2.将超时值从450ms 更改为210ms 使超时更频繁地出现(在上周四您带到塔林的板上)。

    3.上述电路板在修复的固件上正常工作,如果再次使用原始固件进行编程,则会返回超时。

    我认为,我们应该感谢雅各比先生的努力,并结束了论坛主题。

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

    这是非常有趣的行为。 根据描述、我本来希望问题的发生速度比几个月快得多。 您的帖子还会进一步模糊我的存储器、我希望分享这篇文章、其中介绍了一些 EEPROM 写入操作、这对于了解未来的发展可能很有帮助: e2e.ti.com/.../940674

    感谢您再次提出解决方案、很高兴我的反馈能够提供一些帮助!