ding_ding0304 发表于 2013-8-15 10:55:26

petit_fatfs文件系统在STC12C5A60S2上移植成功(初学)

Petit 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)中。


Features
Very small RAM consumption (44 bytes work area + certain stack).
Very small code size (2K-4K bytes).
Supports FAT32.
Single volume and Single file.
File write function with some restrictions.
看最后一条,写函数有一些限制。如果不用于写操作的话,这个文件系统是个不错的选择,RAM与ROM消耗都很少,用keil编译的话会消耗250字节左右的栈空间。支持FAT32,FAT。


官方介绍的限制:1、只能挂载一个设备。2、Petit FatFs不能创建文件,只能对已存在的文件进行操作。3、写函数只能写到原来文件的大小,不能扩展大小,不能更新文件时间信息,不能写只读文件。


Petit FATFs能够在不同的单片机平台上运行,具有良好的层次结构,其层次结构,如下图




应用层位于最顶层,它提供供了以下几个函数:
① pf_mount :为Petit FATFs模块注册或者卸载一块工作区域,它包括了设备的初始化(diskio.c中的disk_initialize)、文件系统的设置(FAT32、FAT)等,是Petit FATFs能够工作的前提,在调用其他应用层函数前应先调用此函数。一般用法是:      
               FATFS fatfs;   ///定义一个文件系统对象                     
               if(pf_mount(&fatfs))      printf("Failed"); //如果返回1,则挂载失败,否则成功
② pf_open:打开一个已经存在的文件,在对文件进行读操作和移动读写指针前,首先应该调用该函数。打开的文件必须是已存在的,一般用法:
               if(pf_open("MESSAGE.TXT") )printf("Failed"); //如果返回1,则打开失败,否则成功
③ pf_read:读一个文件。函数的三个参数分别表示读出数据存放的地址,读出数据的大小,反回真正读出的char数据的大小。
④ pf_write:写一个文件。函数的三个参数分别表示写入的数据存放的地址,要写入的数据的大小,返回真正写入的char数据的大小。
⑤ pf_lseek:移动读/写指针。参数表示从第几个数据开始操作。
⑥ pf_opendir:打开一个目录。第一个参数表示指向空白目录结构,第二个表示指向一个已存在的目录名。
⑦ pf_readdir:读一个目录项。 使用者在使用应用层函数时只需调用即可无须理会 Petit FATFs的内部结构以及复杂的FAT 协议。 中间层Petit FATFs 包含了FAT 的读写协议,和最底层 Low Level Disk I/O完全分离,所以一般不用修改。 Low Level Disk I/O位于最底层,它不是 Petit FATFs 模块的一部分,需要根据不同的单片机和不同的存储媒介进行编写,是移植过程中最重要的一部分。
要编写的底层驱动函数有
① disk_initialize:存储媒介的初始化,一般成功则返回0,如果用sd卡的话,初始化、复位成功后返回零,否则返回1即可。
② disk_readp :读部分扇区,里面的参数* dest, 存放数据的地址。sector,读的第几个扇区, sofs,从扇区平移多少位 。count读出的数据个数。
③ disk_writep:写部分扇区,里面只有两个参数,写入的数据地址* buff与第几个扇区sc两个数据。但在编写这个程序的时候要注意,由于FatFs内部调用函数的需要,必须按照以下的顺序来,当 buff 指向一个空指针,当sc 不为0 时,则表示对这个扇区的写操作进行初始化;当sc 为0 时,则表示对这个扇区的写操作进行结束操作;当 buff 指向一个内存缓冲区,则是进行正常的读写。


Petit FATFS 文件系统的移植过程:
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 里面我们需要配置的有:
① #define _USE_READ 。有0 和1 两个值可被选择,选择 0 则不使能文件读操作,选择1 则使能读文件操作,在这里我们选择 1,使能读文件操作。
② #define _USE_DIR。为1 时使能打开一个目录和读一个目录项操作,为 0 时则不使能相应操作,因为我们只测试文件的读/写操作,所以设置其值为 0。
③ #define _USE_LSEEK。有 0 和1 两个选择项。1 时使能移动读/写指针操作,为 0 时则禁止。。
④ #define _USE_WRITE。为 1 时使能写文件操作,为 0 时禁止写文件操作。这里设置其值为1,使能写文件操作。
⑤ #define _FS_FAT32。为 0 时仅支持FAT16 文件系统,为1 时支持 FAT32 文件系统。FAT32 文件系统是FAT16 文件系统的升级,而且现在 SD 卡在出厂时一般都默认被格式化为FAT32 文件系统,所以设置其值为 1。
⑥ #define _WORD_ACCESS。有0 和1 两个值可被选择。为 0 时选择字节寻址方式,为1 时选择字寻址方式,一般都置1。 到这里Petit FATFs 文件系统的移植过程完成。




mcu1234mcu 发表于 2013-8-15 11:14:40

顶起。。。。。。。。。。。。。。

mbass51 发表于 2013-8-16 10:20:08

非常好,但有電路圖嗎?

ding_ding0304 发表于 2013-8-16 10:46:42

mbass51 发表于 2013-8-16 10:20 static/image/common/back.gif
非常好,但有電路圖嗎?

什么电路图?

mbass51 发表于 2013-8-16 10:52:15

mcu連sd的腳位電路圖

ding_ding0304 发表于 2013-8-16 14:19:55

mbass51 发表于 2013-8-16 10:52 static/image/common/back.gif
mcu連sd的腳位電路圖

使用是硬件SPI

mbass51 发表于 2013-8-19 10:55:29

ding_ding0304 发表于 2013-8-16 14:19 static/image/common/back.gif
使用是硬件SPI

是那個pin呢?

armok 发表于 2013-9-19 15:08:09

COOL !

wsm80828 发表于 2013-9-19 16:38:14

非常不错

wx85105157 发表于 2013-9-20 02:33:37

好东西。{:lol:}这样用51都能很好的做WAV播放器之类的东西了

lrzxc 发表于 2013-9-20 08:18:09

文件系统又多个选择了。

xou822 发表于 2013-9-20 08:21:24

我擦比那个啥ZNFAT貌似友好的多哦

谢谢楼主分享才是真的

lydmom 发表于 2013-9-21 08:54:29

{:handshake:}不错,谢谢哈

木虫 发表于 2013-9-21 10:43:54

好 文件系统又多个选择了

zlo007 发表于 2013-11-8 13:30:14

不错, 文件系统又多个选择了,谢谢

FZK374470412 发表于 2014-1-5 20:27:00

就是一直znfat发现RAM不够无法添加更多的功能才郁闷的正好想一直这个   真的很感谢楼主了.........................

sunplus 发表于 2014-1-6 14:24:25

MARK petit_fatfs文件系统在STC12C5A60S2上移植成功(初学)

xou822 发表于 2014-1-6 17:01:02

只有user文件夹下的东西是自己的么其他文件夹都不要动?

ding_ding0304 发表于 2014-1-6 19:14:31

xou822 发表于 2014-1-6 17:01
只有user文件夹下的东西是自己的么其他文件夹都不要动?

diskio.c里面的文件要改!

xou822 发表于 2014-1-7 08:24:38

除了diskio.c以外,其他就只是user文件夹下的内容吗?

diskio要改些什么呢

xCamel 发表于 2014-1-11 08:35:11

顶起、、、、、、、、、、、、、

sunplus 发表于 2014-1-13 09:59:49

MARK ~~~~谢谢分享 FAT@STC12C5A

lingfei 发表于 2014-1-13 12:14:19

赞{:handshake:}

nic_911 发表于 2014-1-13 14:04:54

不错,51又多了一种选择~~~

bondxie3 发表于 2014-3-18 11:11:38

petit_fatfs,不错。小于512字节ram是重点。顶!

huoyunjie 发表于 2014-7-22 23:36:02

Mark一下,正在学习此文件系统!!

wangsidongcx 发表于 2014-10-2 23:23:11

好东西 谢谢分享!!!

沉默胜过白金 发表于 2014-12-1 14:21:10

不错,mark一下。

kcc37133713 发表于 2014-12-1 15:33:09

真給力,幫頂一個!

小李非刀 发表于 2014-12-27 20:13:52

我用的是znfat,支持32G的SD卡

WGS_2014 发表于 2015-1-15 21:49:21

不错试试效果怎么样。。。。。。。。。。。。

工科男生 发表于 2015-9-26 09:15:03

不错,51又多了一种选择~~~

1907931256 发表于 2016-5-6 00:58:02

最近在移植fatfs文件系统,很好很好,看看文件系统之间的差别

shi_90 发表于 2016-5-6 07:55:45

不错正在找!

SmartX 发表于 2016-5-15 14:33:25

值得学习一下{:victory:}

1178917522 发表于 2016-6-3 10:27:06

不错!正好能用上,多谢分享!

52HLX 发表于 2016-9-30 11:18:15

好东西,多谢

xupeibin 发表于 2016-10-18 15:54:07

不错,值得学习

孙风雷 发表于 2016-11-1 22:46:32

记号下拉来

jianplx 发表于 2016-11-2 10:43:22

强            

lujianfeng2001 发表于 2016-11-10 13:43:40

不错不错{:victory:}

lujianfeng2001 发表于 2016-11-13 15:37:35

顶一下{:victory:}{:victory:}{:victory:}
页: [1]
查看完整版本: petit_fatfs文件系统在STC12C5A60S2上移植成功(初学)