社区导航

 

搜索
查看: 32840|回复: 100

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

[复制链接]

95

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-15 15:14 | 显示全部楼层 |阅读模式
前段时间发了帖子讯问STM32F107的USB HOST问题(IN token为什么发不出去),同不少网友都有所讨论.其中vigia同学给了我关键的提示: 一次完整的transaction必须要检测到传输完成位XFRC置一,且之后halt所用channel. 我的程序最初有问题,在IN transaction时总时检测不到XFRC, 但是做10次8次IN都是对的,一旦IN做的次数多到几十次后,HOST就挂掉了.

然后我就反复调试,观察寄存器,反复读手册,终于发现在手册的877页的前几行发现端倪:

IN transaction结束后,RxFifo中收到数据->读取OTG_FS_GRXSTSP->读取RxFifo中的数据->再次读取OTG_FS_GRXSTSP(这一步是关键!)->XFRC被置1->haltchannel->结束.

在读取完RxFifo中的数据后,OTG CORE会再次生成一个状态字放于RxFIFO中,必须靠读OTG_FS_GRXSTSP将这一状态字取走,然后才能产生XFRC标志为1. 我的程序最初没有做这一步,以至于RxFifo中的接受status字积累过多,最终沾满RxFifo,于是自然就发不出去后续的IN token了. (做flush RxFifo操作并不能清楚接受状态字).

说起来,这手册里的OTG部分,写的真不怎么样. 这么重要的信息没有重点阐述出来,而只是在27.16.4中的传输过程示例当中提到. 那些个示例中的传输过程图,我直到现在还看不懂.(因为看不懂,最初就没有仔细看,跳过了)

这次上传的例程,可以稳定可靠的读U盘,已测试10多种盘,包括几百G的大移动硬盘.以下时几点说明:

1. 本程序只进行读U盘扇区操作,其他什么都没有,什么都不做 (写U盘还没有做).
2. 本程序用查询方式进行,没有中断.
3. 本程序主循环部分支持热拔插U盘.
4. 本程序只支持Device class=8 (mass storage class); SubCass=6 (SCSI transparent command set); nterfaceProtocal=5 (bulk only); 且只有单个LOGIC UNIT的U盘.
5. 程序源代码以及注释,不能保证100%正确,仅供参考.

我的这个程序搞到现在,其实还有几个问题:
1. SubCass=6 (SCSI transparent command set), 但是似乎UFI命令也是所有U盘支持的,UFI根这个SCSI命令有什么关系?事实上我的程序完全是按照UFI spec来写的U盘命令.
2. 一个U盘有多个logic unit (LUN>0)时,如何支持? 我试图搜索,但是也没有找到什么有用的信息.

欢迎大家共同讨论.

UDiskPrgTest_TestedOK.rar (1.06 MB)

此帖出自stm32/stm8论坛

127

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-15 16:22 | 显示全部楼层
                                 mark

回复

使用道具 举报

101

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-15 16:55 | 显示全部楼层
                                 不错,第一个开源的STM32 USB HOST

回复

使用道具 举报

128

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-15 18:44 | 显示全部楼层
                                 很实用的资料

回复

使用道具 举报

96

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-15 19:42 | 显示全部楼层
                                 mark,膜拜一下~

回复

使用道具 举报

111

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-15 21:30 | 显示全部楼层
                                 不错的资料,估计很快就能用的上

回复

使用道具 举报

96

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-16 08:10 | 显示全部楼层
                                 学习之中

回复

使用道具 举报

95

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-16 08:39 | 显示全部楼层
                                 thanks a lot .

回复

使用道具 举报

84

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-16 10:27 | 显示全部楼层
                                 非常感谢啊,马上要用到了

回复

使用道具 举报

96

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-16 10:30 | 显示全部楼层
                                 mark

回复

使用道具 举报

96

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-16 12:42 | 显示全部楼层
                                 读下,谢谢了。

回复

使用道具 举报

113

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2010-12-16 16:58 | 显示全部楼层
                                 很好的资源,先下载了,估计能用上

回复

使用道具 举报

108

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-17 09:50 | 显示全部楼层
                                 必须顶,大牛!

回复

使用道具 举报

125

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-17 14:59 | 显示全部楼层
                                 第一个开源的USB host!谢谢!

回复

使用道具 举报

98

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-17 15:33 | 显示全部楼层
学习了,谢谢!

回复

使用道具 举报

110

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-20 10:46 | 显示全部楼层
                                 很好

回复

使用道具 举报

107

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-20 15:46 | 显示全部楼层
                                 谢谢

回复

使用道具 举报

98

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-20 16:31 | 显示全部楼层
                                 很好,可以省不少事了。

回复

使用道具 举报

118

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-20 16:39 | 显示全部楼层
                                 mark!~

回复

使用道具 举报

92

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-12-20 21:02 | 显示全部楼层
                                 不错的资料

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-3-29 23:06 , Processed in 0.570916 second(s), 17 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表