单片机/MCU论坛
直播中

梅利号

8年用户 1464经验值
擅长:可编程逻辑
私信 关注
[问答]

求助,通过TESTBOARD_150PC_OUT USB批量端点到具有DMA自动缓冲区管理的PSoC5LP设备的最快速度是多少?

我想我已经碰到了 psoc5LP 设备上 USB IP 的极限了。 我有一个复合设备,它有一个接口,具有批量输入和 TESTBOARD_150PC_OUT 处理OpenJTAG命令流的端点。 另一个接口实现了用于调试日志记录的串行 CDC 设备和状态控制台。 OpenJTAG 帧的最大大小为 512 字节,端点的最大大小为 64 字节,因为它是全速 USB 设备。 每个帧都没有传输帧大小,所以我使用非 64 字节的数据包大小作为帧分隔符。由于 OpenJTAG 的最大帧数为 512 字节,而每个 USB 批量数据包为 64 字节,我看到每帧会突发 8 个数据包。 当从主机接收帧时,8 中的每个数据包每 110 到 130 秒到达一次。
目前,我将 USBFS DMA 与手动缓冲区管理结合使用,并在 TESTBOARD_150PC_OUT 端点上接收帧时看到大约 540KB/秒的传输速率。 这相当于 5.4mbit/s,USB 2.0 全速 6EDL_SPI_LINK 的比特率为 12mbit/s。 我已经将调用 USBFS_readOutep 的代码放入 USBFS_EP_X_ISR_exitCallback 以启动 USB DMA 读取操作,并将重启端点 USBFS_enableOutep 的调用放到 USBFS_ARB_ISR_Callback 中。
对于 IN 端点,我不用担心 ISR,只需循环调用 usbfs_getepState 和 USBFS_Loadinep,然后在向主机发送 256 字节响应时看到大约 700 千字节/秒或大约 7mbit/秒。
由于在 SOC 本身上进行处理并等待主机解析每个帧的结果并提交新帧,因此系统的总体带宽要低得多。 我的测试设置将设备安装在自己的专用 USB 主机控制器上,没有任何其他设备或集线器。
论坛和 TRM 中搜索,我可以使用 DMA 进行自动缓冲区管理,从而启用直通模式。 有人估计过使用BULK端点可以给我的最大数据速率吗? 我不能使用等时端点,因为已经定义了 OpenJTAG 接口。
有人有通过 psoc5LP 设备内置 USB IP 以更快的速度运行的设计示例吗? 如果我使用自动缓冲区管理,有人估计过性能提升吗? 我认为任何增益都将是由于USB仲裁程序在DMA传输到主系统内存之前绕过了将USB数据包复制到内部USBFS SRAM缓冲区的结果。

回帖(1)

任凭风吹

2024-1-19 13:52:11
根据您的描述,您已经达到了PSoC5LP设备上USB IP的极限。在这种情况下,最快速度将取决于USB总线的带宽限制。全速USB设备的最大传输速率为12 Mbps。

您提到,由于OpenJTAG的最大帧大小为512字节,而每个USB批量数据包为64字节,每帧会突发8个数据包。根据USB规范,批量端点的最大包大小为64字节,因此这是一种有效的方法。

每帧突发8个数据包意味着一次可以传输8个64字节的数据包,即总共512字节的数据。数据包通过USB总线传输时间取决于USB总线的带宽和其他设备的负载。

根据全速USB的最大传输速率为12 Mbps,每个64字节的数据包传输所需的时间为64 * 8 bits / 12 Mbps ≈ 34.13 μs。因此,每个OpenJTAG帧的传输时间为34.13 μs * 8 = 273.04 μs。

在理想情况下,如果没有其他传输或设备负载,您可以在PSoC5LP设备上以每秒约3665帧的速率传输OpenJTAG帧。

然而,由于USB总线不仅用于OpenJTAG数据传输,还用于其他设备的通信,实际传输速率可能会受到限制。同时,USB总线上的其他设备负载也会影响传输速率。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分