你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB Device + FatFS + SDIO 模拟U盘意外只读问题

[复制链接]
cntitan1982 提问时间:2018-8-14 16:31 /
又出了问题。

还是使用的是野火F429的开发板。现在想模拟一个U盘,通过USB Device接口,让PC直接读取开发板上SD卡的数据。

基本功能都很正常,PC可以识别出U盘,容量和剩余空间都显示正常,也能打开里面的文件夹和文件。

接着就发现了问题。

我先是删除了部分文件。弹出了进度条窗口,之后文件也正常的消失了。可是重新上电后,发现被删除的文件还在那里!

我重复了刚才的操作,并且把SD卡拔出来直接插PC上,被删除的文件依然存在,说明删除的操作没有成功。

接下来我又尝试了在开发板模拟U盘的情况下建立文件,也是貌似正常的建立了文件,打开,修改内容,保存并关闭。似乎都没有问题。

然而重启之后新文件就不见踪影了。

就好象这个U盘有只读属性,但是PC不知道一样。

感觉应该也是什么参数设置不对的问题,但我实在是刚接触USB,这方面的东西完全不了解,希望大家帮忙解惑!

先谢谢大家了!
收藏 评论9 发布时间:2018-8-14 16:31

举报

9个回答
feixiang20 回答时间:2018-8-15 00:08:46
初始化和配置参数设置都对吗,可能在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能。建议还是去看看野火教程【野火STM32视频教程:39-USB Mass Storage(SD卡模拟U盘】之类。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

cntitan1982 回答时间:2018-8-15 10:49:10
feixiang20 发表于 2018-8-15 00:08
初始化和配置参数设置都对吗,可能在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数 ...

应该是你说的这个问题。

我这个工程的接口文件都是在usb_storage_msd.c这个里面的。

现在这个问题大概是写盘的程序没有正确实现,因为我把写盘的函数整个删空,运行的结果和现在的错误状态是一致的。

现在正在查到底是什么问题。
tanic 回答时间:2018-8-16 13:26:00
咳咳,了解一下,引导扇区的问题。文件系统一般第一个扇区保存目录信息,windows上显示的文件图标根据第一个扇区的信息来的。要能打开文件看到实际的数据才说明文件保存成功。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

cntitan1982 回答时间:2018-8-16 13:35:46
tanic 发表于 2018-8-16 13:26
咳咳,了解一下,引导扇区的问题。文件系统一般第一个扇区保存目录信息,windows上显示的文件图标根据第一 ...

诡异的就是这里。

出问题的时候,建立文件夹,进去建立文件,改文件名,打开文件修改文件内容都没问题。关闭文件再打开也正常,显示的是修改后的内容。

但是实际上并没有写盘成功。

所以我怀疑windows显示这些内容的数据难道是在缓存里?
cntitan1982 回答时间:2018-8-16 13:46:13
问题解决了。

之前不是修改了USB写盘的接口函数,使之指向SD卡嘛,现在我直接在主程序中调用这个函数。向0扇区写入0。如果文件系统被破坏,则说明写入成功。

实验结果是,文件系统完好无损。证实这个接口函数确实没有起效。

但是这个函数是从SDIO+FatFS的例程里抄过来的,没道理出问题啊。这时我注意到那个例程里,初始化部分最前面有一句话,调用一个函数关闭了WiFi模块。因为开发板上的WiFi模块也是使用SDIO的。

最后把这句话抄到我的工程初始化之前,所有U盘新建、写入、删除功能就都正常啦。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3 结帖奖励

查看全部评分

cntitan1982 回答时间:2018-8-16 13:48:38
打了半天字没了……懒得打了

问题解决了。

结果就是开发板上SDIO还接了WiFi模块,在主程序初始化的地方调用函数禁用WiFi模块,就都正常了。
tanic 回答时间:2018-8-16 15:49:59
cntitan1982 发表于 2018-8-16 13:35
诡异的就是这里。

出问题的时候,建立文件夹,进去建立文件,改文件名,打开文件修改文件内容都没问题。 ...

这种小东西的确实被window缓存了,就是那种几十M的.exe也会被缓存,并没有实际写到SD中。你在USB驱动中调用SD读写函数,要根据实际返回结果,别一直返回OK,否则Windows以为操作成功了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Fily 回答时间:2018-8-20 10:47:50
提示: 作者被禁止或删除 内容自动屏蔽
wangertan 回答时间:2020-11-25 17:14:24
楼主还有这个模拟u盘的工程吗?我最近也在做 遇到了问题 希望看下工程看看那块出错了。谢谢了!我的邮箱:wangertan32@163.com 谢谢了!!

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版