野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16467|回复: 5

SPI flash fatfs文件系统问题

[复制链接]
发表于 2017-3-30 01:04:10 | 显示全部楼层 |阅读模式
      在做spi flash fatfs文件系统实验,代码:     SPI_FLASH_BufferRead(buff, sector << 12, count<<12);      // 这里偏移12位,相当于乘以4096,意思是不是每次读,最少都要读够4K大小的数据。

     write_addr = sector<<12;   
     SPI_FLASH_SectorErase(write_addr);
     SPI_FLASH_BufferWrite(buff,write_addr,4096);                     // 这里偏移12位,意思是不是也是写数据也是一次性最少要写4k大少的数据。


     想问的是,现在flash的fatfs系统是以4K大小扇区管理,如果我想改成以512字节扇区管理。这些偏移量应该怎样改啊?还有函数TM_FATFS_FLASH_SPI_disk_ioctl()里面的
     GET_SECTOR_SIZE,GET_BLOCK_SIZE,GET_SECTOR_COUNT,应该怎样计算。

回复

使用道具 举报

发表于 2017-3-30 08:58:48 | 显示全部楼层
是,flash擦除必须以4096为单位,不能改小
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-30 09:47:20 | 显示全部楼层
flyleaf 发表于 2017-3-30 08:58
是,flash擦除必须以4096为单位,不能改小

那如果我尝试,扇区是以512字节来管理,是不是这几行代码读写改成这样:
SPI_FLASH_BufferRead(buff, sector * 512, count * 512);

SPI_FLASH_BufferWrite(buff,write_addr * 512, count * 512);
回复 支持 反对

使用道具 举报

发表于 2017-3-30 10:09:56 | 显示全部楼层
niucheng1991 发表于 2017-3-30 09:47
那如果我尝试,扇区是以512字节来管理,是不是这几行代码读写改成这样:
SPI_FLASH_BufferRead(buff, se ...

不能用512的,你这是512个扇区了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-30 16:16:43 | 显示全部楼层
我有个音频模块,可以外接flash模块的,我用音频模块接上开发板的flash,把音频模块插上电脑格式化flash,其实音频模块就是模拟一个U盘吧。格式化完FATfs文件系统。开发板子上电,系统无法挂载fat系统。在这行
代码报错了:
  if (LD_WORD(fs->win+BPB_BytsPerSec) != SS(fs))                /* (BPB_BytsPerSec must be equal to the physical sector size) */
                return FR_NO_FILESYSTEM;                          // BPB_BytePerSec = 512不等于4096 。
我的疑问是:是不是格式化的时候把flash以512字节大小扇区格式化。然后,野火例程是以4096扇区读写的。所以不能识别和挂载?
回复 支持 反对

使用道具 举报

发表于 2017-6-29 09:55:26 | 显示全部楼层
flyleaf 发表于 2017-3-30 08:58
是,flash擦除必须以4096为单位,不能改小

擦除是以4096为单位,但是写数据也要写完整个扇区么?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-15 14:00 , Processed in 0.029197 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表