打印

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

[复制链接]
280|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
首先感谢原子哥代码的分享,以及代码的规整性。
      问题:在使用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。欢迎进一步指正!

使用特权

评论回复

相关帖子

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

本版积分规则

377

主题

377

帖子

0

粉丝