又出了问题。 还是使用的是野火F429的开发板。现在想模拟一个U盘,通过USB Device接口,让PC直接读取开发板上SD卡的数据。 基本功能都很正常,PC可以识别出U盘,容量和剩余空间都显示正常,也能打开里面的文件夹和文件。 接着就发现了问题。 我先是删除了部分文件。弹出了进度条窗口,之后文件也正常的消失了。可是重新上电后,发现被删除的文件还在那里! 我重复了刚才的操作,并且把SD卡拔出来直接插PC上,被删除的文件依然存在,说明删除的操作没有成功。 接下来我又尝试了在开发板模拟U盘的情况下建立文件,也是貌似正常的建立了文件,打开,修改内容,保存并关闭。似乎都没有问题。 然而重启之后新文件就不见踪影了。 就好象这个U盘有只读属性,但是PC不知道一样。 感觉应该也是什么参数设置不对的问题,但我实在是刚接触USB,这方面的东西完全不了解,希望大家帮忙解惑! 先谢谢大家了! |
stm32 USB的CDC类传输掉数据
STM32F105 USB接收数据不断进入中断,出现“死机”现象
关于STM32CubeMX配置的USB例程电脑无法识别问题
STM32F407 USB-HS-OTG是否不外接PHY可以做虚拟串口?
如何做一个USB从机键盘用stm32f407
用STM32F4 Cube MX生成的USB Device C代码的BUG
USB Device + FatFS + SDIO 问题
STM32H7配置成USB DEVICE时,连接电脑时不进入中断
STM32F446 USB和串口1 冲突
USB HID 枚举过程出现stall pid是什么原因?
评分
查看全部评分
应该是你说的这个问题。
我这个工程的接口文件都是在usb_storage_msd.c这个里面的。
现在这个问题大概是写盘的程序没有正确实现,因为我把写盘的函数整个删空,运行的结果和现在的错误状态是一致的。
现在正在查到底是什么问题。
评分
查看全部评分
诡异的就是这里。
出问题的时候,建立文件夹,进去建立文件,改文件名,打开文件修改文件内容都没问题。关闭文件再打开也正常,显示的是修改后的内容。
但是实际上并没有写盘成功。
所以我怀疑windows显示这些内容的数据难道是在缓存里?
之前不是修改了USB写盘的接口函数,使之指向SD卡嘛,现在我直接在主程序中调用这个函数。向0扇区写入0。如果文件系统被破坏,则说明写入成功。
实验结果是,文件系统完好无损。证实这个接口函数确实没有起效。
但是这个函数是从SDIO+FatFS的例程里抄过来的,没道理出问题啊。这时我注意到那个例程里,初始化部分最前面有一句话,调用一个函数关闭了WiFi模块。因为开发板上的WiFi模块也是使用SDIO的。
最后把这句话抄到我的工程初始化之前,所有U盘新建、写入、删除功能就都正常啦。
评分
查看全部评分
问题解决了。
结果就是开发板上SDIO还接了WiFi模块,在主程序初始化的地方调用函数禁用WiFi模块,就都正常了。
这种小东西的确实被window缓存了,就是那种几十M的.exe也会被缓存,并没有实际写到SD中。你在USB驱动中调用SD读写函数,要根据实际返回结果,别一直返回OK,否则Windows以为操作成功了。
评分
查看全部评分