阅读:1656回复:8
我得68013为什么调用一次IOCTL_EZUSB_BULK_READ最大只能读1K?
我得68013为什么调用一次IOCTL_EZUSB_BULK_READ最大只能读1K?
我把inPacketSize设成32K,inBuffer也设成对应得数字,但发现读进来得数据还是只有1K,(用bushound监控),我就改inPacketSize和inBuffer这两个参数,是不是还有其他参数要改啊? success_read = DeviceIoControl (handle, IOCTL_EZUSB_BULK_READ, &bulkControl, sizeof(BULK_TRANSFER_CONTROL), &inBuffer[0], inPacketSize, &nBytes, NULL); |
|
最新喜欢:![]()
|
沙发#
发布于:2004-07-10 13:39
在驱动程序里,configure interface的时候,可以把每个pipe的MaximumTransferSize设置成你需要的值。在USB 2.0的时候可以设成2MB,在USB 1.1的时候要小很多,我一般设成16KB,也许还可以更大点。
|
|
板凳#
发布于:2004-07-05 11:50
我知道呀。。但是,,这个在哪里设置呀。。好像没有设置的函数吧。。描述符表里。也没有这种字段。。只有包大小的定义。。
这个transfer的长度,可以通过函数设置的吗。。我也没找到这个函数啊。。郁闷。。 |
|
地板#
发布于:2004-07-05 03:53
问题就在这,maxtransferlength被设成一个包的大小,一次只能读一包了。
如果maxtransferlength设成4MB,一次DeviceIoControl就可以最多读4MB。 如果设备不提供数据,DeviceIoControl会死等。 如果设备在中间提供了一个非满包或者0包, Host Controller会返回一个错误信息给驱动程序。 另外请注意,在Cypress提供的8051程序中,包的大小通常是1KB,但是USB 2.0协议规定的包大小是512 bytes。如果你非要把包大小设成1KB,在某些USB卡上数据就会读不上来。 |
|
地下室#
发布于:2004-07-02 12:46
我的也差不多。。用getmaxtransferlength。。函数得到的数值就是一个包的大小。。我只好build很多个Transfer。。
我看这个值,设备描述符表也没有说命呀。。。。不知道怎么得到。 |
|
5楼#
发布于:2004-07-02 09:32
用户被禁言,该主题自动屏蔽! |
|
6楼#
发布于:2004-07-02 06:52
能给我一份原理图吗?
i_tingfeng@hotmail.com |
|
7楼#
发布于:2004-07-01 15:52
检查一下你设备端固件程序提供数据了没有
|
|
8楼#
发布于:2004-07-01 15:41
我的更诡异,每个bulk transfer只能读一个packet的长度。
你的问题解决了么? |
|