0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨RA系列FSP库开发实战指南之FatFs文件系统介绍

瑞萨嵌入式小百科 来源:野火电子 2026-03-18 13:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

第24章

基于FLASH的FatFs文件系统移植

24.1

文件系统

即使读者可能不了解文件系统,读者也一定对“文件”这个概念十分熟悉。数据在PC上是以文件的形式储存在磁盘中的,这些数据的形式一般为ASCII 码或二进制形式。在上一章我们已经写好了串行 Flash芯片的驱动函数,我们可以非常方便的在串行Flash芯片上读写数据。如需要记录文字,可以把这些文字转化成相应编码的字符串,存储在数组中,然后调用串行FLASH的写函数,把数组内容写入到串行Flash芯片的指定地址上,在需要的时候从该地址把数据读取出来,再对读出来的数据以相应编码的格式进行解读。

但是,这样直接存储数据会带来极大的不便,如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及应以何种格式来解读数据。就如同一个巨大的图书馆无人管理,杂乱无章地存放着各种书籍,难以查找所需的文档。想象一下图书馆的采购人员购书后,把书籍往馆内一扔,拍拍屁股走人,当有人来借阅某本书的时候,就不得不一本本地查找。这样直接存储数据的方式对于小容量的存储介质如EEPROM还可以接受,但对于大容量Flash芯片或者SD卡之类的大容量设备,我们需要一种高效的方式来管理它的存储内容。

这些管理方式即为文件系统,它是为了存储和管理数据,而在存储介质建立的一种组织结构,这些结构包括操作系统引导区、目录和文件。常见的windows下的文件系统格式包括FAT32、NTFS、exFAT。在使用文件系统前,要先对存储介质进行格式化。格式化先擦除原来内容,在存储介质上新建一个文件分配表和目录。这样,文件系统就可以记录数据存放的物理地址、剩余空间。

使用文件系统时,数据都以文件的形式存储。写入新文件时,先在目录中创建一个文件索引,它指示了文件存放的物理地址,再把数据存储到该地址中。当需要读取数据时,可以从目录中找到该文件的索引,进而在相应的地址中读取出数据。具体还涉及到逻辑地址、簇大小、不连续存储等一系列辅助结构或处理过程。

文件系统的存在使我们在存取数据时,不再是简单地向某物理地址直接读写,而是要遵循它的读写格式。如经过逻辑转换,一个完整的文件可能被分开成多段存储到不连续的物理地址,使用目录或链表的方式来获知下一段的位置。

上一章的串行Flash芯片驱动只完成了向物理地址写入数据的工作,而根据文件系统格式的逻辑转换部分则需要额外的代码来完成。实质上,这个逻辑转换部分可以理解为当我们需要写入一段数据时,由它来求解向什么物理地址写入数据、以什么格式写入及写入一些原始数据以外的信息(如目录)。这个逻辑转换部分代码我们也习惯称之为文件系统

24.2

FatFs文件系统介绍

上面提到的逻辑转换部分代码(文件系统)即为本章的要点,文件系统庞大而复杂,它需要根据应用的文件系统格式而编写,而且一般与驱动层分离开来,很方便移植,所以工程应用中一般是移植现成的文件系统源码。

FatFs是面向小型嵌入式系统的一种通用的FAT文件系统。它完全是由ANSI C语言编写并且完全独立于底层的I/O介质。因此它可以很容易地不加修改地移植到其他的处理器当中,如8051、PIC、AVR、SH、Z80、H8、ARM等。FatFs支持FAT12、FAT16、FAT32等格式,所以我们利用前面写好的串行Flash芯片驱动,把FatFs文件系统代码移植到工程之中,就可以利用文件系统的各种函数,对串行Flash芯片以“文件”格式进行读写操作了。

FatFs文件系统的源码可以从FatFs官网下载:

FatFs官网

http://elm-chan.org/fsw/ff/00index_e.html

FatFs源码下载连接

http://elm-chan.org/fsw/ff/archives.html

24.2.1

FatFs特性

DOS/Windows兼容的FAT/exFAT文件系统。

与平台无关,易于移植。

程序代码和工作区的占用空间非常小。

支持以下各种配置选项:

ANSI/OEM或Unicode中的长文件名。

exFAT文件系统,64位LBA和GPT可存储大量数据。

RTOS的线程。

多个卷(物理驱动器和分区,最多10个卷)。

可变扇区大小。

多个代码页,包括DBCS。

只读,可选API,I/O缓冲区等…

24.2.2

FatFs层级结构

FatFs层级结构如下:

34f474e8-20ed-11f1-90a1-92fbcf53809c.png

应用层调用FatFs模块接口,FatFs调用底层接口,实现对USB、SD卡等存储设备的操作(需提供RTC时钟给FatFs模块)。

24.3

源码下载

354db814-20ed-11f1-90a1-92fbcf53809c.png

FatFs和Petit FatFs:

PetitFatFs是用于小型8位微控制器的FatFs模块的子集。它是按照ANSI C编写的,并且与磁盘I/O层完全分开。即使RAM大小小于扇区大小,也可以将其合并到内存有限的微型微控制器中。我们这里选择完整版的FatFs。

24.3.1

源码结构

在移植FatFs文件系统到开发板之前,我们先要到 FatFs的官网获取源码,官网有对FatFs做详细的介绍,有兴趣可以了解。解压之后可看到里面有 documents和source这两个文件夹和LICENSE.txt文件,见图FatFs文件目录。documents文件夹里面是一些使用帮助文档;source才是FatFs文件系统的源码。而LICENSE.txt则是使用FatFs所需遵循的许可证。

FatFs 0.15版本的源码结构如下:

35a76026-20ed-11f1-90a1-92fbcf53809c.png

35ffbb18-20ed-11f1-90a1-92fbcf53809c.png

24.3.1.1

FatFs帮助文档

打开documents文件夹,可看到如图documents文件夹的文件目录:

aedf4e26-21b6-11f1-90a1-92fbcf53809c.png

documents这个文件夹下面存放的是FatFs模块文档:

• 其中doc文件夹里面是编译好的html文档,讲的是FatFs里面各个函数的使用方法,这些函数都是封装好的函数,利用这些函数我们就可以操作串行Flash芯片。

• res文件夹包含doc文件夹下文件需要用到的图片,还有四个名为app.c文件,内容都是FatFs具体应用例程。

• 00index_e.html相当于FatFs的主页。

• updates.txt记录了各个版本的更新。

24.3.1.2

FatFs源码

打开src文件夹,可看到如图source文件夹的文件目录:

af33adcc-21b6-11f1-90a1-92fbcf53809c.png

source这个文件夹下面存放的是FatFs源码:

• diskio.c/.h:IO层的实现。

• ff.c/.h:FatFs核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的函数,利用这些函数实现文件的读写。

ffconf.h:这个头文件包含了对FatFs功能配置的宏定义,通过修改这些宏定义就可以裁剪FatFs的功能。

• ffsystem.c:操作系统相关。

• ffunicode.c:unicode编码相关。FF_USE_LFN !=0时必须包含此文件。

• 00history.txt:介绍了FatFs的版本更新情况。

• 00readme.txt:说明了当前目录下各个文件的功能。

24.3.2

长文件名

FatFs模块支持FAT文件系统的长文件名(LFN)扩展名。默认情况下,禁用LFN。如果要启用LFN,要将FF_USE_LFN设置为1、2或3,并将ffunicode.c文件添加到项目中。LFN功能需要一定的工作缓冲区。缓冲区大小可由FF_MAX_LFN根据可用内存配置。LFN的长度最多可以为255个字符,因此FF_MAX_LFN也应设置为255。

afe065d0-21b6-11f1-90a1-92fbcf53809c.png

24.3.3

FatFs限制

文件系统类型:FAT、FAT32(rev0.0)和exFAT(rev1.0)。

打开的文件数量:无限制。(取决于可用内存)

卷数:最多10个。

扇区大小:512、1024、2048和4096字节。

最小卷大小:128个扇区。

最大卷大小:32位LBA中的2^32-1扇区,在带有exFAT的64位LBA中几乎不受限制。

最大文件大小:FAT卷上为2^32-1字节,exFAT卷上几乎不受限制。

群集大小:FAT卷上最多128个扇区,exFAT 卷上最多16MB。

24.3.4

FatFs的已知问题

扫描下方二维码或复制链接到浏览器查看:记录着有关Fatfs最新版本的已知问题以及问题的解决方法或补丁。

下载链接

http://elm-chan.org/fsw/ff/patches.html

b08dc234-21b6-11f1-90a1-92fbcf53809c.png

网址上会公布已发现并解决的BUG,以补丁形式发布。以R0.14b版本为例,目前该版本有2个补丁。

有需要的话可以按照官方提供的方法对源码进行修改,由于我们这里使用的都是一些比较基础的功能,这些功能是没有问题的,所以就不进行修改了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1762

    浏览量

    156108
  • 文件系统
    +关注

    关注

    0

    文章

    305

    浏览量

    21080
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    68036
  • FATFS
    +关注

    关注

    0

    文章

    46

    浏览量

    19635

原文标题:基于FLASH的FatFs文件系统移植——瑞萨RA系列FSP库开发实战指南(85)

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA系列FSP开发实战指南I2C读写EEPROM实验

    使用官方提供的FPS进行编程,官方提供的FPS具有方便、快捷、简洁的特性。
    的头像 发表于 01-27 10:02 3924次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>I2C读写EEPROM实验

    RA系列FSP开发实战指南AGT低功耗定时器简介和结构框图

    RA MCU有两种定时器外设:GPT(General PWM Timer)定时器和AGT(Asynchronous General Purpose Timer)定时器。
    的头像 发表于 04-30 16:47 7555次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>AGT低功耗定时器简介和结构框图

    RA系列FSP开发实战指南基于FLASH的FatFs文件系统移植实验

    FatFs属于软件组件,不需要附带其他硬件电路。我们使用串行Flash芯片作为物理存储设备,其硬件电路在上一章已经做了分析,这里就直接使用。
    的头像 发表于 03-18 13:53 8473次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>开发</b><b class='flag-5'>实战</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>基于FLASH的<b class='flag-5'>FatFs</b><b class='flag-5'>文件系统</b>移植实验

    e2studio(1)----芯片搭建FSP环境

    视频教学 样品申请 请勿添加外链 e2studio软件 e2studio是的集成开发环境,FSP 提供了众多可提高效率的工具,用于开发
    发表于 09-30 15:28

    RA2L1入门学习】RA2L1开发环境搭建

    e² studio 和 FSP 的下载、安装及使用指南 1. 什么是 e² studio 和 FSP? e² studio 是电子(Re
    发表于 03-07 11:33

    RA6E2地奇星开发板试用】介绍、环境搭建、工程测试

    RA6E2开发板 - 立创开源硬件平台 . 开发环境 开发环境支持 e^2^ studio 和 Keil ,这里主要介绍和使用前者。 下载并
    发表于 12-07 15:27

    RA4系列开发板体验】开发环境搭建和新手点灯指南

    RA4系列开发板体验】开发环境搭建和新手点灯指南
    发表于 11-24 22:54

    RA4系列开发板体验】体验过程

    拿到板子之后,做了几个实验过程,过程如下:1、在好奇心驱动下,逐步接触;参照网上的实例,学习开发环境一、开箱验货二、搭建环境参考“ 【
    发表于 12-18 16:20

    【野火启明6M5开发板体验】开箱+认识开发板+资料

    按键检测29. WiFi——模块通讯板尺寸:3、资料:*附件:[野火EmbedFire]《RA系列FSP
    发表于 12-20 23:28

    FatFs文件系统使用

    STM系列FatFs文件系统使用文件,希望对大家有帮助。
    发表于 11-06 18:10 10次下载

    Fatfs文件系统的移植)

    Fatfs文件系统的移植)一、文件系统介绍二、移植条件、说明1、FatFs模块在可移植性方面设定了以下条件:2、数据类型说明3、
    发表于 11-15 18:51 22次下载
    <b class='flag-5'>Fatfs</b>(<b class='flag-5'>文件系统</b>的移植)

    FATFS文件系统原版文件下载

    FATFS文件系统原版文件下载
    发表于 06-25 09:02 0次下载

    【有奖直播预报名】电子RA系列产品开发工具FSP4.0.0新特性介绍

    为使用电子RA系列ARM微控制器的嵌入式系统设计提供简单易用且可扩展的高质量软件。 直播主题
    的头像 发表于 11-22 12:20 1816次阅读

    【视频教程】RA单片机FSP开发(3)FSP架构-解释Blinky架构[上]

    干货分享 前篇回顾 【视频教程】RA单片机FSP开发(1)环境搭建(带RASC) 【视频教程】
    的头像 发表于 12-06 12:15 2263次阅读

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南

    电子RA系列微控制器的可扩展性强的配置软件包 (FSP)安装下载与使用指南
    的头像 发表于 06-11 17:21 2413次阅读