USB Device + FatFS + SDIO 模拟U盘意外只读问题
又出了问题。还是使用的是野火F429的开发板。现在想模拟一个U盘,通过USB Device接口,让PC直接读取开发板上SD卡的数据。
基本功能都很正常,PC可以识别出U盘,容量和剩余空间都显示正常,也能打开里面的文件夹和文件。
接着就发现了问题。
我先是删除了部分文件。弹出了进度条窗口,之后文件也正常的消失了。可是重新上电后,发现被删除的文件还在那里!
我重复了刚才的操作,并且把SD卡拔出来直接插PC上,被删除的文件依然存在,说明删除的操作没有成功。
接下来我又尝试了在开发板模拟U盘的情况下建立文件,也是貌似正常的建立了文件,打开,修改内容,保存并关闭。似乎都没有问题。
然而重启之后新文件就不见踪影了。
就好象这个U盘有只读属性,但是PC不知道一样。
感觉应该也是什么参数设置不对的问题,但我实在是刚接触USB,这方面的东西完全不了解,希望大家帮忙解惑!
先谢谢大家了! 初始化和配置参数设置都对吗,可能在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能。建议还是去看看野火教程【野火STM32视频教程:39-USB Mass Storage(SD卡模拟U盘】之类。 feixiang20 发表于 2018-8-15 00:08
初始化和配置参数设置都对吗,可能在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数 ...
应该是你说的这个问题。
我这个工程的接口文件都是在usb_storage_msd.c这个里面的。
现在这个问题大概是写盘的程序没有正确实现,因为我把写盘的函数整个删空,运行的结果和现在的错误状态是一致的。
现在正在查到底是什么问题。 咳咳,了解一下,引导扇区的问题。文件系统一般第一个扇区保存目录信息,windows上显示的文件图标根据第一个扇区的信息来的。要能打开文件看到实际的数据才说明文件保存成功。
tanic 发表于 2018-8-16 13:26
咳咳,了解一下,引导扇区的问题。文件系统一般第一个扇区保存目录信息,windows上显示的文件图标根据第一 ...
诡异的就是这里。
出问题的时候,建立文件夹,进去建立文件,改文件名,打开文件修改文件内容都没问题。关闭文件再打开也正常,显示的是修改后的内容。
但是实际上并没有写盘成功。
所以我怀疑windows显示这些内容的数据难道是在缓存里? 问题解决了。
之前不是修改了USB写盘的接口函数,使之指向SD卡嘛,现在我直接在主程序中调用这个函数。向0扇区写入0。如果文件系统被破坏,则说明写入成功。
实验结果是,文件系统完好无损。证实这个接口函数确实没有起效。
但是这个函数是从SDIO+FatFS的例程里抄过来的,没道理出问题啊。这时我注意到那个例程里,初始化部分最前面有一句话,调用一个函数关闭了WiFi模块。因为开发板上的WiFi模块也是使用SDIO的。
最后把这句话抄到我的工程初始化之前,所有U盘新建、写入、删除功能就都正常啦。 打了半天字没了……懒得打了
问题解决了。
结果就是开发板上SDIO还接了WiFi模块,在主程序初始化的地方调用函数禁用WiFi模块,就都正常了。 cntitan1982 发表于 2018-8-16 13:35
诡异的就是这里。
出问题的时候,建立文件夹,进去建立文件,改文件名,打开文件修改文件内容都没问题。 ...
这种小东西的确实被window缓存了,就是那种几十M的.exe也会被缓存,并没有实际写到SD中。你在USB驱动中调用SD读写函数,要根据实际返回结果,别一直返回OK,否则Windows以为操作成功了。
楼主还有这个模拟u盘的工程吗?我最近也在做 遇到了问题 希望看下工程看看那块出错了。谢谢了!我的邮箱:wangertan32@163.com 谢谢了!!
页:
[1]