Appearance
FATFS
文件系统简介
没有文件系统的时候不同设备之间的文件拷贝会十分麻烦, 并且文件的访问会很麻烦
比较常用的文件系统有FAT12, FAT16, FAT32, exFAT, NTFS
FAT32的兼容性比较好, 但是不支持4GB以上的文件
exFAT可以保存4GB以上的文件
NTFS基于安全性的文件系统, 是Windows使用的文件系统, 支持大文件和超大文件分区
FATFS支持FAT32和exFAT
FAT: File Alloction Table文件分配表
FATFS文件系统简介
层次架构
配置项
FatFs - Configuration Options (elm-chan.org)
底层函数
源文件移植
扩展代码(优化)
- ff.c文件
把dir_sdi函数的static解除, 方便之后的图片操作
还有就是一些在使用OS的时候需要进行修改的代码
优化
在使用长文件名的时候会使用到两个数组
主要就是会在两个数组中进行两种编码的转换, 可以把这两个数组放在NOR Flash里面, 之后从Flash里面读取, 主要就是在这个数组里面找到现在的字符对应的编码, 之后从他后面的位置获取到转换后的代码
c
WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */
DWORD uni, /* UTF-16 encoded character to be converted */
WORD cp /* Code page for the conversion */
)
{
WCHAR t[2];
WCHAR c;
uint32_t i, li, hi;
uint16_t n;
uint32_t gbk2uni_offset = 0;
if (uni < 0x80)
{
c = uni; /* ASCII,直接不用转换 */
}
else
{
hi = ftinfo.ugbksize / 2; /* 对半开 */
hi = hi / 4 - 1;
li = 0;
for (n = 16; n; n--) /* 二分法查找 */
{
i = li + (hi - li) / 2;
norflash_read((uint8_t *)&t, ftinfo.ugbkaddr + i * 4 + gbk2uni_offset, 4); /* 读出4个字节 */
if (uni == t[0]) break;//找到了
if (uni > t[0])
{
li = i;//进行位置的偏移
}
else
{
hi = i;
}
}
c = n ? t[1] : 0;//查看是不是找到了,是的话更新
}
return c;
}
CubeMX移植
STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)_st cube sd卡-CSDN博客