qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:5231回复:29

SL811HS控制的U盘读写

楼主#
更多 发布于:2002-11-22 16:07
   U盘的枚举过程已经通过,DESCRIPTION中EP1为输入,EP2为输出,现对EP2循环发INQUIRY或READ10命令,第一次有ACK,以后只有端口挂起返回,或紧接着对EP1发读指令,只有NACK返回。
   请教各位大虾,怎么玩。

最新喜欢:

gx004gx004 ww7002ww7002
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-17 17:21
到]
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
xxg
xxg
驱动小牛
驱动小牛
  • 注册日期2002-02-28
  • 最后登录2005-12-12
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-24 16:00
晶阵用的对吗?
  我们有成熟MCU读写U盘的方案.
  详细信息可以到我们的网站上看:http://eden.51.net
  上面有介绍和图片。
twldn
驱动牛犊
驱动牛犊
  • 注册日期2003-11-28
  • 最后登录2004-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-20 09:56
循环不行是没有执行DATA0/1轮换
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-02 10:22
  收不到NAK应该高兴才对.
  好象不管你发什么命令,都应该有响应才对,格式对,数据体不对回NACK,格式不对回STALL.
  首先确定地址对不对、ENDPOINT对不对。
  随便说说,请指正。 :) :) :) :) :) ;)
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-28 12:00
  前面帖子里公布的资料.
  我也是下载调试的.
  子程序非常全,我也没看细节,反正不用动一点点.
  谢谢原始作者.
newdcl
驱动牛犊
驱动牛犊
  • 注册日期2002-11-25
  • 最后登录2003-10-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-28 11:50
请qianyu123 帮下忙,
 我现在也在调试SL811,采用KEIL编译,8051控制
但是我不论如何发setup包(get_descriptor),但是一直收不到NAK
不知是不是程序问题,我参考了ScanLogic的有关驱动,也没着落。
 qianyu123 给提供点帮吗?
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-28 11:38
   好象不是延时的问题,我如果等正确的CSW的话,出不来。
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-28 11:12
  为了测试看起来方便,LBA=0的位置已经被计算机用其他的软件清零过了,大不了再格式化回来.因为我用BUS HOUND 只能看到前512字节,写到其他地方读起来不方便.
  您所的说的多读几次的方法,我马上试以下.
  我还碰到一个问题,即使是READ命令,也不能循环读取.比如我读完了01处的512字节,延时1秒(实验)后再读02处的512字节,发现也不成功.
  谢谢帮助.
joyup
驱动牛犊
驱动牛犊
  • 注册日期2002-03-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-28 10:13
我估计写入的问题可能有两个:
1.你在读csw时,是否只发了一次in的包?正常情况下,U盘的写入会慢一些,所以有可能它还没有处理完要写入的数据,你就来IN包了,这时它当然要发NAK的包了,你可以试着多发一些IN包,直到收到CSW包为止。

2.我看你发的CBW包里面,发现你要发给U盘0x200个数据,你是不是全部发完了?应该要发8个out包。

另外,建议你先不要向LBA=0这个地方写,换一个普通的地址写,因为这个地方是逻辑地址空间的MBR的位置,写数据会破坏U盘。
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-28 08:49
   我说的直接写意思是:枚举成功后,不经过INQUIRY或READ命令,直接按CBW、WRITE(10)、CSW的顺序写U盘。
   首先不知道能不能直接写,需不需要其他流程;还有就是命令格式对不对,贴在下面。
BYTE WRITE10[31]={0x55,0x53,0x42,0x43,0,0,0,0,0x00,0x02,0,0,0x00,0,0x0a,
                 0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00};
BYTE WRBUF[31]={0x55,0x53,0x42,0x43,0,0,0,0,0x00,0x02,0,0,0x00,0,0x0a,
                 0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00};
  盼指点。谢谢!
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-28 08:12
   JOYUP 老兄请再看看。
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-11-27 16:24
  1、发CBW
  2、读数据
  3、读CSW
  重复1、2、3。
  现在发现直接用WRITE(10)或WRITE BUFFER 命令直接写BUF不行,情况是将上面过程中的第二步直接换成写数据,当然CBW中相应标志位也改变了方向。最后发现读CSW时U盘回NACK,数据也没有写进去。是不是写BUF还需要什么其他的步骤。
  特请教。谢谢!

joyup
驱动牛犊
驱动牛犊
  • 注册日期2002-03-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-11-27 15:48
你是如何循环的?
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-11-27 13:33
  READ(10)命令也通过,但怎么循环不行.
  有经验的老兄指点以下.
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-11-27 09:51
   MD!
   加了几行字,52不行了.
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-11-27 09:04
   谢谢楼上的老兄!
   INQUIRY命令已经调通,
   返回数据为:
00 80 02 02 1F 00 00 00 4F 54 69 20 20 20 20 20 55 6C 74 72 61 20 46 6C 6F 70 70 79 20 20 20 20 31 2E 31 31
   CSW:55 53 42 53 00 00 00 00 00 00 00 00 00
   但好象只能进行一次INQUIRY命令,第二次U盘回NACK.
   现正在调试,先调个READ(10)再说.
joyup
驱动牛犊
驱动牛犊
  • 注册日期2002-03-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-11-26 18:11
例如:Inquiry命令

HOST:
  out pid(ep2)
  data0/1:
  55 53 43 42 XX XX XX XX XX XX XX XX XX XX XX 12
  00 00 00 24 00 00 00 XX XX XX XX XX XX XX XX (cbw包)
Device
  ack
HOST:
  in pid(ep1)
Device
  data0/1:
  00 80 00 01 01 XX XX XX XX ......(一共0x24个字节,有可能少)
HOST:
  ack
HOST:
  in pid(ep1)
Device
  data1/0:
  55 53 43 53 XX XX XX XX 00 00 00 00 00(csw包,00,成功;01/02,失败)

简单的过程就是这样,详细的还要看资料
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-11-26 16:22
   头痛!!!
   有谁有CBW,CSW的范例,麻烦提供以下,以救人于水火.
  
qianyu123
驱动小牛
驱动小牛
  • 注册日期2002-11-22
  • 最后登录2007-09-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-11-26 14:59

  我好象忽略了CBW,CSW?
  现正在看资料,争取改正.其他地方也请大家指正,共同提高.

  欢迎JSNJSSS进入交流.
  
上一页
游客

返回顶部