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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8090|回復: 1
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:51437 發表于 2013-7-2 15:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
FatFs中文譯文
原網絡的地址如下,下面是我做的一些中文解釋。大家可以到原網站獲取更多的信息。

英文原文: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是一個通用的文件系統模塊,以小的嵌入式系統的FAT文件系統。 FatFs的編程遵守的ANSI C格式語法標準,因此,它是具有獨立于硬件架構。 在不做任何改變就可以被移植到常用的微控制器中,如8051, PIC, AVR, SH, Z80, H8, ARM等。
FatFs 特點

    分離緩沖的FAT結構和每一個文件,適合快速訪問多個文件。
    支持多個驅動器和分區。
    支持FAT12 , FAT16和FAT32 。
    支持8.3格式的文件名(LFN不支持)
    支持兩個分區規則: Fdisk和超級軟盤。
    優化8/16-bit微控制器。


應用接口
FatFs /微型FatFs模塊提供下列功能。

    f_mount - 登記或注銷一個工作領域
    f_open -打開或創建文件
    f_close - 關閉一個文件
    f_read - 讀文件
    f_write - 寫文件
    f_lseek -移動文件讀/寫指針
    f_truncate - 截斷文件
    f_sync - 刷新緩存的數據
    f_opendir - 打開一個目錄
    f_readdir - 閱讀目錄項目
    f_getfree -獲取免費集群
    f_stat - 獲取文件狀態
    f_mkdir - 創建一個目錄
    f_unlink - 刪除文件或目錄
    f_chmod - 更改屬性
    f_utime - 變更時間戳記
    f_rename -重命名/移動文件或目錄
    f_mkfs - 創建一個文件系統的驅動器
    f_forward -轉發文件數據流直接
    fgets - 讀一個字符串
    fputc - 寫一個字符
    fputs - 寫一個字符串
    fprintf - 寫格式化字串

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

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

  經過實際測試,在單片機系統時鐘為11.059 2 MHz下讀一個3.4 MB文件耗時約20 s,平均約170 KB/s;寫一個1 MB文件耗時約6s,平均約166 KB/s,在資源有限的單片機系統下這個讀/寫速度是相當令人滿意的。綜上所述,FatFs Module具有容易移植、功能強大和易于使用的優點,適用于小型嵌入式系統;又是完全的免費和開源,也可以用于教育科研及其商業用途。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:52095 發表于 2013-7-21 19:32 | 只看該作者
好好學習
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美 日韩 视频 | 色橹橹欧美在线观看视频高清 | 五月婷婷亚洲 | 国产精品国产精品国产专区不蜜 | 国产免费a视频 | 婷婷色国产偷v国产偷v小说 | 狠狠干天天干 | 男人天堂网址 | 超碰日本| 一区二区三区视频 | 欧美在线色视频 | 黄色一级免费观看 | 欧洲国产精品视频 | 国产一区二区免费 | 成人免费网站视频 | 久久精品在线播放 | 91精品国产综合久久福利软件 | 午夜精品久久久久久久 | 黄瓜av | 97精品超碰一区二区三区 | 一级毛片在线播放 | 激情欧美一区二区三区中文字幕 | 亚洲免费在线观看 | 91国自视频| 看羞羞视频 | 在线精品国产 | 一级欧美日韩 | 美日韩免费视频 | 久热m3u8| av黄色在线 | 无码一区二区三区视频 | 国产三级精品三级在线观看四季网 | 国产中文字幕在线 | 日本aa毛片a级毛片免费观看 | 日日干夜夜干 | 久久天天躁狠狠躁夜夜躁2014 | 国产精品一区二区免费 | 亚洲一区综合 | 一级毛片视频 | 欧美一区2区三区4区公司 | 亚洲欧美综合精品久久成人 |