首先感谢原子哥代码的分享,以及代码的规整性。
问题:在使用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。欢迎进一步指正! |