一种微嵌入式Flash文件系统_effs
- 格式:doc
- 大小:64.50 KB
- 文档页数:4
fatfs filinfo解析(FAT File System)是一种用于小型嵌入式系统的文件系统。
它基于FAT (File Allocation Table)文件系统,并对其进行了一些改进和优化,以适应小型嵌入式系统的需求。
在FATFS中,FILINFO结构是用于获取文件信息的结构体。
它包含了关于文件的各种信息,如文件名、大小、时间戳等。
以下是FILINFO结构的定义:struct FILINFO {DWORD fsize; // 文件大小(以字节为单位)DWORD fdate; // 文件创建日期(以日期格式表示)DWORD ftime; // 文件创建时间(以时间格式表示)DWORD fattrib; // 文件属性(如只读、隐藏等)char fname[13]; // 文件名(以ASCII码表示)char fctdiag[26]; // 文件控制诊断信息(可选)};下面是对每个字段的简要说明:1、fsize:文件的大小,以字节为单位。
2、fdate:文件的创建日期,以日期格式表示。
3、ftime:文件的创建时间,以时间格式表示。
4、fattrib:文件的属性,包括只读、隐藏等。
这些属性通常使用位掩码来表示。
5、fname:文件名,以ASCII码表示。
最多可以包含13个字符。
6、fctdiag:文件控制诊断信息,用于存储与文件相关的诊断信息。
这个字段是可选的,可以留空。
要解析FILINFO结构,你可以按照以下步骤进行:1、从结构体中获取文件大小(fsize)。
2、从结构体中获取文件的创建日期(fdate),并将其转换为日期格式(年月日)。
3、从结构体中获取文件的创建时间(ftime),并将其转换为时间格式(时分秒)。
4、从结构体中获取文件属性(fattrib),并根据需要检查各个属性标志位的状态。
5、从结构体中获取文件名(fname),并将其转换为字符串形式。
6、如果fctdiag字段不为空,则从结构体中获取文件控制诊断信息。
fatfs f_open creat_new解析【fatfs f_open creat_new解析】是关于嵌入式系统文件系统模块fatfs 中的两个函数的解析。
fatfs是一种轻量级的文件系统模块,适用于嵌入式系统中的闪存设备。
其中的函数f_open和creat_new是用来创建并打开文件的函数。
本文将详细解析这两个函数的功能、参数、返回值等方面的内容。
一、函数功能解析1. f_open函数:f_open函数是用来打开一个已有的文件或者创建一个新文件的函数。
在打开一个文件时,我们需要指定文件的路径、打开方式和权限等参数。
如果文件不存在,f_open函数也可以创建一个新文件。
2. creat_new函数:creat_new函数是用来创建一个新文件的函数。
在创建一个文件时,我们需要指定文件的路径、权限等参数。
二、函数参数详解1. f_open函数参数:- FilePath:表示文件的路径,可以是绝对路径或者相对路径。
例如,"E:/test.txt"。
- Mode:表示打开文件的模式,有以下几种选项:- FA_READ:以只读方式打开文件。
- FA_WRITE:以写方式打开文件。
- FA_OPEN_EXISTING:如果文件存在,则以读写方式打开文件;如果文件不存在,则返回错误。
- FA_OPEN_ALWAYS:如果文件存在,则以读写方式打开文件;如果文件不存在,则创建一个新文件。
- FA_CREATE_NEW:如果文件存在,则返回错误;如果文件不存在,则创建一个新文件。
- FA_CREATE_ALWAYS:如果文件存在,则删除文件并创建一个新文件;如果文件不存在,则创建一个新文件。
- Attributes:表示文件的属性,例如只读、隐藏等。
可以通过逻辑或运算符来设置多个属性。
2. creat_new函数参数:- FilePath:表示文件的路径,可以是绝对路径或者相对路径。
例如,"E:/test.txt"。
EFlash,也被称为嵌入式闪存,是一种在嵌入式系统中常用的非易失存储器。
它支持代码在片上执行,并且有一些特定的工作原理和特性。
EFlash在写入之前必须先执行擦除动作,擦除以块为单位进行。
写入操作也被称为编程,需要通过特殊的命令来实现。
此外,应用程序可以直接在EFlash内运行,而不必再把代码读取到系统主存中。
这种特性使得EFlash多用于存储如bootloader等系统启动程序。
在EFlash中,还有一个低电压检测电路,用于保证芯片的工作电压不会低于1.62V。
一旦检测到电压偏离,将引起芯片的内部复位。
这是因为EFlash的读操作很容易受工作电压的影响,非正常的工作电压可能导致读取的程序或数据与所存储的不符。
此外,EFlash还设计有温度检测电路,因为芯片中的电路和存储器都对温度的变化比较敏感。
在极端的温度条件下,电路动态参数可能会不稳定,甚至不能正常工作。
而存储器中的一些位在极端温度下可能会被修改或失效。
总的来说,EFlash的工作原理涉及擦除、编程、低电压和温度检测等多个方面,以确保其在嵌入式系统中的稳定、可靠运行。
请注意,以上信息可能并不涵盖EFlash的所有工作原理和特性,建议查阅相关的专业书籍或咨询专业人士以获取更全面的信息。
嵌入式NAND flash文件系统JFFS2和YAFFS比较JFFS是由瑞典的Axis Communications Ab公司开发的(1999,以GNU发布),针对flash设备的特性为嵌入式设备开发的JFFS1和JFFS2的设计中都考虑到了FLASH的特性特别是满足了上述3个条件,包括了垃圾回收,坏块管理等功能. 这两种文件系统属于LFS(Log-structured File System).这种文件系统的特点是一旦数据出错,容易恢复,但是系统运行是需要占用一定的内存空间,这些空间就是用来存储”log”的.JFFS的缺点就是加载时间太长,因为每次加载都需要将FLASH上的所有节点(JFFS的存储单位)到内存,这样也占用了可观的内存空间.除此之外,”circle log”设计使得在对文件数据进行所有的数据都会被重写,这样造成不必要的时间,同时也会减少FLASH的寿命.JFFS2对JFFS1作了些改进,比如所需的内存变少了,垃圾回收机制也优化了.针对JFFS1,JFFS2的缺点,JFFS3出现了.YAFFS1 ">“Yet Another Flash File System”作者是新西兰的Charles Manning为一家名叫Alpha one 的公司(/)设计的,是第一个为NAND Flash设计的文件系统.共两个版本YAFFS1 和YAFFS2.YAFFS1支持512Bytes/Page的NAND Flash;后者YAFFS2支持2kBytes/Page的NAND Flash. YAFFS文件系统也属于LFS.跟其他文件系统比较,它具有更好的可移植性,甚至可以使用在没有操作系统的设备上(called “YAFFS/Direct”). YAFFS采用模块化设计,虽然最初是用在linux系统上的,但是也已经移植到其他系统比如wince.还有个突出的优点是它在mount的时候需要很少的内存.(如果是小页―512byte/page,每1MByte NAND大约需要4KBytes内存;大页需要大概1KBytes RAM/1MByte NAND) JFFS与YAFFS比较,两者各有长处. 一般来说,对于小于64MBytes的NAND Flash,可以选用JFFS;如果超过64MBytes,用YAFFS比较合适.由于嵌入式系统自身存在一些特殊要求,使得一些传统的文件系统(如FAT、EXT2等) 并不十分适合。
fat-fs invalid fsinfo signature -回复FatFs (File allocation table file system) 是由ChaN开发的一种嵌入式文件系统,适用于各种微控制器和磁盘接口。
它使用FAT文件系统的基本理念,并具备轻巧、高效、可移植的特点。
然而,有时在使用FatFs时,可能会出现"invalid fsinfo signature"这样的错误。
本文将一步一步回答这个问题,帮助解决该错误。
第一步:了解FSINFO签名FSINFO是FAT32文件系统中的一个特殊区域,用于存储文件系统的元数据和相关信息。
文件系统使用一个特殊的签名来标识FSINFO区域的有效性。
当读取FSINFO区域时,文件系统需要验证签名以确认数据的完整性。
第二步:确定问题来源出现"invalid fsinfo signature"错误时,首先要确定问题的来源是文件系统中的FSINFO区域。
这可能是由于文件系统的损坏或意外操作导致的。
第三步:检查存储设备首先,检查存储设备是否正常工作。
可以尝试将设备连接到另一台计算机或使用其他存储设备进行测试,以确认问题并非来自设备本身。
第四步:检查文件系统使用专门的文件系统检查工具,例如Windows上的CHKDSK命令或Linux上的fsck命令,检查文件系统的完整性和错误。
这些工具可帮助修复文件系统中的问题。
第五步:使用恢复工具如果文件系统损坏严重,常规的文件系统检查工具可能无法修复。
这时可以考虑使用专门的恢复工具来恢复文件系统数据。
这些工具往往具有更强大的功能和算法,能够解决更复杂的问题。
第六步:备份数据在进行任何可能破坏文件系统的操作之前,务必先备份存储设备中的重要数据。
这样即使在修复文件系统的过程中出现问题,也可以避免数据的丢失。
第七步:重新格式化存储设备如果经过多次尝试仍无法解决问题,最后的选择是重新格式化存储设备。
嵌入式写flash的过程嵌入式系统是一种特殊的计算机系统,它通常用于控制、监测或执行特定任务。
在嵌入式系统中,Flash存储器被广泛应用于存储程序代码、数据和配置信息。
下面将介绍嵌入式系统中如何使用Flash 存储器的过程。
Flash存储器是一种非易失性存储器,它可以在断电后保持数据的完整性。
在嵌入式系统中,Flash存储器通常用于存储操作系统、应用程序和固件等软件。
下面是使用Flash存储器的一般过程:1. 首先,开发人员需要了解嵌入式系统的需求和功能。
根据系统的需求,确定所需的Flash存储器容量和接口类型。
接口类型包括SPI、NAND、NOR等不同的接口标准。
2. 接下来,开发人员需要选择合适的Flash存储器芯片。
根据系统需求和成本考虑,选择容量适当且性能稳定的Flash存储器芯片。
3. 在确定了Flash存储器芯片后,开发人员需要进行硬件设计。
这包括将Flash芯片与嵌入式系统的主控芯片相连接,并根据接口标准进行电气连接和信号交互。
4. 在硬件设计完成后,开发人员需要编写软件驱动程序。
这些驱动程序通常是嵌入式操作系统的一部分,用于控制Flash存储器的读写操作。
驱动程序需要根据Flash芯片的接口标准和通信协议进行开发。
5. 在软件驱动程序开发完成后,开发人员可以开始编写应用程序。
应用程序通常是嵌入式系统的核心功能模块,它将使用Flash存储器来存储和获取数据。
开发人员需要使用驱动程序提供的接口函数来读写Flash存储器中的数据。
6. 在应用程序开发完成后,开发人员需要进行测试和调试。
他们可以使用仿真器或调试器来验证Flash存储器的读写操作是否正常,并确保数据的正确性和完整性。
7. 最后,开发人员需要对系统进行整体验证和性能测试。
这包括测试系统的稳定性、响应时间和功耗等指标,以确保系统在各种工作条件下都能正常运行。
嵌入式系统中使用Flash存储器的过程涉及硬件设计、软件驱动程序开发、应用程序编写以及测试和验证等多个环节。
fatfs 详解【原创实用版】目录1.FATFS 简介2.FATFS 的特点3.FATFS 的应用领域4.FATFS 的优势与不足5.结论正文1.FATFS 简介FATFS(File Allocation Table File System)是一种适用于嵌入式系统的文件系统,由 Keil 公司开发。
FATFS 是一种可扩展的、可恢复的、易于使用的文件系统,适用于管理存储设备上的文件和数据。
它支持FAT12、FAT16 和 FAT32 三种文件分配表格式,因此可以适应不同存储容量的设备。
2.FATFS 的特点(1)可扩展性:FATFS 支持多种文件分配表格式,可以根据存储设备的容量进行选择,最大支持 2TB 的存储空间。
(2)可恢复性:FATFS 具有自动纠错功能,能够在读取数据时检测到错误并尝试修复。
同时,它还提供了一种称为“垃圾回收”的机制,用于回收已删除文件的存储空间。
(3)易于使用:FATFS 提供了丰富的应用程序编程接口(API),方便开发人员在嵌入式系统中进行文件操作。
3.FATFS 的应用领域FATFS 广泛应用于各种嵌入式系统,如智能家居、工业控制、消费电子等。
在这些领域,FATFS 可以提供可靠的文件存储和管理功能,满足设备对文件系统的需求。
4.FATFS 的优势与不足(1)优势:FATFS 具有较好的可扩展性和可恢复性,能够适应不同存储容量的设备。
同时,它提供了丰富的 API,便于开发人员进行文件操作。
(2)不足:尽管 FATFS 在嵌入式领域应用广泛,但它在某些方面存在局限性。
例如,与 extFS、yaffs 等其他文件系统相比,FATFS 在存储性能和空间利用率方面表现较差。
此外,FATFS 主要针对小容量存储设备,对于大容量存储设备而言,管理效率较低。
5.结论FATFS 是一种适用于嵌入式系统的文件系统,具有可扩展性、可恢复性和易于使用等特点。
在多种应用领域中,FATFS 都能提供可靠的文件存储和管理功能。
一种微嵌入式Flash文件系统——μEFFS摘要:针对Flash存储器的特性提出一种分层文件系统架构,抽象出逻辑存储器作为中间层,屏蔽了底层物理器件操作上的不足。
本文件系统非常适合1GB以下容量的Flash存储器,具有可移植性高、访问效率高、寿命均衡等特性。
关键词: Flash存储器, Block, Page, 逻辑存储器, FAT随着嵌入式系统应用的迅速发展,嵌入式系统被广泛应用于各行各业,嵌入式系统的数据存储问题随之变成了一个最核心的关键问题。
由于Flash器件的迅速普及,使得Flash存储器的使用变得十分重要。
同时,Flash器件本身固有的擦写寿命、不可字节擦除等特点也使Flash器件存储管理变得非常复杂。
目前嵌入式系统领域已有了一些较为成熟的Flash文件系统,如:嵌入式Linux中普遍使用的JFFS2日志文件系统、YAFFS文件系统。
但是这些文件系统本身比较大,适合于大系统运行;并且经实践检验,这些文件系统对寿命的均衡处理并不像宣传的那样好,文件系统效率和可靠性也有待提高。
本文通过中间抽象逻辑存储器建立一种短小精炼、高性能、高可靠性、适合于嵌入式小型设备的嵌入式Flash文件系统——μEFFS。
实际上,通过更改底层物理存储器(软件),此文件系统也可以很方便地移植到其他器件上。
而且通用文件系统(如:FAT文件系统)很容易移植到本文提出的中间层逻辑存储器上,从而使得通用文件系统也获得了Flash文件系统的特性,如:寿命均衡。
1 Flash存储器特性(1)NAND Flash器件特点:高存储密度,采用页读写(读写速度快)、块擦除方式操作;容易发生位反转;存在坏块(存储不可靠性);容量一般较大(大于32MB);擦写寿命一般为100万次。
(2)NOR Flash器件特点:随机读写、块擦除;坏块少;器件本身存储可靠性高;擦写速度较慢;容量一般较小(小于16MB),擦写寿命一般为10万次。
(3)块(block):擦除的最小单元。
(4)页(page):即扇区,写的最小单元(NorFlash写的最小单元是字节,无页的概念)。
(5)擦除:存储单元的相应数据位由“0”变成“1”。
Flash器件和普通存储器件不一样,它只能采用块擦除和片擦除两种操作方式。
2 Flash器件存储管理由于Flash器件的读写特性,使Flash器件存储管理较为复杂,且容易出问题。
(1)寿命均衡问题:如果经常对同一单元进行擦写操作,这些单元将很快达到寿命极限,导致损坏。
(2)效率问题:如果每次改写1个字节的数据都采用擦写方式,将导致操作效率低下。
(3)NOR和NAND两种Flash区别明显。
嵌入式Flash文件系统需解决的核心问题都是围绕寿命均衡产生的,同时要兼顾性能和可靠性,最好能同时兼容两种Flash器件(NOR和NAND)。
3 μEFFS的核心原理建立一种完美的“逻辑存储器”,在此逻辑存储器上,可以完全像操作硬盘一样进行读、写操作。
系统层次结构如图1所示。
这样利用抽象中间层逻辑存储器完全屏蔽了底层物理存储器的具体实现,同时各层之间接口简单,简化了系统,提高了系统的可移植性。
中间层逻辑存储器将复杂的Flash操作简单化。
系统结构如图2所示。
中间层逻辑存储器是对物理器件的一种抽象,这样做的好处是上层文件系统无需考虑底层的具体实现,同时有利于移植到其他物理器件上。
为适应各种不同的器件需要,系统建立统一的逻辑扇区Logic Sector(LS)。
逻辑扇区大小和物理扇区相等,但是逻辑扇区的物理位置不固定,其实际地址通过BSAT来确定。
同时系统为每个逻辑扇区编号(LSN),这个就是逻辑扇区访问的惟一指示器。
对于每个物理块建立一个BSAT(块内扇区分配表,占用该块第一个扇区),用以描述这个块内所有扇区使用情况,分配表的每个单元最高2位表示扇区使用情况,剩下各位为逻辑扇区号。
例如BSAT表项采用16位(即BSAT16),BSAT表项结构如表1所示。
这样对整个存储系统的访问就完全变成对逻辑扇区的访问了。
系统本质是建立逻辑扇区到物理扇区的映射表,同时在操作过程中维护这个映射表。
4 底层物理存储器用于访问物理层硬件的主要函数有:(1)FlashEraseChip():芯片整片擦除。
(2)FlashEraseBlock(INT32U dwBlockNo):块擦除。
(3)FlashWrite(INT32U dwAddr,INT8U * pBuff,INT32U dwSzie):将缓冲区的数据写入目标地址处。
(4)FlashWrite1Sec(INT32U dwSecNo,INT8U * pBuff):向目标扇区写数据。
(5)FlashRead(INT8U * pBuff,INT32 dwAddr,INT32U dwSzie):从指定地址处读数据。
(6)FlashRead1Sec(INT8U * pBuff,INT32U dwSecNo):从指定扇区读数据。
5 中间层逻辑存储器5.1 系统初始化对Flash进行扫描,建立Flash空扇区表和物理扇区映射表。
(1)空扇区表:EmptySecTable[SecNum/8],表中每一位表示一个扇区,为1表示该扇区为空,否则该扇区非空。
(2)物理扇区映射表:PhySecTable[LogicSecNum],表中每个单元的值为物理扇区号。
5.2 读访问(1)根据PhySecTable[]找到逻辑扇区对应的物理扇区号。
(2)根据物理扇区号计算出物理地址。
(3)根据物理地址和扇区大小读取数据。
5.3 修改访问(1)先按读访问,读取扇区数据。
(2)在内存中修改数据。
(3)根据EmptySecTable[]选取一个空扇区,将修改后的数据写入新扇区。
(4)改写新扇区所在块的BSAT表,标记该扇区为有效状态,同时将逻辑扇区号写入BSAT。
(5)修改EmptySecTable[]表中该扇区为非空扇区。
(6)修改原扇区的BSAT项,标记为无效状态。
注:修改访问都选择一个新物理扇区(page),然后写入数据,再将原物理扇区标记为无效,从而达到寿命均衡访问。
5.4 缓冲块系统保留两个块用于碎片整理缓冲,缓冲块也称交换块,如果要实现更好的寿命均衡,也可以采用逻辑块的形式建立缓冲块。
5.5 Flash碎片整理Flash碎片整理分为手动整理和自动整理。
如果系统空扇区少于20%时,系统将自动进行碎片整理。
(1)系统复位初始化时,通过EmptySecTable[]判断是否需要整理;如果需要,则整理出一个块(block)。
(2)增加数据或修改数据时,如果发现空扇区少于10%,则整理出一个块,然后再进行操作。
(3)由于碎片整理比较耗时,所以每次只整理出一个块,目的是提高单次操作的性能。
(4)手动整理将对整个存储器进行整理,它可以在空扇区少于40%的情况下进行。
(5)整理过程:先擦除缓冲块(Buff block),然后将欲整理的块中有效扇区全部按顺序转移到缓冲块中,再擦除该块,最后将缓冲块中的数据原样复制到该块。
整理后需要更新空扇区表和块扇区分配表。
(6)整个系统只有碎片整理程序才会进行擦除操作,因此各块的寿命(次数)实际上就等于碎片整理的次数。
(7)碎片整理均衡策略:碎片整理每次只整理一个物理块,设立一个碎片整理块指针,用于指示下次需整理的块。
这样保证均衡整理各块,均衡了各块寿命。
5.6 中间层逻辑存储器主要函数(1)LogicMemFormat():擦除整片Flash,供上层调用。
(2)LogicMemInit():系统复位初始化调用,通过扫描Flash产生空扇区表和物理扇区映射表。
(3)ReadLogicSec(INT8U * buff,INT16U wLogicSecNo):根据逻辑扇区号读取扇区数据。
(4)WriteLogicSec(INT16U wLogicSecNo,INT8U * buff):将数据写入逻辑扇区,这个要考虑是追加还是修改。
(5)INT16U GetAFreeSec():获取一个空扇区号(未使用的物理扇区号)。
(6)FlashMemRep1Block():碎片整理1块。
(7)FlashMemRepAll():整片碎片整理。
6 上层文件系统在中间层逻辑存储器的基础上,可以建立各种类型的文件系统。
这样建立的文件系统已经具有良好的Flash文件系统特性。
本文件系统采用类似于FAT文件系统的处理方法。
(1)主引导记录MBR(保留区):包含启动代码和分区表,这个区主要借鉴了已有文件系统的设计思想(采用磁盘文件系统类似的方法处理),主引导记录占用逻辑扇区0。
实际上只要有BIOS的支持,本文件系统完全可以和已有的文件系统一样引导操作系统或者应用软件(只要搜索到逻辑算区0就找到了主引导记录);采用分区表的方法则有利于扩大整个文件系统管理空间的大小(如采用FAT16格式,4个分区表项分别指示4个不同的分区,相当于文件系统所能管理的空间扩大了4倍)。
主引导记录占用逻辑扇区0。
(2)系统引导记录DBR:用于指示文件分配表的位置、大小、个数和根目录区位置、大小、项数。
系统引导记录占用逻辑扇区1。
(3)文件分配表(FAT):用于指示文件的逻辑扇区号链,由于建立了物理扇区映射表,所以,可以高效地进行数据访问。
文件分配表本身占用逻辑扇区号,文件分配表的大小、个数,由系统引导记录指示。
(4)文件目录表(FDT):分为根目录和子目录。
子目录实际上也是文件(和普通文件完全一样),这里不详细讨论。
根目录表主要目的用于指示根目录中各文件(含子目录)在FAT中的第一个扇区号。
根目录的位置和大小在系统引导记录中指示。
7 系统整体运行机制(1)系统初始化:系统启动时进行初始化,构建中间层逻辑存储器。
此时建立空扇区表和逻辑扇区到物理扇区的映射表。
(2)文件读、写操作:根据主引导记录(逻辑扇区0)找到所在分区引导记录(系统引导记录);根据分区引导记录找到根目录区;根据根目录项,找到文件分配表(FAT)中相应的入口;根据FAT入口进行文件读、写操作。
上述所有操作都是根据逻辑扇区号进行访问的,实际访问通过查找物理扇区映射表进行。
本文通过中间层抽象逻辑存储器建立了一种Flash文件系统,并命名为μEFFS。
μEFFS特别适合于小型嵌入式系统(8位、16位、32位系统均可良好运行),具有寿命均衡、性能好、可靠性高的特点,经受了实践的考验。
通过对本系统的裁剪,很容易将其移植到单片机系统中,这样也给目前的低端8位单片机系统提供了一种数据存储解决方案。