# 硬件

硬件芯片

NorFlash: winbond 25Q128JVSIQ 128M

下载FatFS源码

首先下载到FATFS源码,把doc目录打开,好好看下文档

修改数据类型

然后打开ff.h,修改里面的数据类型,我之前把ff.h直接包含到了我的项目总头文件里面,由于有些数据类型不兼容,导致了项目崩溃。 最后没时间去看这些数据类型,就单独建了个C文件,把文件系统相关的操作都放在这里操作,以免影响其他部分。

修改配置

ffcong.h中设置VOLUMES为1,FF_MAX_SS以及FF_MIN_SS都为一个擦除单位的大小,我是4096.其他不了解的要么不管,要么可看doc来设置。

格式化NorFlash

如果需要格式化norflash,那也要使能f_mkfs.

如果flash已经由系统初始化完成了,那diskio.c中initialize和status函数直接返回0,read和write就把buffer中的数据按指定大小存入flash即可。

修改diskio.c与Flash对接

ioctl中注意返回sector的数量和block_size的大小,sector我返回128,因为我总大小只有512K。block_size返回1就行了。

最后是示例程序:如果norflash第一次使用,先f_mkfs,如果flash较小,则不创建分区表,mkfs的时候传入sfd参数即可

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
FATFS myfat;
FIL filtest;
void fat_app_test()
{
    int res;
    res = f_mount(&myfat,"0:",1);
    opencpu_printf("mount res:%d\n",res);
    res = f_open(&filtest,"0:/test.txt",FA_CREATE_NEW|FA_WRITE|FA_READ);
    opencpu_printf("open:%d\n",res);
    f_write(&filtest, "Hello,World!", 12, &res);
    res = f_size(&filtest);
    opencpu_printf("file size:%d\n",res);
    f_close(&filtest);
}