strongxg
驱动牛犊
驱动牛犊
  • 注册日期2002-04-14
  • 最后登录2011-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2738回复:16

请教大家!MCU对U盘的操作。

楼主#
更多 发布于:2002-05-21 11:50
我有一项目,设备(MCU)需对U盘进行读写操作。HOST选用SL811H,
U盘用的是朗科的32M无驱型。初次接触USB,很不熟悉,时间又紧,只有半个月时间,请大家帮忙。

现在调试出现了一怪现象:对U盘发出指令后第一次能正确执行,并能正确得到CSW(如读一扇区)。可是后面再发指令就再也不执行了(如再发读一扇区指令),发指令能有ACK响应,后面读就得到NAK,不执行操作。指令都是正确的,放到第一次都能正确执行,调了很久不知什么原因。

请各位高手帮帮忙!这里先谢谢了!多多感谢!急!急!急!


最新喜欢:

ww7002ww7002
strongxg
驱动牛犊
驱动牛犊
  • 注册日期2002-04-14
  • 最后登录2011-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-21 16:18
大家请帮忙,时间很紧,多发表意见,想想办法。

多谢!多谢!
kelvin9230
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-18 09:21
我也碰上类似问题.我用的是Genersys Logic的USB CF读卡器.BULK ONLY, SCSI TRANSPARENT COMMAND SET. 我是在DOS下写的UHCI的驱动和设备驱动.想尽一切方法都无效.看来只好跟踪WIN2K的驱动,看看它是如何工作的.欢迎联系kelvin@ldic-china.com
Tel:021-64728712 吴华
kelvin9230
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-19 08:33
So many USB hakers in forum.
No one can answer my question???
twldn
驱动牛犊
驱动牛犊
  • 注册日期2003-11-28
  • 最后登录2004-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-12 20:26
我也一样碰到这个问题
请高手赐教
dopy26
驱动牛犊
驱动牛犊
  • 注册日期2003-02-28
  • 最后登录2006-09-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-13 09:51
偶不是高手, 可能帮不上什么忙


现在调试出现了一怪现象:对U盘发出指令后第一次能正确执行,并能正确得到CSW(如读一扇区)。可是后面再发指令就再也不执行了(如再发读一扇区指令),发指令能有ACK响应,后面读就得到NAK,不执行操作。


看到CSW不一定你的命令就正确执行了, CSW里面还有一个状态信息要读出来判断.
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-12-14 09:29
cbw命令有误,察看csw的状态信息。
第一次的命令返回的数据对吗?
mhxsoft
驱动牛犊
驱动牛犊
  • 注册日期2003-06-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-15 09:06
是DATA0与DATA1的问题!
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-12-15 09:16
如果是用cypress的例程,那就肯定出在usbxfer函数上了,因为那个函数有bug,需要稍加修改才能正常使用的!!!
twldn
驱动牛犊
驱动牛犊
  • 注册日期2003-11-28
  • 最后登录2004-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-20 09:42
的确是DATA0/1轮换的问题
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-22 10:36
请教lxb_gd:
-----------------
如果是用cypress的例程,那就肯定出在usbxfer函数上了,因为那个函数有bug,需要稍加修改才能正常使用的!!!
---------------------
能否将这个bug贴出来,我正在编写读写U盘的程序,用的就是Cypress的程序。

 
tan_1_2
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-22 21:54
lxb_gd:
-----------------
如果是用cypress的例程,那就肯定出在usbxfer函数上了,因为那个函数有bug,需要稍加修改才能正常使用的!!!
---------------------
我也想知道这个bug是什么
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2003-12-23 10:17
是在pid_out时的处理。
usbxfer例子中只能发送一次,如果发送512bytes,调用多次usbxfer,同时也没用利用到双缓冲,所以写速度会慢一些的。
同时在usbxfer函数外,要自己添加nak,timeout,stall等错误处理,这样稳定性才能提高!
wqs_79
驱动牛犊
驱动牛犊
  • 注册日期2003-11-27
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望31点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-12-23 13:25
我正在读这一段的程序,也有这方面的疑问,是不是在这一段,
//------------------------------------------------
 // For EP0\'s IN/OUT token data, start with DATA1
 // Control Endpoint0\'s status stage.
 // For data endpoint, IN/OUT data, start ????
 //------------------------------------------------
 if(endpoint == 0 && pid != PID_SETUP)  // for Ep0\'s IN/OUT token
   cmd |= 0x40; // always set DATA1

 //------------------------------------------------
 // Arming of USB data transfer for the first pkt
 //------------------------------------------------
 SL811Write(EP0Status,((endpoint&0x0F)|pid)); // PID + EP address
 SL811Write(EP0Counter,usbaddr); // USB address
 SL811Write(EP0Address,data0); // buffer address, start with \"data0\"
 SL811Write(EP0XferLen,xferLen); // data transfer length
 SL811Write(IntStatus,INT_CLEAR); // clear interrupt status
 SL811Write(EP0Control,cmd); // Enable ARM and USB transfer start here

 //------------------------------------------------
 // Main loop for completing a wLen data trasnfer
 //------------------------------------------------
这一段只设置了端点0的值,没有设端点1的值。是否需要加上端点1的值,但是前面又有这样一句:
  cmd |= 0x40; // always set DATA1
是什么意思呢?难道DATA0不是对应端点0?请指教。
附件名称/大小 下载次数 最后更新
2003-12-23_HOST_811.C (41KB)  1
xxg
xxg
驱动小牛
驱动小牛
  • 注册日期2002-02-28
  • 最后登录2005-12-12
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-12-24 15:50
我们有MCU读写U盘的成熟方案。
   详细信息可以到我们的网站上看:http://eden.51.net
   上面有介绍和图片。
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-03-17 17:21
la
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
purple.sun
驱动牛犊
驱动牛犊
  • 注册日期2003-11-17
  • 最后登录2013-08-09
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-02 12:08
请问一下大家如何对nak,timeout,stall各个状态进行处理的呢?

我现在被郁闷在这里了,老是出错不知道怎么处理
游客

返回顶部