初级会员
- 积分
- 146
- 金钱
- 146
- 注册时间
- 2017-8-25
- 在线时间
- 23 小时
|
本帖最后由 zhuzhutang 于 2017-9-18 19:42 编辑
最近在学习fatfs文件系统,了解了FAT文件格式的基本知识,也用了fatfs来管理格式化为fat32的SD卡的数据,后来想想,能不能在单片机内部的flash也上一个fatfs系统呢,先不考虑flash擦除寿命的问题,这种想法权当拿来练手。
然后查了一下资料,确实已经有人已经实现了,但是所给出的资料不多。于是开始按照前一段时间搞的SD+fatfs的经验,开始着手将fatfs移植到stm32f103rct6来管理其内部的flash,如果你做过SD+fatfs的话,其实在单片机内部flash里搞fatfs还是挺简单的(别喷,纯粹个人观点,也许是本人水平还不够,未达到那个点上),不过因为单片机内部flash空间比较小,所以内部flash的数据组织形式为FAT12格式。
MCU:stm32f103rct6, 256Kflash。
文件系统格式:FAT12,1扇区=512字节,1簇=1扇区。
首先你得将单片机内部的flash"格式化"为FAT12格式,其实就是编写引导扇区DBR啦。本来想在网上找个软件将我的SD卡格式化成FAT12格式的(100K空间大小),无奈FAT12实在太古老了,找了N久都没找到,最低的也是FAT16的。没办法,只能自己搞一个FAT12的DBR出来了。其实FAT12格式的引导扇区要改的东西不多,也就是BPB_BytesPerSec(每扇区字节数)、BPB_SecPerClus(BPB_SecPerClus)、BPB_TotSec16(扇区总数)等一些重要的参数而已。不过我的BPB_FATSz16(每个FAT表所占扇区数)采用默认的0x09,没有去改它,我不大确定这个是否需要根据具体容量大小来改,因为我在网上找的资料都说FAT表占据1到18扇区,如果改了的话那就不是这个扇区范围内了。如有道友知道,烦请告知一下。
附件中有我划好了100K flash空间的bin文件,我把单片机内部的0x0801000地址开始的后面100K空间大小由FATFS系统管理,将flash"格式化"为FAT12,其实就是将这个bin文件烧录到0x0801000地址中,0x0801000地址的前512个字节就是引导扇区内容,fatfs在挂载设备时会读取设备逻辑扇区0的内容(前512个字节),以获得文件系统所需的信息,如信息非法,人家就不让你挂载进去,所以有些童鞋说设备老是挂载不成功,这时你可以跟一下这些函数:f_mount->find_volume->check_fs,check_fs这个函数就是读取你的引导扇区内容的,看一下读取的信息对不对吧。
记录到此,继续搬砖!
|
|