久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8051|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

FatFs中文介紹和移植方法(轉(zhuǎn)載)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51437 發(fā)表于 2013-7-2 15:55 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
FatFs中文譯文
原網(wǎng)絡(luò)的地址如下,下面是我做的一些中文解釋。大家可以到原網(wǎng)站獲取更多的信息。

英文原文:FatFs is a generic file system module to implement the FAT file system to small embedded systems. The FatFs is written in compliance with ANSI C, therefore it is independent of hardware architecture. It can be incorporated into cheap microcontrollers, such as 8051, PIC, AVR, SH, Z80, H8, ARM and etc..., without any change.

中文譯文:
FatFs是一個(gè)通用的文件系統(tǒng)模塊,以小的嵌入式系統(tǒng)的FAT文件系統(tǒng)。 FatFs的編程遵守的ANSI C格式語(yǔ)法標(biāo)準(zhǔn),因此,它是具有獨(dú)立于硬件架構(gòu)。 在不做任何改變就可以被移植到常用的微控制器中,如8051, PIC, AVR, SH, Z80, H8, ARM等。
FatFs 特點(diǎn)

    分離緩沖的FAT結(jié)構(gòu)和每一個(gè)文件,適合快速訪問(wèn)多個(gè)文件。
    支持多個(gè)驅(qū)動(dòng)器和分區(qū)。
    支持FAT12 , FAT16和FAT32 。
    支持8.3格式的文件名(LFN不支持)
    支持兩個(gè)分區(qū)規(guī)則: Fdisk和超級(jí)軟盤。
    優(yōu)化8/16-bit微控制器。


應(yīng)用接口
FatFs /微型FatFs模塊提供下列功能。

    f_mount - 登記或注銷一個(gè)工作領(lǐng)域
    f_open -打開(kāi)或創(chuàng)建文件
    f_close - 關(guān)閉一個(gè)文件
    f_read - 讀文件
    f_write - 寫文件
    f_lseek -移動(dòng)文件讀/寫指針
    f_truncate - 截?cái)辔募?br />     f_sync - 刷新緩存的數(shù)據(jù)
    f_opendir - 打開(kāi)一個(gè)目錄
    f_readdir - 閱讀目錄項(xiàng)目
    f_getfree -獲取免費(fèi)集群
    f_stat - 獲取文件狀態(tài)
    f_mkdir - 創(chuàng)建一個(gè)目錄
    f_unlink - 刪除文件或目錄
    f_chmod - 更改屬性
    f_utime - 變更時(shí)間戳記
    f_rename -重命名/移動(dòng)文件或目錄
    f_mkfs - 創(chuàng)建一個(gè)文件系統(tǒng)的驅(qū)動(dòng)器
    f_forward -轉(zhuǎn)發(fā)文件數(shù)據(jù)流直接
    fgets - 讀一個(gè)字符串
    fputc - 寫一個(gè)字符
    fputs - 寫一個(gè)字符串
    fprintf - 寫格式化字串

Disk I/O Interface
disk_initialize -初始化的磁盤驅(qū)動(dòng)器
disk_status - 獲取磁盤狀態(tài)disk_read - 讀部門(星期日)disk_write - 收件部門(星期日)disk_ioctl - 控制裝置依賴功能get_fattime - 獲取當(dāng)前時(shí)間

一種易于移植和使用的文件系統(tǒng)FatFs Moule
      引 言
  隨著信息技術(shù)的發(fā)展,當(dāng)今社會(huì)的信息量越來(lái)越大,以往由單片機(jī)構(gòu)成的系統(tǒng)簡(jiǎn)單地對(duì)存儲(chǔ)媒介按地址、按字節(jié)的讀/寫已經(jīng)不滿足人們實(shí)際應(yīng)用的需要,于是利用文件系統(tǒng)對(duì)存儲(chǔ)媒介進(jìn)行管理成了今后單片機(jī)系統(tǒng)的一個(gè)發(fā)展方向。目前常用的文件系統(tǒng)主要有微軟的FATl2、FATl6、FAT32、NTFS,以及Linux系統(tǒng)下的EXT2、EXT3等。由于微軟Windows的廣泛應(yīng)用,在當(dāng)前的消費(fèi)類電子產(chǎn)品中,用得最多的還是FAT文件系統(tǒng),如U盤、MP3、MP4、數(shù)碼相機(jī)等,所以找到一款容易移植和使用、占用硬件資源相對(duì)較小而功能又強(qiáng)大的FAT開(kāi)源文件系統(tǒng),對(duì)于單片機(jī)系統(tǒng)設(shè)計(jì)者來(lái)說(shuō)是很重要的。
  FatFs Module是一種完全免費(fèi)開(kāi)源的FAT文件系統(tǒng)模塊,專門為小型的嵌入式系統(tǒng)而設(shè)計(jì)。它完全用標(biāo)準(zhǔn)C語(yǔ)言編寫,所以具有良好的硬件平臺(tái)獨(dú)立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列單片機(jī)上而只需做簡(jiǎn)單的修改。它支持FATl2、FATl6和FAT32,支持多個(gè)存儲(chǔ)媒介;有獨(dú)立的緩沖區(qū),可以對(duì)多個(gè)文件進(jìn)行讀/寫,并特別對(duì)8位單片機(jī)和16位單片機(jī)做了優(yōu)化。FatFs Module有個(gè)簡(jiǎn)化版本Tiny—FatFs,它跟完全版FatFs的不同之處主要有兩點(diǎn):
  ①占用內(nèi)存更少,只要1 KB RAM;
  ②1次僅支持1個(gè)存儲(chǔ)介。
  FatFs和Tiny—FatFs的用法一樣,僅僅是包含不同的頭文件即可,非常方便,本文主要介紹Tiny-FatFs.
  1 Tiny-FatFs
  1.1 移植前的準(zhǔn)備
  FatFs Module一開(kāi)始就是為了能在不同的單片機(jī)上使用而設(shè)計(jì)的,所以具有良好的層次結(jié)構(gòu),如圖1所示。最頂層是應(yīng)用層,使用者無(wú)需理會(huì)FatFs Module的內(nèi)部結(jié)構(gòu)和復(fù)雜的FAT協(xié)議,只需要調(diào)用FatFs Module提供給用戶的一系列應(yīng)用接口函數(shù),如f_open,f_read,f_write、f_close等,就可以像在PC上讀/寫文件那樣簡(jiǎn)單。
  
   中間層FatFs Module實(shí)現(xiàn)了FAT文件讀/寫協(xié)議。FatFs Module的完全版提供的是ff.c、ff.h,簡(jiǎn)化版Tiny—FatFs提供的是tff.c、tff.h。除非有必要,使用者一般不用修改,使用時(shí)將需要版本的頭文件直接包含進(jìn)去即可。
  需要使用者編寫移植代碼的是FatFs Module提供的底層接口,它包括存儲(chǔ)媒介讀/寫接口DiskIO和供給文件創(chuàng)建修改時(shí)間的實(shí)時(shí)時(shí)鐘。
  本移植硬件平臺(tái)使用型號(hào)為ATmegal28的AVR單片機(jī)和SD卡。ATmegal28是一種8位RISC單片機(jī),具有多達(dá)4 KB的RAM、128 KB的內(nèi)部Flash和豐富的外設(shè)。軟件平臺(tái)是WINAVR,具有代碼優(yōu)化能力強(qiáng)和完全免費(fèi)的優(yōu)點(diǎn)。
  1.2 移植步驟
  1.2.1 編寫SPI和SD卡接口代碼
  本文使用SD卡的SPI通信模式。SD卡的DI接MOSI,DO接MISO,CS接SS。這就需要ATmegal28提供SPI讀/寫接口代碼,主要包括初始化、讀和寫。SPI初始化包括SPI相關(guān)寄存器的初始化和相關(guān)I/O口的初始化。將ATmega 128的SPI配置成主機(jī)模式、數(shù)據(jù)高位先傳、時(shí)鐘速率為二分之一系統(tǒng)時(shí)鐘等。代碼如下:
SPCR=(O<<SPIE)|
   (1<<SPE)|
   (O<<DORD) |
   (1<<MSTR)|
   (O<<CPOL) |
   (O<<CPHA)|
   (O<<SPR1) |
   (O<<SPRO);
SPSR|=(1<<SPI2X);
  接著配置I/O口的輸入/輸出。MOSI腳和Ss腳配置成輸出,MISO腳配置成輸入。然后,就可以進(jìn)行讀/寫了。
  讀1個(gè)字節(jié)的SPI接口代碼:
  static BYTE rcvr_spi(void){
      SPDR=OxFF;
      loop_until_bit_is_set(SPSR,SPIF);
      return SPDR;
  }
  寫1個(gè)字節(jié)的SPI接口代碼:
  static void xmit_spi(BYTE dat){
      SPDR=dat;
      loop_until_bit_is_set(SPSR,SPIF)
  }
  在具備SPI讀/寫接口的基礎(chǔ)上編寫SD卡接口代碼,需要編寫3個(gè)基本接口函數(shù):
  ①向SD卡發(fā)送1條命令:
  Static BYTE send-cmd(BYTE cmd,DWORD arg);
  ②向SD卡發(fā)送1個(gè)數(shù)據(jù)包:
  Static BOOL xmit—datablock(const BYTE *buff,BYTE token);
  ③從SD卡接收1個(gè)數(shù)據(jù)包:
  static BCK]L rcvr-datablock(BYTE*buff,UINT btr);
  1.2.2 編寫DiskIO
  編寫好存儲(chǔ)媒介的接口代碼后,就可以編寫DiskIO了,DiskIO結(jié)構(gòu)如圖2所示。
  Tiny—FatFs的移植實(shí)際上需要編寫6個(gè)接口函數(shù),分別是:
  
  ①DSTATUS disk_initialize(BYTE drv);
  存儲(chǔ)媒介初始化函數(shù)。由于存儲(chǔ)媒介是SD卡,所以實(shí)際上是對(duì)SD卡的初始化。drv是存儲(chǔ)媒介號(hào)碼,由于Tinv—FatFs只支持一個(gè)存儲(chǔ)媒介,所以drv應(yīng)恒為O。執(zhí)行無(wú)誤返回0,錯(cuò)誤返回非O。
  ②DSTATUS disk_status(BYTE drV);
  狀態(tài)檢測(cè)函數(shù)。檢測(cè)是否支持當(dāng)前的存儲(chǔ)媒介,對(duì)Tinv—FatFs來(lái)說(shuō),只要drv為0,就認(rèn)為支持,然后返回O。
  ③DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE.count);
讀扇區(qū)函數(shù)。在SD卡讀接口函數(shù)的基礎(chǔ)上編寫,*buff存儲(chǔ)已經(jīng)讀取的數(shù)據(jù),sector是開(kāi)始讀的起始扇區(qū),count是需要讀的扇區(qū)數(shù)。1個(gè)扇區(qū)512個(gè)字節(jié)。執(zhí)行無(wú)誤返回O,錯(cuò)誤返回非0。
  ④DRESULT disk_write(BYTE drv,const BYTE*buff,DWORD sector,BYTE count);
  寫扇區(qū)函數(shù)。在SD卡寫接口函數(shù)的基礎(chǔ)上編寫,*buff存儲(chǔ)要寫入的數(shù)據(jù),sector是開(kāi)始寫的起始扇區(qū)count是需要寫的扇區(qū)數(shù)。1個(gè)扇區(qū)512個(gè)字節(jié)。執(zhí)行無(wú)誤返回O,錯(cuò)誤返回非0。
  ⑤DRESULT disk_ioctl(BYTE drv,BYTE ctrl,VoiI*buff);
  存儲(chǔ)媒介控制函數(shù)。ctrl是控制代碼,*buff存儲(chǔ)或接收控制數(shù)據(jù)。可以在此函數(shù)里編寫自己需要的功能代碼,比如獲得存儲(chǔ)媒介的大小、檢測(cè)存儲(chǔ)媒介的上電與否存儲(chǔ)媒介的扇區(qū)數(shù)等。如果是簡(jiǎn)單的應(yīng)用,也可以不用編寫,返回O即可。
  ⑥D(zhuǎn)WORD get_fattime(Void);
  實(shí)時(shí)時(shí)鐘函數(shù)。返回一個(gè)32位無(wú)符號(hào)整數(shù),時(shí)鐘信息包含在這32位中,如下所示:
  bit31:25 年(O..127)從1980年到現(xiàn)在的年數(shù)
  bit24:21 月(1…12)
  bit20:16 日(1..31)
  bitl5.1] 時(shí)(O..23)
  bitl0:5 分(O..59)
  bit4:0 秒/2(0..29)
  如果用不到實(shí)時(shí)時(shí)鐘,也可以簡(jiǎn)單地返回一個(gè)數(shù)。正確編寫完DiskIO,移植工作也就基本完成了,接下來(lái)的工作就是對(duì)Tiny—FatFs進(jìn)行配置。
  2 Tiny—FatFs的配置
  Tiny—FatFs是一款可配置可裁減的文件系統(tǒng),使用者可以選擇自己需要的功能。Tiny—FatFs總共有5個(gè)文件,分別是tff.c、tff.h、diskio.c、diskio.h和integer.h。tff_c和integer.h一般不用改動(dòng),前面的移植工作主要更改的是diskio.c,而配置Tiny—FatFs則主要修改tff.h和diskio.h。
  在diskio.h中,使用者可以根據(jù)需要使能disk—write或disk_ioetl。以下代碼使能disk_write和disk_ioctl:
  #define—R'EADONLY 0
  #define—USE_IOCTL 1
  在tff.h中,使用者可以根據(jù)需要對(duì)整個(gè)文件系統(tǒng)進(jìn)行全面的配置:
  ①  #define_MCU_ENDIAN。有1和2兩個(gè)值可設(shè),默認(rèn)情況下設(shè)1,以獲得較好的系統(tǒng)性能。如果單片機(jī)是大端模式或者設(shè)為1時(shí)系統(tǒng)運(yùn)行不正常,則必須設(shè)為2。
  ② #define_FS_READONLY。設(shè)為1時(shí)將使能只讀操作,程序編譯時(shí)將文件系統(tǒng)中涉及寫的操作全部去掉,以節(jié)省空間。
  ③#define_FS_MINIMIZE。有0、1、2、3四個(gè)選項(xiàng)可設(shè)。設(shè)0表示可以使用全部Tiny-FatFs提供的用戶函數(shù);設(shè)1將禁用f_stat、f_getfree、f_unlink、f_mkdir、f_chmod和f_rename;設(shè)2將在1的基礎(chǔ)上禁用f_opendir和f_readdir;設(shè)3將在1和2的基礎(chǔ)上再禁用f_lseek。使用者可以根據(jù)需要進(jìn)行裁減,以節(jié)省空間。
  
  3 TINY-FatFs 的讀/寫測(cè)試
  Tiny-FatFs的功能很強(qiáng)大,提供了豐富而易于使用的用戶接口函數(shù),如圖3所示。
  
  Tiny—FatFs的功能很全,本文僅測(cè)試f_mount、f_open、f_read、f_write和f_close五個(gè)函數(shù)來(lái)讀一個(gè)3.4 MB的文件和寫一個(gè)1MB的文件,文件名分別為testl.dat和test2.dat。主要代碼如下:
  

  經(jīng)過(guò)實(shí)際測(cè)試,在單片機(jī)系統(tǒng)時(shí)鐘為11.059 2 MHz下讀一個(gè)3.4 MB文件耗時(shí)約20 s,平均約170 KB/s;寫一個(gè)1 MB文件耗時(shí)約6s,平均約166 KB/s,在資源有限的單片機(jī)系統(tǒng)下這個(gè)讀/寫速度是相當(dāng)令人滿意的。綜上所述,F(xiàn)atFs Module具有容易移植、功能強(qiáng)大和易于使用的優(yōu)點(diǎn),適用于小型嵌入式系統(tǒng);又是完全的免費(fèi)和開(kāi)源,也可以用于教育科研及其商業(yè)用途。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:52095 發(fā)表于 2013-7-21 19:32 | 只看該作者
好好學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产综合一区二区 | 欧美一级大片免费观看 | 成人高清在线视频 | 黄色亚洲网站 | 成人不卡一区二区 | 高清国产一区二区 | 日韩一区二区三区在线 | 成人免费在线视频 | 日韩一区中文字幕 | 毛片免费观看 | 在线观看av网站永久 | 天天操天天操 | 国产精品久久免费观看 | 亚洲三区在线观看 | 中文字幕在线免费观看 | 亚洲精品国产一区 | 国产美女精品 | 久久99精品久久久 | 涩涩视频在线观看免费 | www.久久| 狠狠的操 | 瑟瑟视频在线看 | 先锋资源站| 欧美日韩综合视频 | 国产福利视频 | 日韩视频在线一区 | 国产第一页在线观看 | 欧美夜夜 | 九色视频网 | 99国内精品久久久久久久 | 亚洲综合色丁香婷婷六月图片 | 9999国产精品欧美久久久久久 | 91色综合| 国户精品久久久久久久久久久不卡 | www.亚洲| 一区二区三区四区国产精品 | 中国大陆高清aⅴ毛片 | 欧美日韩国产一区二区 | av日韩一区| 国产免费视频 | 99精品网|