fatfs0.10在stm32f103ve上得移植

干这个活可把我累死了哈哈 里面太多坑了,话不多说,

  1. 选用FatFs R0.10开源的Fatfs文件系统
  2. Fatfs 文件系统的介质为 芯片内部flash,应用程序使用
    的内部 FLASH 是从 0x08000000 至(0x08000000+0x0000406c)地址的空间区域。所以从扇区 1(地址 0x08008000)后的存储空间都可以作其它用途,使用这些存储空间时不会篡改应用程序空间的数据。 从扇区1开始为文件系统用。
    在这里插入图片描述
  3. 刚开始用的是f0.13c后来发现在创建文件系统的时候写进去得位置和读出来的位置根本不一致,假设写位置在0x00,但是读的时候缺是0x03.所以读出来永远都不会对所以判断文件系统的时候,返回nofilesyterm。F0.13建议大家以后也不要用这个版本。
  4. 文件系统格式FAT12 1扇区=1024字节,1簇=1扇区,stm32f103Veflash内存为512K,每页为2k,所以flash擦除单位为2K(因为没有找到103Ve得flash结构分布,所以一直以为是128页,每页为4k,最后创建文件写然后读的时候一直找不到路径,最后调试发现因为没有擦除所以写路径的时候返回0x02(块为脏块)),将flash从0x0808000到末尾给fatfs文件系统,一共512-8等于504块,但是防止出错,fatfs块数量设为500,如图所示为stm32f103vet6得内部flash结构图

fatfs0.10在stm32f103ve上得移植_第1张图片
fatfs0.10在stm32f103ve上得移植_第2张图片
写读数据流程:(写数据由于擦除得时候是以2*1024byte擦除,但是fatfs写块大小为1024,所以这里需要改动)在擦除前现将原有的不擦除的那一块写到缓存区中,然后擦除,之后将buff得数据写入,放在缓存区得数据在写到原来的位置中
开始在任务中跑了,刚开始只能在main函数中跑起来而且跑起来的时候整个工程别的任务根本跑步起来,在任务中只要加fatfs到close得时候也就是网flash写的时候单点调试没事,但是运行起来就卡住了,最后上网查询说是fatfs多任务问题,借鉴网上的信息将syscal.c文件中的代码 ff_cre_syncobj、ff_del_syncobj、ff_req_grant、ff_rel_grant修改FreeRTOS匹配,在文件系统中使能任务等一系列操作,文fatfs0.10在stm32f103ve上得移植_第3张图片目前实现得功能:已经在任务中跑起来了,f_mount挂载、f_mkfs格式化、f_mkdir创建目录、f_open、f_write、f_close。之后在打开,读,关闭 卸载等功能函数后期将文件解析任务放进去。fatfs0.10在stm32f103ve上得移植_第4张图片

你可能感兴趣的:(嵌入式)