阅读:1320回复:7
请问一个比较简单的问题
在PC端的USB驱动中每次向USB设备写入数据时,每一个Write的最大数据量是多少?如果我在USB设备的固件中固定一个Buffer,用来接收每次的Write数据,接收完后才写入。我发现当数据很大时,比如几MB的数据,每次Write时,数据为64KB,请问一下,有没有比这更大的情况?
多谢多谢,给分给分 |
|
|
沙发#
发布于:2003-08-01 14:46
可以,但是你的在驱动例完成,把这些数据通过mdl传到驱动里,然后每次bulid一个64k的urb发动到底层驱动,循环进行,直到把数据传完返回!
|
|
板凳#
发布于:2003-08-01 15:13
可以,可以把一次DECIVEIOCONTROL的数据大小改变,大小随你自己定,这样就可以实现你的要求了,你用的是68013的开发板吧?
|
|
地板#
发布于:2003-08-01 16:19
多谢
我现在不写PC端的驱动,我主要的问题是在设备固件里。 我想提高我固件的运行速度,在接收PC端的数据时开了一个64KB大小的固定buffer,我担心pc机在每个Write事务中会发送超过64KB的数据,这样的话,我的usb设备就会出现数据丢失的情况。请问一下,有没有超过64KB的Write事务? 我发现我的机器上在传输大文件时都是每次write 64KB的,当然,如果是小文件的话,就不用担心了。 |
|
|
地下室#
发布于:2003-08-01 16:33
一般不会大于64k的,不过我觉得这样的write事务对你固件方没有影响呀,因为即使是64k或者更多,主机每次的out事务中数据量还是一个包1.1是64,2.0是512,因此你固件中每次也就是读取这一个包而已,你不用管主机发多少个,只要你固件里能处理两个连续的包,那么就能处理更多个连续的包
|
|
5楼#
发布于:2003-08-01 16:43
一般不会大于64k的,不过我觉得这样的write事务对你固件方没有影响呀,因为即使是64k或者更多,主机每次的out事务中数据量还是一个包1.1是64,2.0是512,因此你固件中每次也就是读取这一个包而已,你不用管主机发多少个,只要你固件里能处理两个连续的包,那么就能处理更多个连续的包 对固件有影响啊,如果我接收满64bytes或者是512bytes就向存储介质写的话,这样就要频繁的调用我的写函数的;而如果我在每次write发完数据,返回CSW前一次写完的话,就省掉了很多的函数调用的入栈、出栈操作,这样也能提高我的执行速度啊。 这时就要预先知道在每次write事务时最大的数据长度(就是CBW中的长度值),我把这个事务中的所有数据都放在这个buffer中,如果buffer太小的话,后面一部分数据就丢失了,所以要这个buffer足够大才行。我向我的U盘中拷贝了一个30MB的文件,发现在开始时CBW中的数据长度都是64KB(0x80),所以我认为开一个64KB的buffer是可以的 |
|
|
6楼#
发布于:2003-08-02 00:33
既然你有一个64KB的缓冲,你大可不必担心HOST一次写出的数据会超过你的缓冲。如果真的出现这种情况的话,你在接收满64KB之后优先处理缓冲区里的数据,此时如果主机继续发送数据,固件可以响应NAK信号给主机,主机就会不断重复发送从64KB之后的数据了。当你的固件处理完缓冲区的数据之后,可以继续响应被主机反复传出的“超过64KB”的那部分数据。
|
|
7楼#
发布于:2003-08-02 12:46
哦,我说的是通用设备的情况,你也没说你做的是u盘呀!就当我前面的没说吧。
|
|