这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 通过TESTBOARD150PCOUTUSB批量端点到具有DMA自动缓冲区管理的

共2条 1/1 1 跳转至

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

工程师
2024-05-28 19:23:19     打赏

我想我已经碰到了 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缓冲区的结果。




关键词: PSoC5     USB     缓冲区     DMA    

助工
2024-05-28 19:23:37     打赏
2楼

根据您的描述,您已经达到了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总线上的其他设备负载也会影响传输速率。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]