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