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

[复制链接]
32800|158
秋天落叶 发表于 2010-12-20 21:02 | 显示全部楼层
不错的资料
jleige 发表于 2010-12-21 17:09 | 显示全部楼层
:(尴尬 现在碰到个发送完Inquiry请求 执行下一条CBW指令 主机就会一直收到nak 调试发现可能是主机没有将这一条指令发送出去 你有碰到这个问题否
jleige 发表于 2010-12-21 17:17 | 显示全部楼层
:lol解决了 顺便问下 你都是看啥资料的 除了Bulk-Only Transport和UFI Command Specification之外 还看啥 汗 我上面问题的解决答案 貌似这两个上面没的
无冕之王 发表于 2010-12-21 18:11 | 显示全部楼层
的确是好资料
xsgy123 发表于 2010-12-21 22:01 | 显示全部楼层
参考价值还是挺大的
lixiaoxu2meng 发表于 2010-12-22 09:32 | 显示全部楼层
 楼主| simple_head 发表于 2010-12-22 10:38 | 显示全部楼层
jleige: 我也就看这些了,其他还有些enumerate详解之类的.

多个logic unit的drive,该怎么支持呢? 有没有人吱一声阿
香水城 发表于 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了。
 楼主| 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地址!
香水城 发表于 2010-12-22 12:08 | 显示全部楼层
如果PC对这个硬盘使用了2个USB地址,这意味着这个USB硬盘内置一个HUB,否则按照USB协议,在一条USB电缆上不可能出现2个地址!请楼主务必确认这点。

如果这个USB硬盘真的内置一个HUB,那么HUB占一个地址,USB硬盘占一个地址,对于Mass storage class device来讲,最终还是归结到一个地址
c51avr 发表于 2010-12-22 16:13 | 显示全部楼层
yybj 发表于 2010-12-22 22:00 | 显示全部楼层
资料不错
jleige 发表于 2010-12-23 14:34 | 显示全部楼层
你程序里貌似没有stall的处理?你没碰到这个恶心的stall?呵呵 你的程序在我这边的USB设备貌似过不去 呵呵 这个设备在复位完成后,有时候会设置成低速 但是它实际上是全速 呵呵
 楼主| simple_head 发表于 2010-12-23 16:11 | 显示全部楼层
如果你发送的usb命令都是正确的,应该不会有stall,所以我没有特别处理stall. 所以stall根其他的失败一样,全部retry. 如果你的设备被识别为低速,你查一下设备的D+/D-上的上拉电阻是否正确.
jleige 发表于 2010-12-23 16:56 | 显示全部楼层
:)这个设备是一上电有时候识别为低速 只要重新初始化通道就好 我的4GU盘就会回stall的 用电脑看也会回stall的 呵呵 NND clearfeatures的时候输入端点号前面没加0x80 哎 就这个搞了我两天 奶奶的
 楼主| simple_head 发表于 2010-12-23 17:02 | 显示全部楼层
"我的4GU盘就会回stall的" --- 究竟是什么情况下stall的? 我的程序中没有clear feature,你能分析一下为什么要clear feature?
jleige 发表于 2010-12-23 18:10 | 显示全部楼层
呵呵 我也不知道 我有两个USB设备 一个是4G U盘这个会收到stall 一个就是那个usb1.1的设备(就是那个插上有时候会识别成低速的设备)这个是正常执行  你我的两个设备碰到ModeSense6指令都会返回stall 用工具抓xp系统对usb的操作也是有的 说明我的指令应该没错的 遇到stall错误就要用clear feature把这个特性清除掉 这样下次发送才有可能接收到数据 否则会一直回复stall错误
txcy 发表于 2010-12-23 19:01 | 显示全部楼层
先下载下来学习一下
jleige 发表于 2010-12-23 19:26 | 显示全部楼层
再问个问题 你是如何实现多个包发送的 我现在设置包为64字节 传输长度为512字节 怎么才传了一个包通道就CCH就置位了 哎
 楼主| simple_head 发表于 2010-12-23 21:42 | 显示全部楼层
我只用到SPC_CMD_REQUESTSENSE 0x03,没有stall,你确用SPC_CMD_MODESENSE6 0x1A。这2个命令,究竟该用谁呢?你是参考的什么资料说要用SPC_CMD_MODESENSE6?

传输512字节,要进行8次IN,这个在我的程序里你可以看到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部