打印
[STM32F1]

STM32+FATFS+FLASH+U盘出现BUG,各路大侠来看看

[复制链接]
3347|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jingjunlai|  楼主 | 2018-10-24 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的是想实现数据存储,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给擦了先么。。
沙发
mohanwei| | 2018-10-24 16:03 | 只看该作者
看一下格式化代码,记得是根据容量自动选择FAT12、FAT16或FAT32的

使用特权

评论回复
评论
jingjunlai 2018-10-24 16:30 回复TA
谢谢,确实是自动选取的。另外FAT12是不是没办法把一个1M以上的文件存进U盘里?我发现小文件都可以存,一存大的拔插就提示格式化了饿 
板凳
mohanwei| | 2018-10-24 17:08 | 只看该作者
单文件好像是最大2MB。
重点检查移植代码是否有bug

使用特权

评论回复
地板
mohanwei| | 2018-10-24 17:17 | 只看该作者
存储器有8MB大小,肯定是FAT16了。
以前用AT45DBxx,2MB都可以格式化为FAT16了

使用特权

评论回复
评论
jingjunlai 2018-10-25 14:13 回复TA
我看了下FATFS的代码,sector的size是4096,sector的count数量是2048的话,在f_mkfs函数里面必然会被格式化未fat12,达不到fat16的要求呢。 
5
huzi2099| | 2018-10-24 18:34 | 只看该作者
fatfs是统称,fat12是其中一种,window会根据容量大小选择格式不一定都是fat32,你说的问题可能还是硬件读写的问题,你可以截一下看看错写哪个地方了.
W25写数据有个256字节对齐的限制,是不是这里没弄对
那个blocksize就是一个扇区的字节数,因为之后的访问都是以扇区为单位,修改成128会引起兼容的问题,没做过相关的实验.

使用特权

评论回复
评论
jingjunlai 2018-10-25 15:51 回复TA
看了下SPI的读写看不出来哪里有问题。MAL_WRITE里面就是sector的擦除和sector的写一个扇区两个函数,格式化没问题,写一些小文件没问题,就是写够1MB后,拔插就会提示格式化。。。 
6
jingjunlai|  楼主 | 2018-10-25 16:44 | 只看该作者
额,原来我拿错料了,拿了W25Q80,难怪写超1MB就提示格式化

使用特权

评论回复
7
huzi2099| | 2018-10-25 19:06 | 只看该作者
那是错误处理那里没弄好

使用特权

评论回复
8
wakayi| | 2018-11-5 16:17 | 只看该作者
没有研究过这个问题

使用特权

评论回复
9
浅唱246| | 2019-9-26 11:11 | 只看该作者
你好,请教一个问题,我这总是提示格式化失败可能是什么原因呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

65

帖子

2

粉丝