Usb的Bulk传输的传输量有限制吗?我在Usb设备驱动中定义的MaxTransferSize为10M;驱动中的write()使用DS自生成的函数。超时设为1000L。使用ISP1581Usb接口芯片(有四字节DMA计数器),MaxPackageSize为512,外接8M Ram...
全文
回复(8) 2004-08-05 11:11 来自版块 - USB驱动开发
表情
zhyf2008Usb的Bulk传输的传输量有限制吗? 我在Usb设备驱动中定义的MaxTransferSize为10M;驱动中的write()使用DS自生成的函数。超时设为1000L。使用ISP1581Usb接口芯片(有四字节DMA计数器),MaxPackageSize为512,外接8M R...(2004-08-06 15:16)
metalwing欧,是这样的。谢谢你。 再问个低级问题,我的BULK传输是使用METHOD_DERICT_IO方式的,也就是并未在内核中另外开辟一个10M存储空间,我想仅是开辟了一个描述这10M空间的映射。(这10M空间是不是在调用(WriteFile)时,被系统锁住了,这是不是也算占用了内核...(2004-08-06 14:36)
jinghuiren因为内核状态下的内存资源是有限的,再说USB的带宽也是有限的,如果你一个设备占用了太多的资源,虽然也是允许的,但很容易导致问题,再说,如果你确实是实时大批量的数据传输,这样也是允许的,可是这样就没有灵活性了。因此通常都是64K或者几百k,上兆的就很少了。(2004-08-06 14:07)
metalwing再次感谢。 做测试时的问题找到了,是因为发的数据量少与Bulk管道的MaxPackageSize,固件程序还在等DMA数据,应用程序却完成了数据本次的传输。而第二次的传输请求被挡住了进行不了,所以就...了。将第一次的传输量改为MaxPackageSize的整数倍,就没问题了。...(2004-08-06 12:32)
jinghuiren你可以这样做: 设立个循环,循环里调用WriteFile函数,每次WriteFile发送64K数据下去,设备里收到中断就读数据。这样效率就不错,不需要每次让内核携带4M这么大的数据。(2004-08-06 09:33)
metalwing刚才作了个测试,使用DMA方式,在应用程序中,先发一个DMA起始包通知固件程序即将发送的DMA数据长度(200Bytes),然后连续调用WriteFile函数,向ISP1581发送两次Bulk传输(每次100Bytes),但固件程序只处理了第一次的100Bytes数据,并处于等待...(2004-08-06 02:27)
metalwing谢谢jinghuiren大侠。那我现在该怎么办? 我想在驱动程序中解决这个问题,不想让应用程序来解决。这样好吗?你说的“不建议内核里面一次携带这么多数据。”是不是建议最好由应用程序来解决这个问题的意思? 如果在驱动中解决这个问题,就要自己分包发送了。你能给我一个着方面的例子吗...(2004-08-06 01:58)
jinghuiren如果是Intel的Host Controller,那么一个URB携带的数据量限制就是4M,多了肯定会出错!因此不建议内核里面一次携带这么多数据。(2004-08-05 16:28)

返回顶部