1. 程式人生 > >FATFS檔案系統的移植

FATFS檔案系統的移植

這幾天很懶,很懈怠…

廢話不多說,今天來移植FATFS檔案系統,在移植FATFS之前,我們需要:

1、在網上下載FATFS的原始碼,這個不用說把…

2、準備好SD卡的基本讀寫函式,SPI模式或者SDIO模式均可。

3、在ffconf.h標頭檔案裡修改相應的巨集定義,設定相應的功能。

4、在integer.h中定義好的資料型別,這裡需要了解你的編譯器的資料型別,然後根據編譯器定義好資料型別。(如果使用的是MDK3..58a,則不用改動)

好,下面開始正式移植FATFS!

先將FATFS檔案系統加入工程,新增相應路徑。然後開啟discio.c。

diskio.c裡有如下程式碼:

DSTATUS disk_initialize (
BYTE drv /* Physical drive nmuber (0..) */
)
{
DSTATUS stat;
int result;


switch (drv) {
case ATA :
result = ATA_disk_initialize();
// translate the reslut code here


return stat;


case MMC :
result = MMC_disk_initialize();
// translate the reslut code here


return stat;


case USB :
result = USB_disk_initialize();
// translate the reslut code here


return stat;
}
return STA_NOINIT;
}

這是FATFS提供的初始化磁碟的函式,需要我們將實現準備好的SD_Initiliaze()填進去。

DSTATUS disk_initialize (
BYTE pdrv /* 磁碟的物理分割槽,預設為0 */
)
{
u8 res=0;


switch(pdrv)
{
case SD_CARD://SD卡
res = SD_Initialize();//SD_Initialize() 
if(res)//STM32 SPI的bug,在sd卡操作失敗的時候如果不執行下面的語句,可能導致SPI讀寫異常
{
SD_SPI_SpeedLow();
SD_SPI_ReadWriteByte(0xff);//提供額外的8個時鐘
SD_SPI_SpeedHigh();
}
  break;
default:
res=1; 

if(res)return  STA_NOINIT;
else return 0; //初始化成功
}


DSTATUS disk_status (
BYTE drv /* Physical drive nmuber (0..) */
)
{
DSTATUS stat;
int result;


switch (drv) {
case ATA :
result = ATA_disk_status();
// translate the reslut code here


return stat;


case MMC :
result = MMC_disk_status();
// translate the reslut code here


return stat;


case USB :
result = USB_disk_status();
// translate the reslut code here


return stat;
}
return STA_NOINIT;
}

這個函式直接讓它返回0即可。

DRESULT disk_read (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to read (1..255) */
)
{
DRESULT res;
int result;


switch (drv) {
case ATA :
result = ATA_disk_read(buff, sector, count);
// translate the reslut code here


return res;


case MMC :
result = MMC_disk_read(buff, sector, count);
// translate the reslut code here


return res;


case USB :
result = USB_disk_read(buff, sector, count);
// translate the reslut code here


return res;
}
return RES_PARERR;
}

這是讀扇區函式,將其改為:

DRESULT disk_read (
BYTE pdrv, /* Physical drive nmuber (0..) */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address (LBA) */
UINT count /* Number of sectors to read (1..128) */
)
{
u8 res=0; 
    if (!count)return RES_PARERR;//count不能等於0,否則返回引數錯誤 
switch(pdrv)
{
case SD_CARD://SD卡
res=SD_ReadDisk(buff,sector,count); 
if(res)//STM32 SPI的bug,在sd卡操作失敗的時候如果不執行下面的語句,可能導致SPI讀寫異常
{
SD_SPI_SpeedLow();
SD_SPI_ReadWriteByte(0xff);//提供額外的8個時鐘
SD_SPI_SpeedHigh();
}
break;
default:
res=1; 
}
   //處理返回值,將SPI_SD_driver.c的返回值轉成ff.c的返回值
    if(res==0x00)return RES_OK; 
    else return RES_ERROR;
}

DRESULT disk_write (
BYTE drv, /* Physical drive nmuber (0..) */
const BYTE *buff,/* Data to be written */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to write (1..255) */
)
{
DRESULT res;
int result;


switch (drv) {
case ATA :
result = ATA_disk_write(buff, sector, count);
// translate the reslut code here


return res;


case MMC :
result = MMC_disk_write(buff, sector, count);
// translate the reslut code here


return res;


case USB :
result = USB_disk_write(buff, sector, count);
// translate the reslut code here


return res;
}
return RES_PARERR;
}
這是寫扇區函式,將其改為:

DRESULT disk_write (
BYTE pdrv, /* Physical drive nmuber (0..) */
const BYTE *buff,/* Data to be written */
DWORD sector, /* Sector address (LBA) */
UINT count /* Number of sectors to write (1..128) */
)
{
u8 res=0;  
    if (!count)return RES_PARERR;//count不能等於0,否則返回引數錯誤 
switch(pdrv)
{
case SD_CARD://SD卡
res=SD_WriteDisk((u8*)buff,sector,count);
break;
default:
res=1; 
}
    //處理返回值,將SPI_SD_driver.c的返回值轉成ff.c的返回值
    if(res == 0x00)return RES_OK; 
    else return RES_ERROR;
}

相關推薦

FATFS檔案系統移植

先說下我做的專案實現功能吧!語音播放器,類似一個小MP3那種,只是儲存用的SD卡、TF卡。檔案系統採用了開源的FATFS. FATFS模組的層次結構圖 1、底層介面,包括儲存媒介讀/寫介面(disk I/O)和供給檔案建立修改時間的實時時鐘,需要我們根據平臺和儲存介質編寫移植程式碼

STM32的FATFS檔案系統移植筆記(轉…

一、序言     經常在網上、群裡看到很多人問關於STM32的FATFS檔案系統移植的問題,剛好自己最近也在除錯這個程式,為了讓大家少走彎路,我把我的除錯過程和方法也貢獻給大家。 二、FATFS簡介     FatFs Module是一種完全免費開源的FAT檔案系統模組,專門為小型的嵌入式系統而設計。

fatfs檔案系統移植 讀寫時莫名出現FR_DISK_ERR問題

在移植fatfs檔案系統後,可以讀寫檔案系統,但是在讀寫過程中一直出現FR_DISK_ERR錯誤,以為是底層函式編寫有問題,一直無法解決問題,後經過多方查閱資料,懷疑是SDIO訪問時鐘頻率過高導致,將SDIO時鐘頻率調低

轉一篇比較詳細介紹FatFs檔案系統移植的文章 FatFs檔案系統移植

  因為需要,又不想自己寫,所以就移植了一個檔案系統。     說下我的硬體和開發工具:接成 TRUE IDE 模式下的CF卡(也就是相當於一塊硬碟了),三星S3C2440的ARM9,開發工具是很老很老的D版的ADS1.2。    

轉一篇比較詳細介紹FatFs檔案系統移植的文章

摘自:http://blog.163.com/[email protected]/blog/static/3278568820090710053782/ 補充一點,FatFs的作者寫了兩個,一個是正宗的FatFs,比較適合大的RAM的裝置,另一個是FatFs/

STM32的FATFS檔案系統移植筆記

一、序言     經常在網上、群裡看到很多人問關於STM32的FATFS檔案系統移植的問題,剛好自己最近也在除錯這個程式,為了讓大家少走彎路,我把我的除錯過程和方法也貢獻給大家。 二、FATFS簡介     FatFs Module是一種完全免費開源的FAT檔案系統模組,專

LPC1768 SPI模式下SD卡FatFs檔案系統移植

最近在LPC1768 SPI模式下移植SD卡FatFs(版本R0.09a)檔案系統成功,總結一下移植過程。 一、      底層驅動 使用的SSP0的SPI模式驅動,SSP時鐘開始使用的25M。SD卡驅動測試完成,可讀寫擦除測試沒有問題之後開始檔案系統移植。 要用到的底層驅

Petit FatFs檔案系統移植至STC89C52RC

MCU:STC89C51RC 最高主頻:80M Flash:4K SRAM:512B EEPROM:4K 系統:Petit FatFs 整合開發環境:keil 4 今天將Petit FatFs成功掛載到STC89C52RC晶片上進行執行,實話說這樣做的意義並不

SD 移植fatfs檔案系統

今天算是移植成功了,由於下載的是最新的fatFs,網上資料基本都是以前的系統。有些地方還是改動比較多的,這裡全部列出來。 FRESULT f_mkfs ( const TCHAR* path, /* Logical drive number */ BYTE opt, /* Format option *

FATFS檔案系統移植

這幾天很懶,很懈怠… 廢話不多說,今天來移植FATFS檔案系統,在移植FATFS之前,我們需要: 1、在網上下載FATFS的原始碼,這個不用說把… 2、準備好SD卡的基本讀寫函式,SPI模式或者SDIO模式均可。 3、在ffconf.h標頭檔案裡修改相應的巨集定義,設定相應

FatFS檔案系統詳解-附移植建議

在這裡http://elm-chan.org/fsw/ff/00index_e.html下載原始碼,只有800多K,小的可憐,還可以下載示例程式,有AVR、Win32、lpc等多平臺已實現的方案。開啟看src資料夾,一個option資料夾、00readme.txt、disk

STM32例程之FATFS檔案系統(SPI方式)移植筆記(原始碼下載)

STM32的FATFS檔案系統移植筆記 一、序言     經常在網上、群裡看到很多人問關於STM32的FATFS檔案系統移植的問題,剛好自己最近也在除錯這個程式,為了讓大家少走彎路,我把我的除錯過程和方法也貢獻給大家。 二、FATFS簡介     FatFs Module

[Linux] ARM檔案系統移植記錄

#arm-cotex-A9 M6708 檔案系統移植記錄 本文的主要內容是:記錄在移植檔案系統時所遇到的問題。 ##工具 * ubuntu 16.04.2 server i386(開啟ssh、samba功能) * buildroot-2017.02.3 (藉助buildroot工

#嵌入式Linux最小系統移植# yaffs2根檔案系統移植出錯記錄

busybox官網地址: 本次移植採用的busybox版本: busybox-1.26.0.tar.bz2 交叉編譯工具鏈版本: $ arm-linux-gcc -v gcc version 4.4.3 (ctng-1.6.1) 1

cramfs檔案系統移植經念總結

**************************************************************************************************

基於AT91SAM9X35EK的嵌入式Linux+UBI根檔案系統移植成功

AT91Bootstrap 3.6.0  NAND: Done to load image U-Boot 2014.04 (Feb 15 2016 - 14:56:42) CPU: AT91SAM9X35 Crystal frequency:       12 MHz CPU clock        :  

STM32+SD卡 利用FATFS檔案系統建立資料夾並新建txt檔案

這幾天在移植FATFS檔案系統,在移植過程中需要新建資料夾下建立新的cfg檔案,查詢資料後發現需要用到以下函式: f_mkdir("0:/2017110223");//新建資料夾,其中2017110223是資料夾名稱 f_open(filescr1, "0:20171102

嵌入式系統學習——STM32之FATFS檔案系統

檔案系統是什麼? 負責管理和儲存檔案資訊的軟體機構稱為檔案管理系統,簡稱檔案系統。 即在磁碟上組織檔案的方法。 常用的檔案系統: -FAT / FATFS -NTFS: 基於安全性的檔案系統,是W

系統移植-檔案系統移植

設定驅動選項 make menuconfig Device Drivers <*>Multimedia support [*] Cameras/video grabbers support <*> Media USB Adap

Linux核心及檔案系統移植之jffs2燒錄後無法啟動

近一週的時候都在玩linux 核心及檔案系統移植,使用的版本如下: Bootloader: u-boot-2010.06.tgz Kernel:   linux-3.0.y.tgz