你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

petit_fatfs文件系统在STC12C5A60S2上的移植

[复制链接]
小丁^_^ 发布时间:2015-1-7 21:36
. e3 S% a& J8 P7 P( a8 `6 {
这是很久之前弄的一个东西,petit_fatfs文件系统适合RAM小的单片机
  h  T% L- p( P2 E( q& A

! J, c8 q4 E2 F# {: e8 PPetit 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)中。- q* A: i, M; _

+ x* o4 I0 @2 `
6 c4 \: q: E* |3 F" Z+ a4 }Features, \+ z, S& H, z& N1 S% `" [7 E
Very small RAM consumption (44 bytes work area + certain stack).  }8 f- g' Z0 {6 Z; {
Very small code size (2K-4K bytes).
5 F6 ]3 h8 @! j) B- i8 e) \Supports FAT32.& a( f  T- _' H( M0 P. @, g, V* B+ z  k& T
Single volume and Single file.
' v' p3 d- a6 C, S/ |File write function with some restrictions.' x; M, W, W6 d1 l5 o
看最后一条,写函数有一些限制。如果不用于写操作的话,这个文件系统是个不错的选择,RAM与ROM消耗都很少,用keil编译的话会消耗250字节左右的栈空间。支持FAT32,FAT。4 c, H9 U+ T8 F+ t
, i& s/ ~% C3 m  K! D; R2 ~

& O, f+ S. J  o" L$ c+ e官方介绍的限制:1、只能挂载一个设备。2、Petit FatFs不能创建文件,只能对已存在的文件进行操作。3、写函数只能写到原来文件的大小,不能扩展大小,不能更新文件时间信息,不能写只读文件。3 F& j# x  }1 I% E) x* @: p$ h
" ?/ b4 l. @7 \- t1 x. y' n; L' ~

7 ~7 d3 M* G' o0 ?$ n. {9 uPetit FATFs能够在不同的单片机平台上运行,具有良好的层次结构,其层次结构,如下图2 M4 h, t  r: R( B) {# `
/ L. V1 q1 |4 Q! }6 H2 U2 Q
, g/ }2 q* S2 D1 E0 X$ O
4 o: a! J! j" ?& c/ }
9 S+ N; J0 ?" W4 Z; |3 Y- G
应用层位于最顶层,它提供供了以下几个函数:4 m  w) l5 M0 n2 F9 ^( H$ l, A) S
① pf_mount :为Petit FATFs模块注册或者卸载一块工作区域,它包括了设备的初始化(diskio.c中的disk_initialize)、文件系统的设置(FA  T32、FAT)等,是Petit FATFs能够工作的前提,在调用其他应用层函数前应先调用此函数。一般用法是:      - t$ l/ J( F7 J0 ?& g) Q
                 FATFS fatfs;   ///定义一个文件系统对象                       / G6 @+ w  S! |% U/ H$ V% K
                 if(pf_mount(&fatfs))        printf("Failed"); //如果返回1,则挂载失败,否则成功  $ F0 [+ u4 V4 e, M) m$ y' [5 E
② pf_open:打开一个已经存在的文件,在对文件进行读操作和移动读写指针前,首先应该调用该函数。打开的文件必须是已存在的,一般用法:
( S& @2 a" Z  p' p                 if(pf_open("MESSAGE.TXT") )  printf("Failed"); //如果返回1,则打开失败,否则成功
( M2 s# a1 b7 i6 P+ Q) E5 C% r: ?③ pf_read:读一个文件。函数的三个参数分别表示读出数据存放的地址,读出数据的大小,反回真正读出的char数据的大小。# l2 V/ Y3 y) V
④ pf_write:写一个文件。函数的三个参数分别表示写入的数据存放的地址,要写入的数据的大小,返回真正写入的char数据的大小。 6 L2 n1 {, n1 \/ S( Y7 ~# Q; @
⑤ pf_lseek:移动读/写指针。参数表示从第几个数据开始操作。
1 g$ b+ r. {/ P* ?⑥ pf_opendir:打开一个目录。第一个参数表示指向空白目录结构,第二个表示指向一个已存在的目录名。 9 p- F" N. H$ \) H* I: f2 l
⑦ pf_readdir:读一个目录项。 使用者在使用应用层函数时只需调用即可无须理会 Petit FATFs的内部结构以及复杂的FAT 协议。 中间层Petit FATFs 包含了FAT 的读写协议,和最底层 Low Level Disk I/O完全分离,所以一般不用修改。 Low Level Disk I/O位于最底层,它不是 Petit FATFs 模块的一部分,需要根据不同的单片机和不同的存储媒介进行编写,是移植过程中最重要的一部分。! g# r* u% y2 m9 J
要编写的底层驱动函数有6 h  f- L8 X0 A* ~- M/ c  t! u+ d
① disk_initialize:存储媒介的初始化,一般成功则返回0,如果用sd卡的话,初始化、复位成功后返回零,否则返回1即可。
& N. N7 ^0 Y0 m: L7 a; ?1 e. ?5 w. E② disk_readp :读部分扇区,里面的参数* dest, 存放数据的地址。sector,读的第几个扇区, sofs,从扇区平移多少位 。count  读出的数据个数。4 s' p; `$ d5 N) K, J" _
③ disk_writep:写部分扇区,里面只有两个参数,写入的数据地址* buff与第几个扇区sc两个数据。但在编写这个程序的时候要注意,由于FatFs内部调用函数的需要,必须按照以下的顺序来,当 buff 指向一个空指针,当sc 不为0 时,则表示对这个扇区的写操作进行初始化;当sc 为0 时,则表示对这个扇区的写操作进行结束操作;当 buff 指向一个内存缓冲区,则是进行正常的读写。! i7 E  g+ o/ Y( {
9 f/ O! S+ Q0 P" q" ?3 e* @
5 e0 Y9 K: A5 J6 c
Petit FATFS 文件系统的移植过程:1 t5 z8 L7 L2 U
Petit 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 里面我们需要配置的有:
# U" ]( ~: U- Y6 u0 M1 c' _① #define _USE_READ 。有0 和1 两个值可被选择,选择 0 则不使能文件读操作,选择1 则使能读文件操作,在这里我们选择 1,使能读文件操作。) u  c  R, |8 N, B+ _  r0 \5 u$ b8 F
② #define _USE_DIR。为1 时使能打开一个目录和读一个目录项操作,为 0 时则不使能相应操作,因为我们只测试文件的读/写操作,所以设置其值为 0。 , z; n2 V6 _6 K- L4 o8 ]
③ #define _USE_LSEEK。有 0 和1 两个选择项。1 时使能移动读/写指针操作,为 0 时则禁止。。
) A6 C9 {& [# n  [1 v* p5 |0 I/ G9 G④ #define _USE_WRITE。为 1 时使能写文件操作,为 0 时禁止写文件操作。这里设置其值为1,使能写文件操作。
! O8 l% ?! U" A, p: `2 `+ b⑤ #define _FS_FAT32。为 0 时仅支持FAT16 文件系统,为1 时支持 FAT32 文件系统。FAT32 文件系统是FAT16 文件系统的升级,而且现在 SD 卡在出厂时一般都默认被格式化为FAT32 文件系统,所以设置其值为 1。 5 h9 o- [# R  w3 K# e% v
⑥ #define _WORD_ACCESS。有0 和1 两个值可被选择。为 0 时选择字节寻址方式,为1 时选择字寻址方式,一般都置1。 到这里Petit FATFs 文件系统的移植过程完成。
1 `/ u2 S" @6 y1 T) k: x
. i1 J; Y0 c& w) q( z; q1 N6 y
- B0 s" J" N4 f: ]3 P4 W
! Z8 y: e- T+ j) o, n$ r
2.petit_fatfs文件系统移植.rar (142.93 KB, 下载次数: 67)

- J4 _5 Y6 T5 G1 [: x
收藏 评论2 发布时间:2015-1-7 21:36

举报

2个回答
feixiang20 回答时间:2015-1-7 21:57:16
你这个有没有具体点的实际例子呢
小丁^_^ 回答时间:2015-1-7 22:00:43
feixiang20 发表于 2015-1-7 21:57
5 m9 }1 y1 F, q  l你这个有没有具体点的实际例子呢
  r7 Z/ u) ^- C
由于其他原因,后来没弄了' T7 a: {- I9 W9 ?1 }  Y7 P
官方有例子做参考   pfsample.zip (182.19 KB, 下载次数: 25)

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版