找回密码
 立即注册
查看: 1988|回复: 12

最精简的文件系统 Petit FATFS@AI8051U内核

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-8-31 10:28:12 | 显示全部楼层 |阅读模式
本帖最后由 tzz1983 于 2024-9-1 20:35 编辑

AI8051U, 免费 嵌入式 FAT 文件系统
FATFS 作为一个长期霸榜的免费嵌入式FAT文件系统,其稳定性自然不用多说了。
此贴介绍的是FATFS的一个子集 Petit FATFSAI8051U内核上的应用。
引用官网的 Petit FATFS 的介绍:

  • 非常小的内存消耗 44 字节RAM
  • 非常小的代码大小 2K 左右 ROM
  • 支持 FAT12  FAT16  FAT32

可以看到,Petit FATFS 非常精巧,仅需44字节RAM即可运行,
作为FATFS的子集,仅支持基本读写功能,功能上的限制如下:
  • 只支持一个卷,同一时刻只打开一个文件,(即当打开一个文件的同时,上一个打开的文件自动关闭了)
  • 不支持长文件名,没有格式化功能,不支持时间戳.
  • 写入操作的限制,只能改写现有的文件的内容,不能在文件未尾追加数据而使文件变大,也不能创建新的文件.

移植到AI8051U
  • 在官网下载最新代码后,将source文件夹复制项目文件夹
  • 项目内添加 pff.c   diskio.c
  • 添加三个磁盘接口函数,官方已给出了框架,只要在函数内填入自己的代码就可以了,比较简单(见例程)

移植感言: 太顺利了,文件拉进项目直接编译就是0错0警,这搞得我有点不太适应啊,^_^

应用笔记: 先挂载文件系统, 接着打开文件
* 读文件比较简单 FRESULT pf_read (void* buff, UINT btr, UINT* br);
* 第一个参数是数据指针, 第二个参数是期盼读取的字节数量, 第三个参数是返回实际读取到的字节数量.
* 函数运行过后,如果 *br<btr, 则说已经读到文件未尾, 没有更多的数据可读了.
* 返回值 0 表示没有错误, 其它为错误编号.
*
* 写操作需要遵守一定的序列:
* 第一步: 用pf_lseek()设定文件指针, 注意, 必须对齐扇区边界.
* 第二步: pf_write()写入数据,参数和读时差不多,函数操作后, 可判断返回值是否发生错误.
* 如果 *bw<btw, 则说已经写到文件未尾, 此版本不可追加数据, 额外的写入将被忽略.
* 可反复调用pf_write()持续写入数据.
* 第三步: 见演示代码, 传入NULL指针和0长度参数,将缓存数据立即写入磁盘,此步不可缺少.
* 三个步骤,缺省任何一步都可能写入失败, 如果缺少第一步, FAT将四舍五入自动对齐到扇区边界,
   如果是这样,你自己都不知道你的数据写到哪去了


动手实践:
由于 Petit FATFS 没有格式化功能, 我们借助AI32G的MSC例程,
将AI32G12K128的最后64K  EEPROM 格式化为一个 64KB的小U盘。
MSC例程包: 22-MSC(Mass Storage Class)协议范例.rar (218.48 KB, 下载次数: 109)
硬件为屠龙刀或任意AI32G12K128为芯片的实验板
注意以下几个地方要选择正确:
截图202408311007265007.jpg

将MSC(Mass Storage Class)协议范例的代码下载到芯片,
Type-C接口重新上电,电脑上将会看一个64KB的小U盘,
格式化后,顺带将项目的 main.c 复制到U盘,等会可以用Petit FATFS 打开文件查看内容。

以上操作就绪后,重新上电,将本例程的Petit FATFS演示代码烧入。
同时打开ISP桌面软件的CDC串口助手
激动人心的时刻到了:
截图202408311016489024.jpg

Petit FATFS 正确的读出了main.c的文件内容,并将其打印到了CDC串口。

代码如下:
    printf("演示Petit FATFS读写文件\n");     
    if( pf_mount(&fs) ){ //第一步: 用 pf_mount() 挂载文件系统
        printf("挂载文件系统失败");
        while(1);
    }
    printf("已挂载文件系统\n");        
    if( pf_open("main.c") ){//第二步,用 pf_open 打开文件,如果文件在根目录,可以省去路径,直接文件名即可
        printf("打开文件失败");
        while(1);
    }
    printf("已打开文件 main.c \n");      
   
    ret = pf_read(text,512,&br);//读文件内容, 请看下面的应用笔记
    if( (ret==RES_OK) && (br>0) ){
        printf("FATFS读取到 main.c 的内容为:\n");
        UartSend(text,br);
    }   
  
     //写文件
    pf_lseek(512);      //指定文件指针,传入的参数必须对齐扇区边界, 即能整除512, 从扇区的零偏移处开始写入
    pf_write("\n//这是我用 Petit FATFS 改写的内容\n",sizeof("\n//这是我用 Petit FATFS 改写的内容\n"),&bw);
    pf_write("\n//可以反复持续写入\n",sizeof("\n//可以反复持续写入\n"),&bw);
    pf_write(0,0,&bw);  //重要!!! 此句不可缺省, 前两个参数为都是0,表示本次写操作已结束,缓存立即写入磁盘
   
    printf("\n\nDEMO END");

演示例程包:
Petit_FATFS - 演示.rar (111.2 KB, 下载次数: 145)

Petit FATFS 是我见过的最为精简的FAT文件系统,44 RAM + 2K ROM ,
太实用了, 当然了,有一些功能限制,但是,没有最好的,只有最适合的。

用它来和电脑交换文件数据,不要太好。

2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!

本帖被以下淘专辑推荐:

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2024-8-31 11:10:08 | 显示全部楼层

把楼主移植的这个文件系统用起来的,
【免费+包邮 送】 超级强大的 AI8051U 实验箱 !!!
截图202408311108473075.jpg

AI8051U全球大学计划,研发实验箱原理图定稿
===支持 1T 8051指令集32位8051指令集
AI8051U 研发演示程序发布史无前例无比强大 的 实验程序

===2024/8/26 第4次
AI8051U 将是第20届全国大学生智能汽车竞赛推荐参赛芯片
PWM@135MHz
TFPU@108MHz 以上,实际测试可以到 135MHz
===硬件三角函数,硬件浮点运算器
CPU32@42MHz
DMA 支持外设直接到外设

        AI 32位8051
8 0 5 1  凌绝顶,核心算力在哪里 !
算力一日同风起,扶摇直上九万里 !
百兆硬件真浮点,三角函数运算器 !
神州春色三万里,封神榜永远是你 !
===老骥伏枥志在万里,我们再战三万里

AI8051U最新数据手册下载
深圳国芯人工智能有限公司-产品_AI8051U系列 (stcai.com)


AI8051U实验箱 原理图 / PCB 定稿,研发程序首次发布
从下面这个链接下载原理图/PCB和开源程序

深圳国芯人工智能有限公司-实验箱 (stcai.com)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-8-31 11:59:41 | 显示全部楼层
如果能外扩flash就更完美了

点评

可以外扩呀,就是改接口函数就行了. 这只是个例子呀,用内部EEPROM是为了方便大家体验.  详情 回复 发表于 2024-8-31 12:03
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-8-31 12:03:12 | 显示全部楼层
本帖最后由 tzz1983 于 2024-8-31 12:04 编辑
so*** 发表于 2024-8-31 11:59
如果能外扩flash就更完美了

可以外扩flash,就是改接口函数就行了.
这只是个例子呀,用内部EEPROM是为了方便大家体验.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-8-31 13:40:35 | 显示全部楼层
截图202408311340216751.jpg

点评

是i2s音频总线,不是i2c数据总线  发表于 2024-8-31 19:18
这个图片代表什么意思?  发表于 2024-8-31 13:47
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-04-30 08:40:57
已绑定手机

15

主题

630

回帖

730

积分

高级会员

积分
730
发表于 2024-11-1 13:59:18 | 显示全部楼层
谢谢分享
STC 666 888
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:198
  • 最近打卡:2025-05-01 00:16:05
已绑定手机

24

主题

345

回帖

1629

积分

金牌会员

积分
1629
发表于 2024-11-2 13:35:15 | 显示全部楼层
感谢分享
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:198
  • 最近打卡:2025-05-01 00:16:05
已绑定手机

24

主题

345

回帖

1629

积分

金牌会员

积分
1629
发表于 2024-11-2 13:39:40 | 显示全部楼层

是个细心的人,音频总线是i2s
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:122
  • 最近打卡:2025-05-01 08:43:07
已绑定手机

2

主题

106

回帖

262

积分

中级会员

积分
262
发表于 2024-12-7 09:20:58 | 显示全部楼层

感谢分享

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:145
  • 最近打卡:2025-04-30 07:59:27

2

主题

73

回帖

232

积分

中级会员

积分
232
发表于 2024-12-8 23:56:49 | 显示全部楼层

打卡学习

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:41 , Processed in 0.481091 second(s), 130 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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