usb传输问题

floac 2022-09-21 09:47:22 编辑

请问我用uboot的usb3.0驱动接入2.0的设备后,这个usb发包不是一次最多512吗,那如果我要发20000个字节,主机是如何发送出去呢?从机接受数据是只有一个中断还是出发多个中断?谢谢!求解答

USB中文网 2022-09-22 10:00:30 编辑

从你的说法来看,应该是USB2.0高速。
USB2.0高速的BULK传输一次最大512字节。详见:https://www.usbzh.com/article/detail-852.html
USB2.0高速

现在你需要传输20000个字节,所以传输的次数为:
20000÷512=39…32
所以总共需要40个事务来传输。
前39个事务每次传输512字节,最后一个事务传输32字节。

而如果采用中断方式,方式类似。

当然这些事务中的最大字节数是USB规范范中设置的上限,也要看你的实际端点描述符设置的大小。

每个事务都是:
IN
DATA
ACK

floac 2022-09-22 10:47:30 编辑

多谢解答,还有请问这个产生39个事务,批量传输中,一个事务就产生一个中断吗?然后从机就要响应完这个事务后才能处理第二个事务吗?有没有是直接发送完39个事务,然后从机只产生一个中断?
还有个其他的疑惑,我看了usb3.0中有一个TRB和USB2.0中有个QH和DTD,这个TRB的功能和DTD是相同的吗? 谢谢谢谢!

USB中文网 2022-09-22 11:38:25 编辑

是的,每个事务一个中断。

还有个其他的疑惑,我看了usb3.0中有一个TRB和USB2.0中有个QH和DTD,这个TRB的功能和DTD是相同的吗? 谢谢谢谢!

不清楚这是什么

floac 2022-09-22 14:04:33 编辑

好的 谢谢。
不好意思 还有个问题就是如果 我只想通过USB做批量的数据传输,请问从机需要哪些描述符?我看了cdc之类的 感觉里面的夹了很多的描述符

USB中文网 2022-09-22 16:06:23 编辑

如果只是批量的,可以查看一个U盘的配置描述符,使用2个bulk端点,驱动可以考虑使用winusb。
WinUSB 简介:https://www.usbzh.com/article/detail-629.html
win10x64下vs2019使用libusb: https://www.usbzh.com/article/detail-482.html
批量传输:自定义接口实现 https://www.usbzh.com/article/detail-922.html
使用微软系统描述符2.0制作免驱动自定义USB设备:https://www.usbzh.com/article/detail-1069.html

当然,如果你对性能要求不是很高的化,建议用自定义HID,这样可以直接使用Windows系统的驱动。这样就不用考虑驱动的问题,同时也可以使用Windows提供的HID API库来开发通讯接口。
自定义HID应用程序开发(Windows) https://www.usbzh.com/article/forum-53.html
自定义通讯HID报告描述符(hidraw) https://www.usbzh.com/article/detail-566.html