精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FATFS文件系統(tǒng)移植

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-06-06 09:28 ? 次閱讀

1.簡介

FatFs 是用于小型嵌入式系統(tǒng)的通用 FAT/exFAT 文件系統(tǒng)模塊。FatFs 模塊是按照 ANSI C (C89) 編寫的,與磁盤 I/O 層完全分離。因此它獨(dú)立于平臺。它可以集成到資源有限的小型微控制器中,例如 8051、PIC、AVR、ARM、Z80、RX 等。
特性

DOS/Windows 兼容 FAT/exFAT 文件系統(tǒng)。

平臺獨(dú)立。易于移植。

程序代碼和工作區(qū)的占用空間非常小。

支持的各種配置選項(xiàng):

支持多卷(物理驅(qū)動(dòng)器或分區(qū));

多個(gè) ANSI/OEM 代碼頁包括 DBCS;

支持長文件名, ANSI/OEM 或 Unicode;

支持 RTOS

支持多種扇區(qū)大小;

只讀、最小化的 API 和 I/O 緩沖區(qū)等。

FATFS應(yīng)用范圍

支持 FAT12、 FAT16 和 FAT32;

可打開的文件:無限制,依賴于有效的存儲(chǔ)器;

支持最多 10 個(gè)卷;

文件大小:與 FAT 類型有關(guān)(upto 4G-1 bytes);

卷大小:與 FAT 類型有關(guān)(upto 2T bytes on 512 bytes/sector);

簇大小:與 FAT 類型有關(guān)(upto 64K bytes on 512 bytes/sector);

扇區(qū)大小:與 FAT 類型有關(guān)(upto 4K bytes)

2.軟件硬件平臺

  • 開發(fā)板:STM32F103ZE
  • FLASH:SD卡一張
  • 完整SD卡驅(qū)動(dòng)工程(這里選擇SDIO驅(qū)動(dòng)方式)
  • FATFS源碼

3.FAT源碼下載

下載地址:FATFS下載

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

4.FATFS文件系統(tǒng)移植

移植FATFS文件系統(tǒng)只需要提供硬件讀寫扇區(qū)函數(shù)即可。
??1.FATFS源碼文件

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

2.打開工程,將FATFS源碼文件添加到工程中,添加頭文件路徑。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_centerwatermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

5.修改硬件接口文件diskio.c

??1.添加SD卡驅(qū)動(dòng)頭文件和驅(qū)動(dòng)設(shè)備卷標(biāo)號設(shè)置。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

2.獲取設(shè)置狀態(tài)

在這里插入圖片描述

3.初始化設(shè)備

在這里插入圖片描述
DSTATUS disk_initialize (
	BYTE pdrv				/* Physical drive nmuber to identify the drive */
)
{
	DSTATUS stat;
	switch (pdrv) {
	case DEV_SD :
		stat=SD_Init();//SD卡初始化
        return stat;
	}
	return STA_NOINIT;
}

4.讀扇區(qū)函數(shù)

在這里插入圖片描述
DRESULT disk_read (
	BYTE pdrv,		/* Physical drive nmuber to identify the drive */
	BYTE *buff,		/* Data buffer to store read data */
	LBA_t sector,	/* Start sector in LBA */
	UINT count		/* Number of sectors to read */
)
{
	int result;
	switch (pdrv) {
	case DEV_SD :
        result=SD_ReadDisk(buff,sector,count);//讀扇區(qū)
        if(result==0)return RES_OK;
	}
	return RES_PARERR;
}

5.寫扇區(qū)函數(shù)

在這里插入圖片描述
DRESULT disk_write (
	BYTE pdrv,			/* Physical drive nmuber to identify the drive */
	const BYTE *buff,	/* Data to be written */
	LBA_t sector,		/* Start sector in LBA */
	UINT count			/* Number of sectors to write */
)
{
	int result;
	switch (pdrv) {
	case DEV_SD :
        result=SD_WriteDisk((u8 *)buff,sector,count);//寫扇區(qū)
        if(result==0)return RES_OK;
	}

	return RES_PARERR;
}

6.其他函數(shù)

在這里插入圖片描述
DRESULT disk_ioctl (
	BYTE pdrv,		/* Physical drive nmuber (0..) */
	BYTE cmd,		/* Control code */
	void *buff		/* Buffer to send/receive control data */
)
{
	switch (pdrv) {
	case DEV_SD :
        switch(cmd)
        {
            case GET_SECTOR_COUNT://獲取扇區(qū)數(shù)量
                 *(DWORD *)buff=SDCardInfo.CardCapacity/512;
                break;
            case GET_SECTOR_SIZE://獲取扇區(qū)大小
                *(DWORD *)buff=512;
                break;
            case GET_BLOCK_SIZE://塊大小
                *(DWORD *)buff=SDCardInfo.CardBlockSize;
                break; 
        }
        return RES_OK;
    }
	return RES_PARERR;
}

7.時(shí)間函數(shù),為文件訪問提供時(shí)間。

在這里插入圖片描述

6.裁剪FATFS文件系統(tǒng),修改ffconf.h

1.打開格式化功能

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

2.編碼格式選擇

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

3.打開長文件名支持。使用中文編碼需要長文件名支持。

在這里插入圖片描述

選擇3時(shí)需要提供動(dòng)態(tài)分配空間接口函數(shù),在ffsystem.c中

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

修改堆空間大小,在startup_stm32f103_hd.s中

在這里插入圖片描述

4.獲取時(shí)間支持

在這里插入圖片描述

7.主函數(shù)

??編寫測試函數(shù),讀寫文件。

#include "ff.h"			/* Obtains integer types */
FATFS fs;
u8 buff_tx[512]="SD卡扇區(qū)讀寫測試,文件系統(tǒng)讀寫測試sdfghj23456790\r\n";
u8 buff_rx[512];
void Fatfs_WriteData(const TCHAR *file_name,u8 *buff,u32 len);
void Fatfs_ReadData(const TCHAR *file_name,u8 *buff,u32 len);
int main()
{
    u8 stat=0;
	Beep_Init();
	Led_Init();
	Key_Init();
	Usartx_Init(USART1,115200,72);
	TIMx_Init(TIM2,72,20*1000);
    RTC_Init();
    stat=f_mount(&fs,"0:",1);//SD卡掛載
    printf("stat=%d\r\n",stat);
    if(stat==0) printf("磁盤掛載成功\r\n");
	Fatfs_WriteData("0:/FAT文件系統(tǒng).doc",buff_tx,strlen((char *)buff_tx));
	Fatfs_ReadData("0:/FAT文件系統(tǒng).doc",buff_rx,strlen((char *)buff_tx));
	printf("rx:%s\r\n",buff_rx);
	while(1)
	{
	}

?寫數(shù)據(jù)函數(shù)

/**************FATFS寫數(shù)據(jù)****************/
void Fatfs_WriteData(const TCHAR *file_name,u8 *buff,u32 len)
{
	/*1.打開文件*/
	FIL fp;
	FRESULT res;
	UINT bw;
	res=f_open(&fp,file_name,FA_WRITE|FA_CREATE_ALWAYS);//寫+創(chuàng)建
	if(res!=FR_OK)
	{
		printf("文件打開或創(chuàng)建失敗:ERR%d\r\n",res);
		return ;
	}
	printf("文件創(chuàng)建或打開成功\r\n");
	res=f_write(&fp,buff,len,&bw);
	if(res==FR_OK)
	{
		printf("數(shù)據(jù)寫入成功 %d Byte\r\n",bw);
	}
	else printf("寫入失敗ERR:%d\r\n",res);
	f_close(&fp);//關(guān)閉文件
}

讀數(shù)據(jù)函數(shù)

/****************FATFS讀數(shù)據(jù)*************/
void Fatfs_ReadData(const TCHAR *file_name,u8 *buff,u32 len)
{
		/*1.打開文件*/
	FIL fp;
	FRESULT res;
	UINT br;
	res=f_open(&fp,file_name,FA_READ);//讀
	if(res!=FR_OK)
	{
		printf("文件打開失敗:ERR%d\r\n",res);
		return ;
	}
	printf("文件打開成功\r\n");
	res=f_read(&fp,buff,len,&br);
	if(res!=FR_OK)
	{
		printf("讀取數(shù)據(jù)失敗ERR:%d \r\n",res);
	}
	else
	{
		printf("讀取數(shù)據(jù)成功 %d byte\r\n",br);
	}
	f_close(&fp);//關(guān)閉文件
}

8.運(yùn)行效果

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

9.相關(guān)接口函數(shù)

1.f_open函數(shù)

函數(shù)原型:FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode);
函數(shù)功能: 打開文件
形參: fp 文件指針
path 文件名
?mode 文件操作權(quán)限
文件操作權(quán)限有下列幾種

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

返回值:成功返回FR_OK,失敗其它值。

2.f_read函數(shù)

函數(shù)原型:FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br);
函數(shù)功能:讀文件
形參:fp 文件指針
?buff 讀取數(shù)據(jù)緩沖區(qū)
?btr 讀取的字節(jié)數(shù)
?br 指向返回的已經(jīng)讀取的字節(jié)數(shù) UINT 變量的指針,不管此函數(shù)掉調(diào)用后返回的結(jié)果如何,這個(gè)值始終有效。如果返回值等于btr,則函數(shù)返回值為FR_OK。
返回值:成功返回FR_OK,失敗返回其它值

3.f_write函數(shù)

函數(shù)原型:FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw);
函數(shù)功能:寫文件
形參:fp 文件指針
?buff 要寫的數(shù)據(jù)內(nèi)容
?btw?寫入是字節(jié)數(shù)
?br 指向接收寫入字節(jié)數(shù)的UINT變量的指針。無論函數(shù)返回代碼如何,該值在函數(shù)調(diào)用后始終有效。如果返回值等于btw,則函數(shù)返回值為FR_OK。
返回值:成功返回FR_OK,失敗返回其它值

4.f_close函數(shù)

函數(shù)原型:FRESULT f_close (FIL* fp);
函數(shù)功能:關(guān)閉文件
形參:fp ?文件指針
返回值:成功返回FR_OK,失敗返回其它值


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352499
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    553

    瀏覽量

    63520
  • FATFS
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    18211
  • FatFS文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    7498
收藏 人收藏

    評論

    相關(guān)推薦

    基于STM32完成FATFS文件系統(tǒng)移植與運(yùn)用

    這篇文章主要演示FATFS文件系統(tǒng)如何移植到自己的工程,并完成文件的讀寫。 因?yàn)镾D卡采用的是SPI模擬時(shí)序,所以,其他單片機(jī)一樣可以照著移植
    的頭像 發(fā)表于 03-08 09:17 ?5704次閱讀
    基于STM32完成<b class='flag-5'>FATFS</b><b class='flag-5'>文件系統(tǒng)</b><b class='flag-5'>移植</b>與運(yùn)用

    STM32+SD NAND(貼片SD卡)完成FATFS文件系統(tǒng)移植與測試

    這篇文章就手把手教大家,在STM32上完成FATFS文件系統(tǒng)移植;主控芯片采用STM32F103ZET6, 存儲(chǔ)芯片我這里采用(雷龍) CS創(chuàng)世 SD NAND 。 SD NAND 簡單來說就是
    的頭像 發(fā)表于 07-17 17:24 ?6700次閱讀
    STM32+SD NAND(貼片SD卡)完成<b class='flag-5'>FATFS</b><b class='flag-5'>文件系統(tǒng)</b><b class='flag-5'>移植</b>與測試

    FATFS文件系統(tǒng)移植----基于STM32F10x控制芯片的

    前一周做了FATFS文件系統(tǒng)移植,當(dāng)初用的是STM32庫里的評估板的SD卡驅(qū)動(dòng)。當(dāng)然,庫的驅(qū)動(dòng)是比較好的。聽說能支持到16G的SD卡。不過可惜,沒移植成功。后來用了我同學(xué)給的SD卡的驅(qū)
    發(fā)表于 08-08 09:36

    FATFS文件系統(tǒng)移植

    這是本人,整理的FATFS文件系統(tǒng)移植資料,很少的一部分,希望大家把自己搜到的比較好的資料,分享一下,本人正在學(xué)習(xí)fatfs文件系統(tǒng),希望和
    發(fā)表于 09-11 16:05

    STM32的FATFS文件系統(tǒng)移植筆記

    一、序言 經(jīng)常在網(wǎng)上、群里看到很多人問關(guān)于STM32的FATFS文件系統(tǒng)移植的問題,剛好自己最近也在調(diào)試這個(gè)程序,為了讓大家少走彎路,我把我的調(diào)試過程和方法也貢獻(xiàn)給大家。二、FATFS
    發(fā)表于 01-09 15:18

    FATFS文件系統(tǒng)移植日志

    按照原有的結(jié)構(gòu)進(jìn)行編寫即可。這樣就基本完成FATFS移植工作了,接下來就是直接使用文件系統(tǒng)提供的函數(shù)即可完成功能。需要注意的是:當(dāng)扇區(qū)改變是需要進(jìn)行格式化操作才能完成設(shè)備的掛載。不然若扇區(qū)于上次
    發(fā)表于 08-12 23:33

    FATFS文件系統(tǒng)如何移植工程

    STM32F103ZET6系統(tǒng)板、一個(gè)SPI接口的SD卡卡槽模塊、一張SD卡工程完整源碼下載地址這篇文章主要演示FATFS文件系統(tǒng)如何移植到自己的工程,并完成
    發(fā)表于 08-24 06:34

    FatFs文件系統(tǒng)的原理是什么?如何對FATFS進(jìn)行移植

    FatFs文件系統(tǒng)的原理是什么?FatFs文件系統(tǒng)移植方法是什么?如何實(shí)現(xiàn)eMMC卡中文件的讀
    發(fā)表于 11-25 07:52

    Fatfs文件系統(tǒng)移植要經(jīng)過哪幾個(gè)步驟呢

    Fatfs文件系統(tǒng)有何特點(diǎn)?Fatfs文件系統(tǒng)移植要經(jīng)過哪幾個(gè)步驟呢?
    發(fā)表于 12-01 07:33

    FATFS文件系統(tǒng)移植的相關(guān)資料推薦

    FATFS文件系統(tǒng)移植(FLASH)一、說明1、在移植文件系統(tǒng)前需先驗(yàn)證FLASH的全部扇區(qū)讀寫是否沒問題,將全部扇區(qū)讀寫一遍。2、可在
    發(fā)表于 01-11 06:57

    如何進(jìn)行FatFs文件系統(tǒng)移植

    FatFs 的底層可以寫一次命令,讀寫多個(gè)扇區(qū)。FatFs的設(shè)計(jì)的讀寫的思想就很好,小塊的數(shù)據(jù),我就經(jīng)過Buffer來存儲(chǔ),大塊的數(shù)據(jù),我就直接進(jìn)行存取,那樣速度,效率高了很多,看圖:
    發(fā)表于 04-30 18:24 ?3次下載
    如何進(jìn)行<b class='flag-5'>FatFs</b><b class='flag-5'>文件系統(tǒng)</b>的<b class='flag-5'>移植</b>

    MSP430、STM32、8051單片機(jī)fatfs 文件系統(tǒng)移植 W25Q128

    MSP430、STM32、8051單片機(jī)fatfs 文件系統(tǒng)移植 W25Q128
    發(fā)表于 11-15 16:21 ?32次下載
    MSP430、STM32、8051單片機(jī)<b class='flag-5'>fatfs</b> <b class='flag-5'>文件系統(tǒng)</b><b class='flag-5'>移植</b> W25Q128

    Fatfs文件系統(tǒng)移植

    Fatfs文件系統(tǒng)移植)一、文件系統(tǒng)介紹二、移植條件、說明1、FatFs模塊在可
    發(fā)表于 11-15 18:51 ?22次下載
    <b class='flag-5'>Fatfs</b>(<b class='flag-5'>文件系統(tǒng)</b>的<b class='flag-5'>移植</b>)

    基于STM32+CS創(chuàng)世 SD NAND(貼片SD卡)完成FATFS文件系統(tǒng)移植與測試(下篇)

    四、移植FATFS文件系統(tǒng)前面第3章,完成了SDNAND的驅(qū)動(dòng)代碼編寫,這一章節(jié)實(shí)現(xiàn)FATFS文件移植
    的頭像 發(fā)表于 03-03 13:52 ?1202次閱讀
    基于STM32+CS創(chuàng)世 SD NAND(貼片SD卡)完成<b class='flag-5'>FATFS</b><b class='flag-5'>文件系統(tǒng)</b><b class='flag-5'>移植</b>與測試(下篇)

    AN065基于GD32 MCU的FATFS文件系統(tǒng)移植

    發(fā)表于 09-11 08:30 ?0次下載
    AN065基于GD32 MCU的<b class='flag-5'>FATFS</b><b class='flag-5'>文件系統(tǒng)</b><b class='flag-5'>移植</b>