[AI] STM32格式化代码问题

[复制链接]
 楼主| duo点 发表于 2024-1-26 10:24 | 显示全部楼层 |阅读模式
目的是想实现数据存储,U盘拷出来,大致上是可以做出来了,不过发现还是有些小问题。
我的程序是直接用f_mkfs格式化了我的FLASH(W25Q64),也就是说插电脑不会再提示格式化。
数据使用FATFS的f_write存到一个文件"xxx.txt"中,,正常存数,U盘拷出来没问题,但是如果从PC机上复制一个文件进去U盘,重新拔插就会提示格式化了。。也就是说没办法正常当U盘使了。
如果把FATFS的程序注释掉,只使用U盘,那么可以正常存拿。
网上查了一圈的资料,发现有人说WINDOWS下格式化U盘是FAT32的格式,而FATFS的格式化是格式化成FAT12格式,那有没有办法即可以使用FATFS存数据,又可以正常的当U盘用,从电脑复制东西进来呢?

  顺便再问些其他的问题,FATFS的f_ioctl里面有个case GET_BLOCK_SIZE: 这个应该返回什么,W25Q64的BLOCK的大小是64KB,BLOCK的数量是128,但我在网上查了一圈正点原子那用同样的FLASH是8,差别很大。还有为什么我看很多FATFS教程里面,在diskio.c的dis_write里面,调用FLASH的写函数之前为什么没有擦除???FLASH的写不是必须要把当前的sector给擦了先么。。
冰春彩落下 发表于 2024-3-21 08:58 | 显示全部楼层
FATFS库格式化的默认文件系统是FAT12或FAT16,而大多数U盘使用的是FAT32文件系统
别乱了阵脚 发表于 2024-3-21 11:00 | 显示全部楼层
一般如果格式不一样,这可能导致在PC上重新插拔后提示格式化
江河千里 发表于 2024-3-21 13:00 | 显示全部楼层
你可以尝试手动将FLASH格式化为FAT32文件系统,而不是使用FATFS库的默认格式
暖了夏天蓝了海 发表于 2024-3-21 15:00 | 显示全部楼层
可以使用专门的格式化工具,如Windows的磁盘管理工具或者第三方的格式化工具来格式化FLASH为FAT32文件系统。
flycamelaaa 发表于 2024-3-21 16:40 | 显示全部楼层
格式化U盘为FAT32,以确保Windows可以正确识别和使用。
淡漠安然 发表于 2024-3-21 17:00 | 显示全部楼层
关于FATFS的f_ioctl里的case GET_BLOCK_SIZE,这个应该返回的是逻辑块的大小,而不是FLASH芯片的物理块大小
三生万物 发表于 2024-3-21 19:00 | 显示全部楼层
在W25Q64这样的SPI Flash中,逻辑块的大小通常是4KB,而物理块的大小是64KB。因此,你应该返回4KB作为逻辑块的大小。
powerantone 发表于 2024-3-21 19:00 | 显示全部楼层
检查你的FATFS配置和底层驱动实现,确保它们能够正确地处理来自Windows的文件操作。
光辉梦境 发表于 2024-3-21 21:00 | 显示全部楼层
关于为什么在diskio.c的disk_write里面没有擦除操作,这可能是因为FATFS库已经封装了擦除操作
远山寻你 发表于 2024-3-22 01:00 | 显示全部楼层
在一些Flash芯片中,写入数据之前确实需要先擦除对应的扇区,但是FATFS库通常会在写入数据时自动进行擦除操作,因此在disk_write里面可能不需要手动擦除
夜阑风雨 发表于 2024-3-22 07:00 | 显示全部楼层
直接跑例程就好了,就知道是什么逻辑了
一秒落纱 发表于 2024-3-22 09:00 | 显示全部楼层
我觉得可以改变一下你的U盘格式,可能就不会出现提示格式化问题
szt1993 发表于 2024-3-25 14:57 | 显示全部楼层
大多数U盘使用的是FAT32文件系统,跟ST的需求貌似有区别
Pretext 发表于 2024-3-25 15:45 | 显示全部楼层
估计是比较困难,一般来说存储格式不同就不好处理。
鹿鼎计 发表于 2024-3-25 16:02 | 显示全部楼层
看看windows端有没有可以打开FAT16的U盘软件
digit0 发表于 2024-3-25 16:48 | 显示全部楼层
估计想要实现还是挺困难的,建议想想别的方案

您需要登录后才可以回帖 登录 | 注册

本版积分规则

509

主题

2134

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部