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.

[参考译文] TM4C123GH6ZRB:USB CDC 器件上行流量控制信令

Guru**** 1079480 points
Other Parts Discussed in Thread: EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/983739/tm4c123gh6zrb-usb-cdc-device-upstream-flow-control-signaling

器件型号:TM4C123GH6ZRB
Thread 中讨论的其他器件:EK-TM4C123GXL

您好!

我正在使用 TivaWare 2.1.4.178 USBLib 实现具有两个 CDC 子器件的 USB 复合器件。

数据从 CDC 器件通过 USBBuffer、然后通过 UART1、使用 UART 控制器上的硬件流控制从 UART1流出。 反之亦然。

如果控制管路 CTS 有效、USBBuffer 将满、数据流将停止。 如果这种情况持续很短的时间、当 CTS 线路被置为无效时、数据流将正常恢复。 但是、由于我的实施方案的限制、UART 会在很长一段时间内将其 CTS 线置为有效、从而阻止数据通过 USB 进入和通过 UART 流出。

当这种情况发生时、我发现 USB 主机不断重新发送相同的数据、同时增加它尝试发送的数据包的大小。 当 CTS 线路最终释放并且数据流可以继续时、USB 堆栈无法处理它接收到的巨大数据包、数据输出仅重复数据包的第一部分。

我想知道向主机发送数据流已停止的信号的 API 是什么、即:CTS 已置位、希望主机停止反复重试同一数据包。

此致、

Pedro Serra

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

    您好!

     我将让我们的 USB 专家就您的问题发表意见。  

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

    您好、Pedro、

    [引用 USER="Pedro Serra72">当这种情况发生时,我发现 USB 主机不断重新发送相同的数据,同时增加它尝试发送的数据包的大小。 [/报价]

    这听起来像是 USB 主机出现了问题。 我没有听说过这种情况。

    使用 USB 时、器件将 NAK 一个尚不能接收到的封装。 这将触发主机重新发送相同的数据包、而不是向其添加更多数据。 NAK 告诉主机它没有接收到数据包、因此主机应该知道他们需要重新发送数据包。 我没有听说过主机实现将 NAK 作为向数据包添加更多数据的手段。 此外、还应根据 USB 标准限制数据包的大小、在我看来、主机可能会超过这些标准。 通常、对于 USB 全速模式、CDC 数据包通过配置为最大64字节大小的批量端点发送。 如果主机在一个数据包中通过一个批量端点发送64字节以上的数据、那么它肯定不遵循 USB 协议。

    没有一个 API 可以让主机停止发送数据、我可以想象的任何其他权变措施实际上就是从头开始重新启动 USB 连接。

    我认为您需要解决主机上的奇怪行为、并获取它、这样它就不会在 USB 总线上排队更多数据。

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

    您好 Ralph、

    感谢你的答复。

    [引用 userid="189615" URL"~/support/microcontrollers/other/f/other-microcontrollers-forum/983739/tm4c123gh6zrb-usb-cdc-device-upstream-flow-control-signaling/3634643 #3634643">通常、对于 USB 全速模式、CDC 数据包通过配置为最大64字节大小的批量端点发送。 如果主机通过批量端点在一个数据包中发送64字节以上的数据、则肯定不遵循 USB 协议。

    我的主机是使用 usbser.sys 驱动程序的 Windows 7或 Windows 10 PC。 我跟踪了64字节的最大数据包大小、并使用 usbview 确认了这一点。 我附加了描述符、因此您也可以进行确认。

    e2e.ti.com/.../usbview.txt

    在正常工作期间(CTS 未置位)、我使用 Device Monitoring Studio 监听总线。 即使在这种情况下、我在监听的数据包中看到的有效负载大小也是100字节、而不是先前定义的64字节。

    我是否缺少一些配置参数来将此"最大包大小"信息传递给主机? 或者、您是否怀疑 usbser.sys 驱动程序中存在错误?

    感谢你的帮助。

    此致、

    佩德罗

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

    您好、Pedro、

    很抱歉我耽误了回答。 自从您发表文章以来、我一直在讨论这一问题、但直到今天、我才有机会深入探讨这一问题。 根据我的调查结果、我不会认为 Windows 有这样的错误。 老实说、这个问题对我来说仍然没有任何意义、我以前也没有看到过类似的东西。 所有配置都正常...

    您是否可以通过任何方法来完成所做的工作并使其在 LaunchPad 上运行、以便我可以让项目重新创建它? 我有一个完整的 USB 分析器来检查整个数据包跟踪并查看问题的根源。 除了努力做到这一点之外,我也不知道现在应该提出什么建议。

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

    您好 Ralph、

    感谢您的支持。 我已经根据 TivaWare 中的 USB_DEV_serial 示例为 EK-TM4C123GXL LaunchPad 准备了一个示例代码。

    下面是我 创建的 CCS 项目文件夹。 正如我说过的、这个项目基于 USB_DEV_serial 示例、唯一的改变是我从 UART0切换到 UART1、并且在 UART1控制器中启用了硬件 RTS/CTS 流控制。

    e2e.ti.com/.../usb_5F00_dev_5F00_serial_5F00_ek.zip

     下图显示了我的设置的连接。 之后、FTDI TTL-232R-3V3和 USB CDC 器件都连接到测试计算机(运行 Windows 7)。

    我还抓取了一个屏幕录制文件、其中演示了问题: 屏幕捕获视频

    在视频中、我开始从 Tera Term 通过 USB CDC 器件从 UART1传输大量数据、然后进入 FTDI TTL-232R-3V3探针、显示在 Lower Yat terminal 窗口中。

    一位后、我手动将 FTDI RTS 线路置为有效(连接到 UART1 CTS 引脚)、并在一段时间内停止数据流。

    在上述 时间之后、我重新启用通信(取消 RTS 线路的有效)、并出现问题。 数据在接收端重复、Tera Term 窗口不显示任何进度。

    我在 Wireshark 捕获中确认、流入 USB CDC 器件的数据确实在重复。

    在我们的测试中、似乎 并非所有应用都出现了这个问题。 如果应用程序阻止对串行 COM 接口的写入、则没有问题。 但是、如果应用程序执行异步写入、 然后在超时后重新发送数据包、并且数据包非常大、那么我们就会遇到问题。

    感谢你的帮助。

    此致、

    Pedro Serra

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

    您好、Pedro、

    感谢您在此处提供的详细信息、这对于重新创建问题并了解触发问题所需的确切案例非常有帮助。

    我需要进入办公室、提前准备一个可用于此目的的 FTDI 探针、直到明天下午我才能够这样做。 我将在下周初的最后进行测试后继续跟进

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

    您好 Ralph、

    感谢您的所有支持。

    不幸的是、我即将离开 我的当前公司、这个项目今天是我的最后一天。 因此,我的两个联盟将在这个线程后面执行同一个项目。 他们的名字叫 Luís Oliveira 和 Nuno Ramos,他们将与他们保持联系。

    我们都很期待收到您使用 USB 分析仪得出的结果、我将确保至少在 该主题中保留有关 我自身好奇心的选项卡。

    再次感谢。

    希望稍后再讨论、

    Pedro Serra

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

    您好、Ralph、

    我关注这个项目。

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

    您好、Luis、

    我  今天能够获得硬件设置、但还没有准备好加载项目和测试。 我将看到我明天能为您带来什么初始结果。

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

    您好、Luis、

    我一直尝试复制此问题、但尽管使用了多个终端软件、但我无法观察到 Pedro 发送的项目上的 RTS/CTS 线路切换、因此我无法重新创建任何故障情况。 您能否检查所提供的项目、看看它是否为您的生成了 CTS/RTS、以及它是否发生了故障?

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

    您好、Ralph、

    为了控制和查看流控信号 RTS/CTS、我使用了一端子。 在手动 硬件控制上配置终端。 它在 TM4C 上´s uart1、在上进行 FTDI 流控制。

    手动模式控制允许更改状态 RTS 信号。

    数据流图

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

    您好、Ralph、

    如果您不控制 RX 器件上的 RTS 线路。

    尝试断开 uart1 (FTDI 探头)、这不是打开的终端(耗电元件)。 RTS 信号为高电平。

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

    您好、Luis、

    我尝试过多个终端程序,但看不到 CTS 切换。

    当我使用 Docklight 并切换至手动模式时、我会在该点获得 RTS 高电平。 但它会保持高电平、CTS 保持低电平、并且不会发生切换。

    端口似乎也不会通过。 当我在 UART1上发送时、它会回波。 在 USB CDC 上、它不断输出值、尽管我看到这些值存在差距、我无法判断这是否是有意输出的。 无论采用哪种方式、我都看不到从 UART1到 USB CDC 的数据流。 如果我断开其中一个、我可以看到、与两个连接时相比、它们独立且完全相同。

    这个完整的描述实际上与我所提供的项目不匹配。

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

    您好 Ralph、

    请确认我们的断言。

    TM4C FTDI
    PF1 (CTS) RTS (绿色)
    PF0 (RTS) CTS (棕色)
    PC5 (U1TX) RXD (黄色)
    PC4 (U1RX) TXD (橙色)

    请参阅:

    https://imgur.com/siG8feb

     检查 RTS 绿色电缆是否在 手动模式下为向下和向上信号。

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

    Tera Term configuration (开放式 CDC 串行器件):

    价格:115200

    数据:8位

    奇偶校验:无

    停止:1位

    流量控制:无

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

    您好、Luis、

    USB 端口的 Tera Term Configuration

    FTDI 端口的 Docklight 配置(取代 VAT)

    FTDI 线缆已验证连接。 我已经多次对此进行了审查。

    数据不会跨接发送。 我看到 USB 的 TeraTerm 上出现数据回显。 在 Docklight 上、如果我发送、它会回路。 TeraTerm 与 Docklight 之间没有传输。

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

    您好、Ralph、

    CCS 项目:

    e2e.ti.com/.../usb_5F00_device_5F00_serial_5F00_uart1_5F00_flowcontrol.zip

    请参阅 EK 状态 FTDI:

    LED RGB 状态
    绿色 接收器数据
    红色 RTS 高电平(停止)或 FDTI 未连接
    蓝色 发送器数据
    关闭 FDTI 连接

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

    您好 Ralph、

    正如 Pedro 提到的、我也关注这个项目。

    首先也是最重要的、感谢您迄今为止帮助我们解决此问题的时间和精力!

    到目前为止、我们注意到、当 CDC 类驱动程序的接收缓冲区(请参阅 TIvaware lib 中的图片)已满时、以及当 PC 仍在尝试发送更多数据时、如果未使用 Rx 缓冲区(通信处于完全停止状态)、  我们通过"器件监控"软件看到 Tiva USB 驱动程序发回一条消息、说状态为"已取消"、并且 PC 正在尝试传输 16kB 的突发(在像 Pedro 的视频中一样增大到最大值后)

    [引用 userid="348933" URL"~/support/microcontrollers/other/f/other-microcontrollers-forum/983739/tm4c123gh6zrb-usb-cdc-device-upstream-flow-control-signaling/3639344 #3639344"]屏幕截图视频[/quot]

    )、然后在 Tiva 的消息中的每个大容量之后。 我们期望在 CDC 类驱动程序的 RxBuffer 中的可用数据被消耗后、通信将正常恢复、但我们看到数据会不断重复。

    Pedro Serra72说:
    屏幕捕获视频

    我怀疑发生这种情况的原因 是 PC 不断重新发送这一巨大的数据突发、Tiva 无法处理、因此它会向 PC 发出"已取消"信号、而 PC 会不断重新发送同一个数据包。 请注意、对于我们迄今为止测试过的所有软件、只有 TeraTerm 才会发生这种情况。

    之前的测试说明旨在填充 CDC 驱动程序类中的接收缓冲区。 如上所述、如果 FTDI 未准备好接收任何数据、它将通过 CTS 线路发出信号、 当 CTS 线路被置为有效时、Tiva 上的 UART 不会将任何数据发送到 FTDI、而 UART 不能发送其自己的缓冲区填充、 这最终还会阻止 CDC 类驱动程序上接收缓冲区中的可用数据被消耗。

    为了在不手动将 CTS/RTS 置为有效的情况下重现此问题、请执行以下 步骤:
    请确保 Pedro 提供的代码在 Tiva C Launchpad 中运行。
    2.根据 Pedro 和/或 Luis 之前的帖子、在 Tiva 的 Uart1和 FTDI USB/TTL 设备之间建立连接。
    3.启动 TeraTerm,并为 Tiva 连接设置相应的 COM (COM+、115200、硬件流控制、8N1)。 但不要立即启动 FTDI 连接、如果需要、即使从 PC 上也要断开连接。
    4.传输一个长文件(至少100KB、一个 teste 文件可用"dataTest.txt")、只需简单地拖放一个文件即可
    5.等待缓冲区累积约一分钟。
    6.按照 Tiva 中 UART 的相同配置在 FTDI 端发起连接。
    7.确认数据本身重复。

    我们还进行了另一个实验、该实验旨在消除任何外部硬件或连接以及与任何其他外设的任何接口、即 UART 通信。  只需通过处理程序将 Rx 可用数据复制到 Tx 缓冲区、便可在 CDC 类驱动程序缓冲区中进行环回。 正如预期的那样、这会回传发送到 CDC 类驱动程序的任何数据。 由于不再有 CTS 或 UART 控制数据流、因此添加了额外的控制(软件)来重现上述问题。 软件现在控制对缓冲区的每次读取访问、并确定在每次读取之间应用一个简单的延迟、或者只是停止读取、直到用户命令它恢复读取。
    这些延迟旨在模拟数据传输的速度、因为停止条件旨在复制上述情况。 在本实验中、结果与之前相同、数据不断重复。
    当尝试延迟时、得出的结论是、对于低于2400波特的平均速度、数据将不再完整且数据重复。 随附了本实验的代码(请试用、自述文件中介绍了其功能)。

    还需要注意的是、对于其他串行终端软件、我们注意到总的数据包大小保持较低、软件会不断等待 Tiva 的"Ack"来发送下一个数据包。 因此、这个问题不会自我呈现。

    此致、
    努诺·拉莫斯

    e2e.ti.com/.../0257.usb_5F00_dev_5F00_serial_5F00_loopback.zip

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

    您好 Luis 和 Nuno、

    感谢您在此处添加了所有详细信息以及两个新项目。 这对阅读非常有帮助。 我没有机会运行您今天附加的项目、我将看到如何在明天完成项目并报告我的调查结果。

    我认为佩德罗附加的项目是回送版本、因为我在 USB 端口上看到的是恒定数据。 不清楚如何重新创建该版本的问题。

    了解如何触发文件传输问题并允许缓冲区累加对我非常有帮助、因此我将尝试这种方法。 我确实使用了 TeraTerm、因此我可以轻松地使用该终端软件进行具体测试。

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

    您好、Ralph、

    我忘记在上一篇文章中提到、在执行 USB 回送实验时、我们注意到、如果关闭通信(只是不访问 CDC 类驱动程序中的 Rx 缓冲器)、 然后开始以全速消耗 Rx 缓冲器中的可用数据 、尽可能快(无延迟)、通信最终会恢复自身、数据传输再次正常。

    此致、
    努诺·拉莫斯

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

    您好 Nuno、

    明天我将会尝试更多回送、因为我在 UART1流控制项目上看不到 CTS 发生移位。 我想我已经把那个人挂了一次,这样它就应该正常工作了。

    正如您所描述的、我花了一点时间才能实现另一个投影、因为发送文件必须来自 USB CDC Tera 术语、但我这么做后、 至少现在、我看到了从 USB 到 UART 的数据传输、这是我在原始项目上所期望看到的。 我认为、从项目终端的行为来看、Pedro Sent 项目可能是环回项目。

    遗憾的是、我还无法使用该项目重新创建故障、因此我将重点介绍回送。

    我所做的工作:

    • 已验证与 FTDI 的硬件连接
    • 加载了 Luis 提供的 UART_DEV_serial 工程
    • 从 LaunchPad 到 PC 的一个 USB 连接是 Stellaris ICDI 对 LaunchPad 进行编程
    • LaunchPad 与 PC 之间的一个 USB 连接用于 USB CDC 端口
    • 从 LaunchPad 到 PC 的一个 USB 连接是 UART1 FTDI 连接器、我将使用来自 FTDI 芯片的 TTL-232R-3V3-WE。
    • USB CDC 端口和 UART1 FTDI 的 TeraTerm 连接
      • 在两个端子上启用硬件流控制
    • 在拔下 FTDI 的情况下通过 USB CDC 端口发送文件、等待1-2分钟、然后插入
      • 在本例中、我确实看到 RTS 移位、但不看到 CTS 移位
      • 从 USB 发送到 UART1的数据

    因此、我不知道我在 USB 端等待缓冲区填充的时间是否不够长、或者是否有其他我不知道的事情发生在这个设置上。

    不管怎样、如果回送继续正常工作-或者、嗯、不能按预期正常工作、这应该会为我提供我需要进一步调试的内容、以了解 USB 通信为何挂起。

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

    您好、Ralph、

    您是否能够  使用 Tiva 上的 USB 回送程序重新创建故障?

    此致、
    努诺·拉莫斯

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

    您好 Nuno、

    我一直在尝试通过您的按钮配置在各种频率下使其失败、其中一些测试非常长、但我尚未看到故障。

    我一直在 Windows 10 Professional 笔记本电脑上使用 TeraTerm 进行所有这些操作。 TeraTerm 版本为 V4.95。

    我尝试了很多次来触发我之前看到的一个故障、因为在所有测试中、有一次我看到传输暂停、但我无法重新创建。

    由于这仅发生在 TeraTerm 中、并且我无法复制它、因此我想知道这是如何特定于系统的。 这种情况发生在多少台 PC 上? 使用哪个版本的 TeraTerm? 什么版本的 Windows 10?

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

    您好 Ralph、

    我运行的 TeraTerm 版本为 V4.93、Nut I 也更新为 V4.95、结果相同。

    我们还在运行 Windows 7 PRO 64位或 Windows 10  PRO 64位的5台不同 PC 上测试并确认了此行为。

    剩下的唯一要介绍的是驱动程序、但我也尝试了两个驱动程序、结果也是一样的。 一个驱动程序是 Tivaware 文件夹中提供的驱动程序、另一个是 Windows 通用 CDC 驱动程序。 但是、我在"usb_dev_serial.inf"文件(可从 TivaAware windows drivers 文件夹获取)中注意到、实际上它们应该是相同的、因为它们都使用 windows "usbser.sys"串行驱动程序、如果这里有问题、请更正我。

    请考虑运行此帖子中随附的更新代码以复制此故障、并按照以下步骤操作:

    连接 Tiva 加载并运行附加的程序、
    2.一旦程序在 Tiva 上运行、打开 TeraTerm 并打开 COM、终端现在应准备好输入数据。  
    3.在键盘中键入任何内容,并检查输入的数据是否回传。
    4.在 Teraterm 窗口中拖动文件(您可以在附加的 zip 文件中使用 TestFile.txt)以开始数据传输。
    5.启动数据传输10秒后,点击 Tiva 上的 SW1,检查 LED ONT Tiva 是否变为红色,如果不继续点击直到它发出:-)
    6.当 LED 为红色时,检查数据传输是否停止/暂停/停止,并检查 Terterm 是否仍然指示文件仍在传输,尽管数据速率正在降低。
    7.在 LED 变为红色后等待大约1分钟。
    8.现在单击 Tiva 上的 SW1 ,如果不继续单击,直到它出现,则再次将 LED 变为蓝色:-)
    9.到目前为止,TeraTerm 上看到的数据应该已经不停地重复。

    我希望这能帮助您重现我们的问题。

    非常感谢
    此致
    努诺·拉莫斯

    e2e.ti.com/.../8510.usb_5F00_dev_5F00_serial_5F00_loopback.zip

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

    您好 Nuno、

    正如您刚才所描述的那样、我已经能够重新创建问题、但我还没有能够详细调试-我将在下周预留时间进行调试、因为我们明天有一个假日。 感谢您提供最新的示例和清晰的说明、这将为我提供深入调查所需的内容。

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

    您好 Nuno、

    好消息和坏消息、但我想您会发现这主要是后者。

    好消息是、USB 接口似乎没有相关错误、我的 USB 分析仪没有发现任何违反 USB 协议的情况、也没有发现正在传输的100字节长的数据包。

    坏消息是、我无法跟踪循环问题的根本原因、尽管我在此时强烈怀疑它是特定于您的应用程序实现的。 我只是不是很熟悉把什么结合起来,真正地探出根本原因。

    关于整个问题与 CTS 信号停止传输有关、这似乎确实影响了这一点、而且这种影响是我不明白的。 我认为、使用 LeCroy USB 分析仪采集的 USB 分析仪捕获将对您有所帮助。 我要把它连接到这里。 查看 SOF 数据包时、请务必将其隐藏。

    USB 分析仪捕捉: e2e.ti.com/.../USB_5F00_UART_5F00_Loopback_5F00_CTS_5F00_Test_5F00_1.usb

    您将看到的是传输的前11秒、回路来回 ping。 似乎一方发送的内容比另一方多。 我会看到来自主机的输入事务比来自器件的输出事务大。 这让我想知道应用程序中是否存在积压。

    我之所以想知道这一点是因为转移440。 直到那时、传输的字节范围通常为575字节或更小。 但对于#440、它突然从器件向主机传输了2752个字节。 这是一笔巨大的交易、我认为应用程序甚至没有存储这么多数据。

    然后、在该传输后、当发送恢复时、器件仅发回这些超过2400字节的大数据包。 这对我来说不是什么原因导致了这种情况-但不管怎样,它从第一次传输开始,在采集时是#440。 应用程序代码的某些内容已经保存好、似乎陷入了一种糟糕的状态、但我不知道如何通过您的自定义设置来真正了解到底发生了什么。

    不过、它肯定是 TivaWare 代码中的某个内容、我认为它与 USB 驱动程序无关。 这就像是阵列溢出或计数器超过预期值或从电源轨上发出数据的情况。

    我希望 USB 分析器捕获对您有用、如果您可以进一步缩小问题范围、请告诉我、以便我们可以集思广益、讨论如何更好地设置您的软件以执行您想要的操作。 如果可以确定问题位置、我也可以进一步调试。