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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版