打印

STM32F107读U盘程序 --- 10多种盘已测试通过

[复制链接]
楼主: simple_head
手机看帖
扫描二维码
随时随地手机跟帖
21
秋天落叶| | 2010-12-20 21:02 | 只看该作者 回帖奖励 |倒序浏览
不错的资料

使用特权

评论回复
22
jleige| | 2010-12-21 17:09 | 只看该作者
:(尴尬 现在碰到个发送完Inquiry请求 执行下一条CBW指令 主机就会一直收到nak 调试发现可能是主机没有将这一条指令发送出去 你有碰到这个问题否

使用特权

评论回复
23
jleige| | 2010-12-21 17:17 | 只看该作者
:lol解决了 顺便问下 你都是看啥资料的 除了Bulk-Only Transport和UFI Command Specification之外 还看啥 汗 我上面问题的解决答案 貌似这两个上面没的

使用特权

评论回复
24
无冕之王| | 2010-12-21 18:11 | 只看该作者
的确是好资料

使用特权

评论回复
25
xsgy123| | 2010-12-21 22:01 | 只看该作者
参考价值还是挺大的

使用特权

评论回复
26
lixiaoxu2meng| | 2010-12-22 09:32 | 只看该作者

使用特权

评论回复
27
simple_head|  楼主 | 2010-12-22 10:38 | 只看该作者
jleige: 我也就看这些了,其他还有些enumerate详解之类的.

多个logic unit的drive,该怎么支持呢? 有没有人吱一声阿

使用特权

评论回复
28
香水城| | 2010-12-22 10:49 | 只看该作者
jleige: 我也就看这些了,其他还有些enumerate详解之类的.

多个logic unit的drive,该怎么支持呢? 有没有人吱一声阿
simple_head 发表于 2010-12-22 10:38


如果你看了Bulk-Only Transport这篇文档,看看Get Max LUN这条命令就知道怎么支持多个logic unit的drive了。

使用特权

评论回复
29
simple_head|  楼主 | 2010-12-22 11:14 | 只看该作者
我的一个500G移动硬盘,在enumerate完成之后,就不接收任何mass storage class specific request,不管你是用LUN=0还是LUN=1. USB传输的结果都是time out,就好像enumerate之后这个设备的地址变了.

这个500G的硬盘在PC上是OK的,我用usb hound捕获到,PC的确对这个硬盘使用了2个USB地址!

使用特权

评论回复
30
香水城| | 2010-12-22 12:08 | 只看该作者
如果PC对这个硬盘使用了2个USB地址,这意味着这个USB硬盘内置一个HUB,否则按照USB协议,在一条USB电缆上不可能出现2个地址!请楼主务必确认这点。

如果这个USB硬盘真的内置一个HUB,那么HUB占一个地址,USB硬盘占一个地址,对于Mass storage class device来讲,最终还是归结到一个地址

使用特权

评论回复
31
c51avr| | 2010-12-22 16:13 | 只看该作者
:lol

使用特权

评论回复
32
yybj| | 2010-12-22 22:00 | 只看该作者
资料不错

使用特权

评论回复
33
jleige| | 2010-12-23 14:34 | 只看该作者
你程序里貌似没有stall的处理?你没碰到这个恶心的stall?呵呵 你的程序在我这边的USB设备貌似过不去 呵呵 这个设备在复位完成后,有时候会设置成低速 但是它实际上是全速 呵呵

使用特权

评论回复
34
simple_head|  楼主 | 2010-12-23 16:11 | 只看该作者
如果你发送的usb命令都是正确的,应该不会有stall,所以我没有特别处理stall. 所以stall根其他的失败一样,全部retry. 如果你的设备被识别为低速,你查一下设备的D+/D-上的上拉电阻是否正确.

使用特权

评论回复
35
jleige| | 2010-12-23 16:56 | 只看该作者
:)这个设备是一上电有时候识别为低速 只要重新初始化通道就好 我的4GU盘就会回stall的 用电脑看也会回stall的 呵呵 NND clearfeatures的时候输入端点号前面没加0x80 哎 就这个搞了我两天 奶奶的

使用特权

评论回复
36
simple_head|  楼主 | 2010-12-23 17:02 | 只看该作者
"我的4GU盘就会回stall的" --- 究竟是什么情况下stall的? 我的程序中没有clear feature,你能分析一下为什么要clear feature?

使用特权

评论回复
37
jleige| | 2010-12-23 18:10 | 只看该作者
呵呵 我也不知道 我有两个USB设备 一个是4G U盘这个会收到stall 一个就是那个usb1.1的设备(就是那个插上有时候会识别成低速的设备)这个是正常执行  你我的两个设备碰到ModeSense6指令都会返回stall 用工具抓xp系统对usb的操作也是有的 说明我的指令应该没错的 遇到stall错误就要用clear feature把这个特性清除掉 这样下次发送才有可能接收到数据 否则会一直回复stall错误

使用特权

评论回复
38
txcy| | 2010-12-23 19:01 | 只看该作者
先下载下来学习一下

使用特权

评论回复
39
jleige| | 2010-12-23 19:26 | 只看该作者
再问个问题 你是如何实现多个包发送的 我现在设置包为64字节 传输长度为512字节 怎么才传了一个包通道就CCH就置位了 哎

使用特权

评论回复
40
simple_head|  楼主 | 2010-12-23 21:42 | 只看该作者
我只用到SPC_CMD_REQUESTSENSE 0x03,没有stall,你确用SPC_CMD_MODESENSE6 0x1A。这2个命令,究竟该用谁呢?你是参考的什么资料说要用SPC_CMD_MODESENSE6?

传输512字节,要进行8次IN,这个在我的程序里你可以看到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则