关于stm32探索F407的USB HOST实验例程中的一个小BUG

2019-07-20 02:37发布

      首先感谢原子哥代码的分享,以及代码的规整性。
      问题:在使用F407USB host的过程中,发现例程有一个小BUG:当挂载一个U盘的时候,可以毫无问题的给出U盘的容量和剩余空间,但是如果拔掉这个U盘,换个不同的U盘插入,会发现显示的容量仍然是前一个U盘的数据。
      原因分析:发现导致该问题的原因是因为在DeviceDisconnected的时候,好像仅仅改变了全局变量FatFs对应盘符中的fs_type变量的值,并未清空整个结构体中的原有数据。在计算容量和剩余空间时,程序进行了数据有效性的判断,避免了额外的读写开销。然而当新盘插入时,因为原有数据未能清空,且原有数据符合有效性分析。因此,插入的新盘并未进行基本的FATFS操作去读取容量,而是简单调取FatFs中的残存数据。导致了该错误的产生。
      解决方法:在尝试了usb状态机中以及主程序中对DeviceDisconnected的查询过程插入FatFs变量清空无果后,发现可以通过fmount函数解决该问题。原例程是在初始化中进行了U盘的mount的,现在将其改到了在USH_User_App中挂载U盘,也即是在确认了合理U盘插入后,完成了USB协议后,再进行FATFS初始化。
      目前,改后的程序运行正常。不过由于未能完全通读整个工程的代码,不知是否还有没有潜在的逻辑错误或者BUG。欢迎进一步指正!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
Psheng
1楼-- · 2019-07-20 07:44
 精彩回答 2  元偷偷看……
翼行园子
2楼-- · 2019-07-20 12:47
 精彩回答 2  元偷偷看……
15198959644
3楼-- · 2019-07-20 16:37
谢谢分享!
三福哥
4楼-- · 2019-07-20 19:33
 精彩回答 2  元偷偷看……
huaohui
5楼-- · 2019-07-20 23:16
谢谢楼主分享!
15198959644
6楼-- · 2019-07-20 23:19
谢谢分享!

一周热门 更多>