阅读:2413回复:12
怎样用IOCTL_EZUSB_BULK_READ一次读取超过512字节啊?
我用的是FX2的仿真板,IOCTL_EZUSB_BULK_READ的函数里是有个参数
可以设置一次读入字节的限制,最大可以到64K,但固件端当被读走 第一个512字节后,接下去的若干个512字节该怎样放到endpoint上 去让主机接着读呢? |
|
|
沙发#
发布于:2003-07-27 18:55
方法1:如果你用的时8051控制模式,你可以在短点中断里设一个标志位,一旦一个包发送成功,你就会收到一个ack中断,写数据时检查这个标志位
方法2:先起动上层应用程序,发送一个out包给设备,通知设备可以写数据到端点,然后应用程序就可以读去数据,而设备方则源源不断的把数据写到端点里。 方法3:固件里检查端点空满标志,一旦端点为空就写数进去。 |
|
板凳#
发布于:2003-07-27 21:49
我用EP2端口在试(IN),固件端用
void ISR_Ep2inout(void) interrupt 0 { EP2BCH =0x01 ; SYNCDELAY; EP2BCL =0xff ; EZUSB_IRQ_CLEAR(); EPIRQ=bmEP2; } 这个中断程序重新使能EP2IN,但我的READ函数一遍还是只能读 到512字节,难道是中断响应太慢了吗? |
|
|
地板#
发布于:2003-07-27 23:33
你上位机设置的每次读多少呀,如果是512的话当然只能读到512了。
|
|
地下室#
发布于:2003-07-28 08:20
512已经是USB2.0的一个包传输的最大字节了,不能再大了。
|
|
5楼#
发布于:2003-07-28 10:03
在上位机端,我设过大的数据了,如4096,10240的,但每次只
读到512字节,痛苦! |
|
|
6楼#
发布于:2003-07-28 10:10
这是正常的,你只能靠提高一次deviceiocontral的包的数量来提高速度。
|
|
7楼#
发布于:2003-07-28 10:26
在上位机端,我设过大的数据了,如4096,10240的,但每次只 这是你固件方的问题,我用bulksrc那个例子一次可以读很多数据的,65535我都试过,那个例子是先写一批数据到下面的ram里,然后读的时候再从ram里读出来发到主机方。 |
|
8楼#
发布于:2003-07-28 13:42
感谢金兄,我找到了固件bulksrc果然可以读60k每次,上位机
程序没问题的,我看看bulksrc是怎么写的。 |
|
|
9楼#
发布于:2003-07-28 23:52
已经解决了!!!
按照bulksrc这个例子中固件得写法就可以了。 我原来得问题是没判断端口是否为空就rearm了,应该空时 rearm才对。 |
|
|
10楼#
发布于:2003-07-29 09:30
解决了就好,不过你的测试方法实用性不强,因为你省去了填充端点所花费的时间,实际情况下你是不能不考虑这段时间的,因为这段时间是设备方主要花费时间的地方。
|
|
11楼#
发布于:2003-07-29 10:17
是的,但我的填充想采用slavefifo的方式,直接把摄像头
传出的数字量写进断点,不要8051的指令参与,具体的速度我 没底,但应该比用指令填充快出很多吧!不知道能否跟得上我这样 直接测得速度! |
|
|
12楼#
发布于:2003-07-29 11:11
那具体的速度得看你摄像头那边控制器的速度和数据率了,你那边的速率越快,总的速率就越快。
|
|