芯课堂 | FatFs文件系统的移植及应用指南
1、FatFs文件系统简介
FatFs是用于小型嵌入式系统的通用FAT/exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,与磁盘控制层完全分离。因此,它独立于平台和存储设备,具有良好的硬件平台独立性。它可以集成到资源有限的小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等,支持多种存储设备如 SD 卡、MMC、USB闪存、NAND/NOR 闪存等。FatFs支持 FAT12/16/32 文件系统格式,具有高效、简洁、易于移植的特点。
2、FatFs的主要结构组成
(1) 用户应用层
文件操作API接口函数:如 f_open、f_read、f_write、f_close 等。这些函数用于用户操作文件和目录,如打开、读取、写入和关闭文件等 。
(2) 文件系统层
•文件控制块(FIL):用于表示一个已打开的文件,包含文件的状态、文件的指针、当前位置等信息。
•目录控制块(DIR):用于表示一个已打开的目录,包含目录的结构、当前读取位置等。
•文件系统对象(FATFS):用于表示整个文件系统的状态,包括当前挂载的信息、文件系统类型、扇区大小等。
•文件分配表(FAT):FAT 文件系统核心的数据结构,用于管理文件的簇链,标识文件占用了哪些簇,以及这些簇是否已被分配、空闲或损坏。
(3) 缓存管理层
FatFs 会在 RAM 中保留一个扇区缓冲区,用于加速文件读写操作,将块设备的读写操作优化为扇区大小。
(4) 低级设备抽象层
FatFs 通过硬件抽象层与具体的存储设备交互,即磁盘接口。支持多种存储设备媒介(SD 卡、USB、NAND、NOR Flash)。
·disk_read():从存储设备中读取数据。
·disk_write():向存储设备写入数据。
3、FatFs的移植及使用
(1)FatFs源码下载,FatFs官方网站:http://elm-chan.org/fsw/ff/。
图1 FatFs源码下载网页
如图1所示,通过官网下载到最新的FatFs源码包,源码包解压后得到相关文件如图2所示,文件包含了:存放于documents文件夹的相关使用的帮助文档、存放于source文件夹中的FatFs源代码以及许可证信息,这里我们主要聚焦于源码部分。
(2)FatFs源码移植。
ffsystem.c 通常是一个可选文件,提供了操作系统依赖的函数,这些函数用于动态内存分配和多任务环境中的互斥锁管理(当启用 FF_FS_REENTRANT 配置时),这里我们不启用相关函数功能。因此我们对其余的6个程序模块进行移植,这里以华芯微特UI_Creator上位机swm34s工程为例,如图3所示,针对FAtfs移植来进行相关的讲解。
图3 UI_Creator上位机工程FatFs模块
FatFs主要通过对低级设备抽象层(即diskio.c模块)进行程序修改移植。
在 diskio.c 中,有以下5个函数实现:
•disk_status(): 获取磁盘状态。
•disk_initialize(): 初始化磁盘(通常是 SPI 或 SD 卡的初始化)。
•disk_read(): 从磁盘读取数据。
•disk_write(): 向磁盘写入数据。
•disk_ioctl(): 控制磁盘的操作,比如获取磁盘扇区、块大小、擦除等。
在上位机工程中,我们支持对SD卡及串行闪存盘进行文件系统移植,需添加硬件初始化及磁盘操作的相关头文件(SWM341.h、FlashDisk.h<闪存盘读写擦操作的头文件>),其次是添加设备定义编号,程序如图3编程界面红框所示。
在diskio.c的6个功能函数中,对对应设备部分进行编程或功能函数植入,其中包括:①在disk_status()中实现磁盘设备ID读取检测(闪存设备),实现状态信息返回,如图4所示;
图4
②在disk_initialize()中对相关存储设备硬件IO接口进行初始化,如图5所示;
图5
③在disk_read()、disk_write()中添加对硬件设备相关的读写操作函数接口,如图6所示;
图6
④在disk_ioctl()中可添加需要的磁盘操作功能,如图7所示;
图7
至此,我们基本完成了FatFs文件系统的移植。
(3)FatFs的使用。
移植完FatFs后,需要通过f_mount()函数实现对文件系统的挂载,而后ff.c所提供的标准文件操作接口来实现文件读写。以上位机工程为例,通过在lv_fs_fatfs.c中,将 FatFs 提供的文件系统接口与 LVGL 的文件 I/O 接口关联起来,如图8所示,实现了LVGL从文件系统中加载资源,比如图像、字体、数据文件等。
图8 LVGL(LittlevGL)中使用 FatFs 文件系统
值得一提的是,作为FatFs文件系统的配置文件,ffconf.h允许用户通过修改其程序源码中的宏定义来选择开启或关闭特定的功能、调整文件系统的行为、优化内存资源占用和性能,从而满足嵌入式系统的不同要求。
FatFs的相关移植使用也可参考华芯微特SWM341基础库中的SFC\SFC_FATFS例程,如图9所示。
图9 SWM341基础库SFC\SFC_FATFS例程
- |
- +1 赞 0
- 收藏
- 评论 0
本文由samsara转载自华芯微特32位MCU公众号,原文标题为:芯课堂 | FatFs文件系统的移植及应用指南,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
【经验】华芯微特SWM341/SWM34S系列MCU环境配置指南
华芯微特MCU的系列之SWM341&SWM34S,内核相同,34S在341基础上内置了SDRAM。341芯片使用M33内核,基于ARM-V8指令集的架构,对应的工具版本有更高的要求。本文中华芯微特将为大家介绍SWM341/SWM34S系列MCU环境配置指南。
设计经验 发布时间 : 2023-09-26
使用华芯微特SWM341系列MCU环境配置
SWM341是华芯微特的其中一款MCU,341和341+内置SDRAM的34S系列,其内核相同。本文中华芯微特来为大家介绍使用SWM341系列MCU环境配置,希望对各位工程师朋友有所帮助。
设计经验 发布时间 : 2024-10-27
以华芯微特SWM341/SWM34S系列MCU芯片,介绍从软件层面降低MCU功耗的方法
随着集成电路技术的飞速发展,MCU的功耗问题逐渐成为设计和应用中必须考虑的关键因素。低功耗设计对于提高电路可靠性、降低成本以及延长电池寿命具有至关重要的作用。本文档主要是以华芯微特SWM341/SWM34S系列芯片,介绍从软件层面降低MCU功耗的方法分享。
设计经验 发布时间 : 2024-09-03
华芯微特(Synwit)32位MCU选型表
目录- 32位微控制器
型号- SWM19SC9T6-50,SWM241PBT7-80,SWM260PBT7-80,SWM181RCT6-50,SWM211,SWM21DC8U7-50,SWM211G6S7-65,SWM181C9T6-50,SWM241KBT7-80,SWM34SRET6-50,SWM21PG6S7-65,SWM34SVET6-50,SWM341RET7-50,SWM260KBT7-80,SWM320RET7-50,SWM201G6S7-65,SWM181DBU6-40,SWM211C8T7-50,SWM201C6T7-50,SWM341CET7-50,SWM190CBT7-50,SWM201,SWM320VET7-50,SWM320,SWM20PG6S6-65,SWM341,SWM241,SWM260,SWM181,SWM19SCBT7-50,SWM320CET7-50,SWM190,SWM32SRET6-50,SWM190RBT7-50,SWM241CBT7-50,SWM181CBT6-50,SWM20DC6U7-50,SWM21DK6U7-50,SWM341VET7-50,SWM260CBT7-50,SWM34SCET6-50
SWM341单片机运行Rust教程,一切从点灯开始
Swm341是一款非常优秀的国产单片机芯片,聚焦于显示控制,有着非常多的硬件资源可供使用,开发非常方便。另外Rust目前开始变得流行,执行效率也非常高,因此想在Swm341中尝试使用运行Rust开发,本文进行介绍。
原厂动态 发布时间 : 2024-04-11
华芯微特(Synwit)32位MCU选型指南
目录- 公司介绍&产品分类 TFT-LCD 显示和人机界面(HMI)用微控制器 电机专用微控制器 大家电 & 工控通用微控制器 32位微控制器选型表
型号- SWM34X,SWM320 SERIES,SWM 201C6T7-50,SWM19SCBT6-50,SWM190 SERIES,SWM 201 系列,SWM32SRET6,SWM181CCT6-50,SWM260KBT7-80,SWM190KBT6-80,SWM201G6S7-65,SWM 201,SWM 201G6S7-65,SWM 19S 系列,SWM201,SWM260 SERIES,SWM320,SWM19S,SWM160,SWM20PG6S6,SWM20D,SWM32SRET6-50,SWM 20PG6S6-65,SWM 190,SWM181CBT6-50,SWM260CBT7-50,SWM260PBT7-80,SWM 260 系列,SWM32S,SWM181 SERIES,SWM181RCT6-50,SWM20P,SWM260CBT7,SWM160C8T7-50,SWM190CBT6-50,SWM20G,SWM 190 系列,SWM 260,SWM 181,SWM201 SERIES,SWM320RET7-50,SWM181DBU6-40,SWM181CBT6,SWM160 SERIES,SWM 341,SWM 341 系列,SWM190 系列,SWM201C6T7-50,SWM 181 系列,SWM320VET7-50,SWM341,SWM190RBT6-50,SWM20PG6S6-65,SWM260,SWM181,SWM320CET7-50,SWM190
SWM341 系列 MCU数据手册
型号- SWM341VET6(7)–50,SWM34SV,SWM34SRET6,SWM341RET7,SWM34SVET6,SWM34SR,SWM341R系列,SWM341V系列,SWM34SRET6-50,SWM34SVET6-50,SWM341 系列,SWM341RET7-50,SWM34SCET6,SWM341CET7,SWM341V,SWM341CET7-50,SWM341R,SWM341,SWM34SMEU6-40,SWM34SR系列,SWM34SMEU6,SWM34SV系列,SWM341VET7,SWM341VET7-50,SWM34SCET6-50
【产品】32位微控制器SWM341系列SWM34SRET6-50,助力4.3寸800*480 TFTLCD显示的例程应用
华芯微特推出32位微控制器SWM341系列,简单介绍了和系列之一的SWM34SRET6-50驱动4.3寸800*480 TFTLCD显示的例程应用。
产品 发布时间 : 2022-06-22
基于华芯微特ugui上位机工程使用串口烧录素材应用指南
本文介绍基于华芯微特ugui上位机工程怎么使用串口烧录素材。
设计经验 发布时间 : 2024-08-23
华芯微特SWM341系列主控制器LIN接口应用指南
LIN(Local Interconnect Network)是一种基于UART数据格式、主从结构的低成本通信总线,通常用于车门、雨刮器、车灯等对通信速率要求不高的应用场景。本文基于华芯微特SWM341系列主控制器介绍LIN接口应用。
设计经验 发布时间 : 2024-07-09
华芯微特MCU(ARM Cortex-M0)32位微控制器产品列表
型号- SWM19SC9T6-50,SWM241PBT7-80,SWM181RCT6-50,SWM211,SWM211G6S7-65,SWM181C9T6-50,SWM241KBT7-80,SWM34SRET6-50,SWM21PG6S7-65,SWM34SVET6-50,SWM341RET7-50,SWM260KBT7-80,SWM320RET7-50,SWM201G6S7-65,SWM181DBU6-40,SWM211C8T7-50,SWM21PE6S7-63,SWM201C6T7-50,SWM341CET7-50,SWM201,SWM190CBT7-50,SWM166,SWM320,SWM20PG6S6-65,SWM341,SWM241,SWM260,SWM181,SWM19SCBT7-50,SWM320CET7-50,SWM190,SWM166D8U6-40,SWM32SRET6-50,SWM21DD8U7-40,SWM34SMEU6-40,SWM190RBT7-50,SWM181CBT6-50,SWM20DC6U7-50,SWM21DK6U7-50,SWM341VET7-50,SWM260CBT7-50,SWM34SCET6-50
华芯微特MCU(ARM Cortex-M0)(ARM Cortex-M4/安谋科技“星辰”STAR-MC1内核) 32 位微控制器产品列表
型号- SWM19SC9T6-50,SWM241PBT7-80,SWM181RCT6-50,SWM34SVET6,SWM211,SWM211G6S7-65,SWM181C9T6-50,SWM241KBT7-80,SWM34SRET6-50,SWM21PG6S7-65,SWM34SVET6-50,SWM341RET7-50,SWM260KBT7-80,SWM320RET7-50,SWM201G6S7-65,SWM181DBU6-40,SWM211C8T7-50,SWM21PE6S7-63,SWM201C6T7-50,SWM341CET7-50,SWM190CBT7-50,SWM201,SWM166,SWM320,SWM20PG6S6-65,SWM341,SWM241,SWM260,SWM181,SWM19SCBT7-50,SWM320CET7-50,SWM190,SWM166D8U6-40,SWM32SRET6-50,SWM21DD8U7-40,SWM34SMEU6-40,SWM190RBT7-50,SWM181CBT6-50,SWM20DC6U7-50,SWM21DK6U7-50,SWM341VET7-50,SWM260CBT7-50,SWM34SCET6-50
Synwit_UI_Creator(ugui)平台之MDK工程构建篇
本文由华芯微特给大家介绍面向小尺寸TFT-LCD屏驱市场量身打造的Synwit_UI_Creator(ugui)自研开发套件,以及如何进行MDK工程构建。
设计经验 发布时间 : 2024-08-15
Synwit_UI_Creator(ugui)平台之PC端界面设计篇
本文介绍华芯微特面向小尺寸TFT-LCD屏驱市场量身打造的Synwit_UI_Creator(ugui)自研开发套件。UI_Creator(ugui)开发套件分为上位机和下位机。UI_Creator(ugui)目前已适配华芯微特SWM166/SWM19S/SWM341/SWM211四款屏驱芯片系列。
设计经验 发布时间 : 2024-08-10
华芯微特MCU SWM320 SWM341系列32位微控制器选型表
提供华芯微特32位MCU32S系列选型,内置SDRAM,LQFP48,LQFP64,LQFP100等常规封装,稳定工作温度-40°-85°,-40°-105°,最大频率在120-150MHz
产品型号
|
品类
|
Supply Voltage(V)
|
Max Frequency (MHz)
|
Flash
|
SRAM
|
Stacked SDRAM (Mbytes)
|
I/0 Super
|
Base
|
PWM
|
Cordic
|
DN
|
CRC
|
UART
|
12C
|
SPI
|
12S
|
CAN
|
TFT-LCD
|
SDIO
|
SFC
|
SAR ADC
|
DAC
|
Package
|
Chip Size
|
SWM320CET7-50
|
32位微控制器
|
2.2-3.6
|
120
|
512
|
128
|
0
|
396
|
0
|
12
|
0
|
0
|
1
|
4
|
2
|
2
|
0
|
1
|
0
|
1
|
0
|
2(7)
|
0
|
LQFP48
|
7.0*7.0mm,e=0.5
|
选型表 - 华芯微特 立即选型
电子商城
现货市场
服务
可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。
提交需求>
定制水冷板尺寸30*30mm~1000*1000 mm,厚度1mm~50mm,散热能力最高50KW,承压可达3MPA;液冷机箱散热能力达500W~100KW。项目单次采购额需满足1万元以上,或年需求5万元以上。
提交需求>
登录 | 立即注册
提交评论