打印

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

[复制链接]
楼主: simple_head
手机看帖
扫描二维码
随时随地手机跟帖
41
jleige| | 2010-12-23 22:18 | 只看该作者 回帖奖励 |倒序浏览
SPC_CMD_REQUESTSENSE 0x03 这个是看出现的是什么错误
你是参考的什么资料说要用SPC_CMD_MODESENSE6?------我是通过USB分析软件看XP系统对U盘的操作,然后模拟xp系统做的
传输512字节,要进行8次IN,这个在我的程序里你可以看到---呵呵 我只进行一次就CHH了 呵呵

使用特权

评论回复
42
无冕之王| | 2010-12-23 22:30 | 只看该作者
的确是有一些问题

使用特权

评论回复
43
simple_head|  楼主 | 2010-12-24 09:15 | 只看该作者
实际上,我认为问题最大的是enumerate后,应该采取哪些u盘命令,按照怎样的顺序去根u盘通信, 这些都没有一个权威的文档说明.

你试一下不用SPC_CMD_MODESENSE6, 看看可以不.

使用特权

评论回复
44
liaowei230509| | 2010-12-24 09:34 | 只看该作者
ST的读U盘的例子出来了,呵呵,去下载试试吧

使用特权

评论回复
45
jleige| | 2010-12-24 13:29 | 只看该作者
:)我是模拟xp的 呵呵 我和xp系统对U盘操作的结果是一样的
Host会依次发出 INQUIRY、Read Capacity、UFI Mode Sense请求,如果上述请求的返
回结果都正确,则 Host 会发出 READ 命令,读取文件系统 0 簇 0 扇区的 MBR 数据,进入
文件系统识别阶段。
对于PREVENT-ALLOW MEDIUM REMOVAL和TEST UNIT READY 命令, 只需直
接返回 CSW即可,对于后者,由于 Flash 盘总是处于 READY状态,故可直接返回 CSW。

这个是USB技术项目报告上写的 哎 悲剧 人倒霉喝凉水都塞牙 好不容易U盘可以进入文件系统阶段了 另外一个USB设备却一直反馈串扰错误 尴尬

使用特权

评论回复
46
simple_head|  楼主 | 2010-12-24 21:55 | 只看该作者
"这个是USB技术项目报告上写的" ---  这个是什么东东?

使用特权

评论回复
47
gxgclg| | 2010-12-24 21:55 | 只看该作者
还不错的资料

使用特权

评论回复
48
jleige| | 2010-12-25 12:29 | 只看该作者
:lol去百度搜下 下载来看看 呵呵 这个USB技术项目报告还好的

使用特权

评论回复
49
liaowei230509| | 2010-12-25 15:17 | 只看该作者
楼主,你好
我试了一下你的代码,U盘枚举的时候失败了,跟踪了一下,是在UsbSetupTransaction的时候出错了
ChStatus=UsbReg.HCReg[0]->hc_int;检测到ChStatus为0x00000080而导致错误。这是为什么呢?
我用的是STM32F105R8

使用特权

评论回复
50
liaowei230509| | 2010-12-25 16:13 | 只看该作者
Bit 7 TXERR: Transaction error
Indicates one of the following errors occurred on the USB.
CRC check failure
Timeout
Bit stuff error
False EOP

查了一下,错误在这里,这是怎么回事?

使用特权

评论回复
51
liaowei230509| | 2010-12-25 16:17 | 只看该作者
if(ChStatus&0x000003c2)
        {   //if there is: data toggle error, frame over run, babble error, tx error, channel halt, failure exit this function
            r=1;break;
        };
楼主,这里面应该不是0x000003c2,而应该是0x000007c2吧

使用特权

评论回复
52
simple_head|  楼主 | 2010-12-25 16:20 | 只看该作者
我的程序是按照外部晶振25M配置的,如果你的晶振不是25M,你要自己配置RCC等,否则有可能出现你看到的错误。

使用特权

评论回复
53
simple_head|  楼主 | 2010-12-25 17:07 | 只看该作者
楼主,这里面应该不是0x000003c2,而应该是0x000007c2吧  --- 这个是小问题

使用特权

评论回复
54
liaowei230509| | 2010-12-25 17:17 | 只看该作者
谢谢楼主,搞定了,是晶振的问题,我的晶振是8M,重新配置了就能枚举了
我用ST提供的例程调试了一下,也能枚举,但还无法读写,创建等,晚上回来再看看

使用特权

评论回复
55
秋天落叶| | 2010-12-25 18:21 | 只看该作者
很好的资料,可以让后学习的人少走很多弯路

使用特权

评论回复
56
jleige| | 2010-12-25 21:46 | 只看该作者
我的程序是按照外部晶振25M配置的,如果你的晶振不是25M,你要自己配置RCC等,否则有可能出现你看到的错误。:shutup: 呵呵 这个还跟晶振有关的啊?尴尬 我貌似就直接把RCC时钟打开就上马 呵呵 这个时钟配置有何要求否?

使用特权

评论回复
57
simple_head|  楼主 | 2010-12-25 21:57 | 只看该作者
the user manual will answer your question

使用特权

评论回复
58
jleige| | 2010-12-25 23:19 | 只看该作者
我的程序是按照外部晶振25M配置的,如果你的晶振不是25M,你要自己配置RCC等,否则有可能出现你看到的错误。:L汗 晓得了 第一次看到可能理解有点偏差 呵呵 你做的怎么样了

使用特权

评论回复
59
火箭球迷| | 2010-12-26 18:07 | 只看该作者
仔细阅读了一下,的确是不错

使用特权

评论回复
60
txcy| | 2010-12-26 22:23 | 只看该作者
的确是很不错的参考资料

使用特权

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

本版积分规则