阅读:1006回复:6
u盘读写数据触发位的问题
我正在d开发usb设备的驱动,在我的u盘读写过程中,有一个令我很奇怪的问题。
读的时候,我发读的CBW,用的是DATA0,然后开始读,序列是 DATA0,DATA1...是交错的,最后读CSW,用的是DATA0,读入的CSW显示结果正确。 写的时候有问题了,我发写的CBW,也用DATA0,然后开始写,序列是DATA0,DATA1交错的,最后读CSW,用的是DATA1,命令不成功。我改了改,CBW是DATA0,写的序列全是DATA0,读CSW用的是DATA1,好了,CSW总算读进来了,dCSWSignature,dCSWTag,dCSWDataResidue都是好的,但是状态位(01)说明这个命令失败了。 我错在那里?请指正。不胜感激! |
|
|
沙发#
发布于:2003-12-24 10:38
〉〉写的时候有问题了,我发写的CBW,也用DATA0,然后开始写,序列是DATA0,DATA1交错的,最后读CSW,用的是DATA1,命令不成功。
读CSW时,用DATA0开始,然后DATA1,DATA0...;understand? |
|
板凳#
发布于:2003-12-24 10:59
读CSW用DATA0也不行,我试过了。
|
|
|
地板#
发布于:2003-12-24 11:09
data_seq = (((SL811Read(EP0AControl)&DATAX)==0) ? 1:0);
是不是每次写都应该判断写入哪个data,交错会不会出错啊。 |
|
地下室#
发布于:2003-12-24 11:11
我的经验:
1.读操作(包括读CBW,CSW),都是从DATA0开始的,然后DATA1,DATA0...; 2.写操作,针对某个端点,建立个全局变量,第一次写操作时是从DATA0开始,然后一直和DATA1循环下去,即本次的操作和上次的操作有关,需要接着循环。 |
|
5楼#
发布于:2003-12-24 14:03
是不是这样,以写操作为例:
(1)发CBW,用data0; (2)发数据:data0,data1,data0......,到最后数据发送完毕的时候,发送一个空包,告诉u盘数据发送完毕,该空包用data1; (3)收CSW,用data0 |
|
|
6楼#
发布于:2003-12-24 14:24
以写操作为例:
(1)发CBW,用data0; (2)发数据:data1,data0,data1......(因为都是pid_out且是同一个端点,所以接着(1);不用发空包!) (3)收CSW,用data0 |
|