3 S0 W) w+ d7 N* y% L6 {
这是很久之前弄的一个东西,petit_fatfs文件系统适合RAM小的单片机8 F: P0 ?6 o6 U: p" J) v" T+ e
% }- q _# [' z2 p! H* x yPetit FatFs 的官方网:http://elm-chan.org/fsw/ff/pf/readdir.html Petit FatFs is a sub-set of FatFs module for tiny 8-bit microcontrollers. It is written in compliance with ANSI C and completely separated from the disk I/O layer. It can be incorporated into the tiny microcontrollers with a small memory even if the RAM size is less than sector size。Petit FatFs 是FatFs的精简版,比较适用于低端8位单片机中。可以用在小RAM的单片机中,RAM可以小于扇区的RAM(512bytes)中。
9 U) ~# `* B4 v
6 U: P, A% W! t- X8 v
" X7 n) S# X% fFeatures
5 S* {- f' K3 n* UVery small RAM consumption (44 bytes work area + certain stack).. t: f; e; X: R
Very small code size (2K-4K bytes).
+ }- [4 i% r5 F' A0 y- USupports FAT32.
1 m* p; c+ M2 @0 H8 L- ]Single volume and Single file.
$ e; u& O1 M$ s" j2 W: lFile write function with some restrictions.
, g9 [& b w U0 \& ^, l看最后一条,写函数有一些限制。如果不用于写操作的话,这个文件系统是个不错的选择,RAM与ROM消耗都很少,用keil编译的话会消耗250字节左右的栈空间。支持FAT32,FAT。% s8 P: v* t) U
- z% b+ A: d2 v
2 v( o3 {3 q+ h7 y官方介绍的限制:1、只能挂载一个设备。2、Petit FatFs不能创建文件,只能对已存在的文件进行操作。3、写函数只能写到原来文件的大小,不能扩展大小,不能更新文件时间信息,不能写只读文件。0 \" Q' J b2 c+ w* Y
0 O" X8 b! q* \% {4 e/ ]1 q7 `
, i. z6 b5 h/ ]- s2 CPetit FATFs能够在不同的单片机平台上运行,具有良好的层次结构,其层次结构,如下图
8 V7 |+ y( [ `( e1 I+ U+ v& G0 e' d$ D8 N) t
8 q, C8 M7 T6 d! R% g
' u* P# ^! M0 h8 f; ?* s! ~6 B
5 q# b) L1 z% y9 r5 I7 W( U应用层位于最顶层,它提供供了以下几个函数:
% C. A; K/ k* t8 [① pf_mount :为Petit FATFs模块注册或者卸载一块工作区域,它包括了设备的初始化(diskio.c中的disk_initialize)、文件系统的设置(FA T32、FAT)等,是Petit FATFs能够工作的前提,在调用其他应用层函数前应先调用此函数。一般用法是: ) |9 S1 V4 Q: ~: U) {' }1 J
FATFS fatfs; ///定义一个文件系统对象 & U" p3 `9 e+ s9 f* V' s
if(pf_mount(&fatfs)) printf("Failed"); //如果返回1,则挂载失败,否则成功
4 z/ J. J% e9 g② pf_open:打开一个已经存在的文件,在对文件进行读操作和移动读写指针前,首先应该调用该函数。打开的文件必须是已存在的,一般用法:
/ k' v% l. X# P3 b" e h$ R6 n if(pf_open("MESSAGE.TXT") ) printf("Failed"); //如果返回1,则打开失败,否则成功
/ m! U& E8 l# L# w③ pf_read:读一个文件。函数的三个参数分别表示读出数据存放的地址,读出数据的大小,反回真正读出的char数据的大小。
! N3 d0 e9 t+ n④ pf_write:写一个文件。函数的三个参数分别表示写入的数据存放的地址,要写入的数据的大小,返回真正写入的char数据的大小。 & U8 `" i/ s' a, r1 S" u& Y& |
⑤ pf_lseek:移动读/写指针。参数表示从第几个数据开始操作。 1 F7 \5 H2 n$ G" a. V
⑥ pf_opendir:打开一个目录。第一个参数表示指向空白目录结构,第二个表示指向一个已存在的目录名。 " {: q0 U9 I6 ^ x9 u7 u5 I' j
⑦ pf_readdir:读一个目录项。 使用者在使用应用层函数时只需调用即可无须理会 Petit FATFs的内部结构以及复杂的FAT 协议。 中间层Petit FATFs 包含了FAT 的读写协议,和最底层 Low Level Disk I/O完全分离,所以一般不用修改。 Low Level Disk I/O位于最底层,它不是 Petit FATFs 模块的一部分,需要根据不同的单片机和不同的存储媒介进行编写,是移植过程中最重要的一部分。$ _( t1 x* k' t) Q- F; j
要编写的底层驱动函数有
* u3 }! _5 O. @! p' z0 Q3 t① disk_initialize:存储媒介的初始化,一般成功则返回0,如果用sd卡的话,初始化、复位成功后返回零,否则返回1即可。
" F5 D' B( G3 x: {- s6 ~) g② disk_readp :读部分扇区,里面的参数* dest, 存放数据的地址。sector,读的第几个扇区, sofs,从扇区平移多少位 。count 读出的数据个数。. _. q' R: Z8 m: u" Q7 H5 R
③ disk_writep:写部分扇区,里面只有两个参数,写入的数据地址* buff与第几个扇区sc两个数据。但在编写这个程序的时候要注意,由于FatFs内部调用函数的需要,必须按照以下的顺序来,当 buff 指向一个空指针,当sc 不为0 时,则表示对这个扇区的写操作进行初始化;当sc 为0 时,则表示对这个扇区的写操作进行结束操作;当 buff 指向一个内存缓冲区,则是进行正常的读写。; K3 G: w% i) q0 g
2 N( q6 ~6 J U7 G- W) F8 L1 w- L: V
+ ?* {) j3 T5 V' M. _# ?$ oPetit FATFS 文件系统的移植过程:
' d% S0 h; @4 t6 U$ \0 o0 C$ EPetit FATFs是一个可配置的文件系统,使用者可以根据自己的需要进行相应的裁剪。Petit FATFs 提供了5 个程序文件,分别是 diskio.c、diskio.h、integer.h 、pff.c 和pff.h 。其中integer.h 和pff.c 一般情况下不需要进行改动,需要改动的是 diskio.c和pff.h 。diskio.c里面主要包括三个函数的编写即 disk_initialize 、disk_readp 和disk_writep ,这三个函数已经在上面讲过,这里只需将这三个函数写在 diskio.c里面相应的位置即可。配置的工作主要在 pff.h里面。 在pff.h 里面我们需要配置的有:
4 j8 F0 v; [# ^2 ~+ V2 Z7 n1 ^① #define _USE_READ 。有0 和1 两个值可被选择,选择 0 则不使能文件读操作,选择1 则使能读文件操作,在这里我们选择 1,使能读文件操作。
& K5 A" l: X' b- x4 L② #define _USE_DIR。为1 时使能打开一个目录和读一个目录项操作,为 0 时则不使能相应操作,因为我们只测试文件的读/写操作,所以设置其值为 0。
+ k$ t$ a+ Z3 m+ ]6 S③ #define _USE_LSEEK。有 0 和1 两个选择项。1 时使能移动读/写指针操作,为 0 时则禁止。。 1 `3 D% c) B3 T6 e6 O& k0 X* d
④ #define _USE_WRITE。为 1 时使能写文件操作,为 0 时禁止写文件操作。这里设置其值为1,使能写文件操作。3 J1 X7 i I+ k: S- _" @* S
⑤ #define _FS_FAT32。为 0 时仅支持FAT16 文件系统,为1 时支持 FAT32 文件系统。FAT32 文件系统是FAT16 文件系统的升级,而且现在 SD 卡在出厂时一般都默认被格式化为FAT32 文件系统,所以设置其值为 1。 a4 y. o( u e+ g: y$ V
⑥ #define _WORD_ACCESS。有0 和1 两个值可被选择。为 0 时选择字节寻址方式,为1 时选择字寻址方式,一般都置1。 到这里Petit FATFs 文件系统的移植过程完成。- h# G' V6 j4 q; G! J* [
4 @' [& L- X7 _, J2 E+ n # b0 i: B, O0 e0 X6 S: t( ?
# ?0 f# C, u. Y3 Y; C: a
2.petit_fatfsæä»¶ç³»ç»ç§»æ¤.rar
(142.93 KB, 下载次数: 67)
|
9 o( A& @2 ~9 J1 {1 u7 n5 p4 j4 ? |
由于其他原因,后来没弄了5 z' p* ^5 o$ U# Y5 u# A
官方有例子做参考