jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1006回复:6

u盘读写数据触发位的问题

楼主#
更多 发布于:2003-12-24 10:22
   我正在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)说明这个命令失败了。
  我错在那里?请指正。不胜感激!
    
智者当借力而行
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-12-24 10:38
〉〉写的时候有问题了,我发写的CBW,也用DATA0,然后开始写,序列是DATA0,DATA1交错的,最后读CSW,用的是DATA1,命令不成功。

读CSW时,用DATA0开始,然后DATA1,DATA0...;understand?
jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-24 10:59
读CSW用DATA0也不行,我试过了。
智者当借力而行
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-24 11:09
data_seq = (((SL811Read(EP0AControl)&DATAX)==0) ? 1:0);
是不是每次写都应该判断写入哪个data,交错会不会出错啊。
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-12-24 11:11
我的经验:
1.读操作(包括读CBW,CSW),都是从DATA0开始的,然后DATA1,DATA0...;
2.写操作,针对某个端点,建立个全局变量,第一次写操作时是从DATA0开始,然后一直和DATA1循环下去,即本次的操作和上次的操作有关,需要接着循环。
jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-24 14:03
  是不是这样,以写操作为例:
(1)发CBW,用data0;
(2)发数据:data0,data1,data0......,到最后数据发送完毕的时候,发送一个空包,告诉u盘数据发送完毕,该空包用data1;
(3)收CSW,用data0
智者当借力而行
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-12-24 14:24
以写操作为例:
(1)发CBW,用data0;
(2)发数据:data1,data0,data1......(因为都是pid_out且是同一个端点,所以接着(1);不用发空包!)
(3)收CSW,用data0
游客

返回顶部