在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何移植FatFs文件系統到SD卡內

jf_pJlTbmA9 ? 來源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-09-19 09:11 ? 次閱讀

在前面章節中介紹了使用MM32F3270的SDIO外設驅動SD卡,對SD卡識別和簡單的數據讀寫驗證,不過像這樣直接操作SD卡存儲單元,在實際應用中是不現實的。SD卡一般用來存放文件,所以都需要加載文件系統到里面。

FatFs 是一個通用的文件系統(FAT/exFAT)模塊,用于在小型嵌入式系統中實現FAT文件系統。完全用標準C語言編寫,所以具有良好的硬件平臺獨立性。可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列單片機上而只需做簡單的修改。它支持FATl2、FATl6和FAT32格式,支持多個存儲媒介,具有獨立的緩沖區,可以對多個文件進行讀/寫,并特別對8位單片機和16位單片機做了優化。

本章節主要介紹移植FatFs文件系統到SD卡內。

FatFs的特點

1)Windows兼容的FAT文件系統(支持FAT12/FAT16/FAT32)與平臺無關,移植簡單;

2)代碼量少、效率高;

3)多種配置選項;

4)支持多卷(物理驅動器或分區,最多10個卷);

5)多個ANSI/OEM代碼頁包括DBCS;

6)支持長文件名、 ANSI/OEM 或Unicode;

7)支持RTOS

8)支持多種扇區大小;

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

FatFs源碼獲取

FatFs文件系統的源碼可以從FatFs官網下載:

http://elm-chan.org/fsw/ff/00index_e.html

此地址不僅僅包含資料包下載,還包括文件系統一些知識,包括函數說明,函數調用實例等。

wKgZomUD8cuAFTkdAABYxqJX0kk900.png

官網有對FatFs做詳細的介紹,感興趣可以多了解一些。所有版本的FatFs源碼的移植步驟都是類似的,我們選擇選擇其中一個版本下載即可。

FatFs文件結構

解壓之后可看到里面有 doc 和src 這兩個文件。

其中doc文件夾里面是一些使用幫助文檔,src是FatFs文件系統的源碼。

FatFs的源代碼主要包含幾個文件:

diskio.c、 diskio.h、 ff.c、 ff.h、 integer.h文件。

其中diskio.c 這個文件是文件系統底層和SD驅動的中間接口的實現代碼,移植的時候需要改寫在diskio.h中聲明的那幾個函數,代碼在ff.c中被調用;diskio.h定義了FatFs用到的宏;ff.c是一般FatFs的代碼文件;ff.h是一般FatFs包含的頭文件;integer.h是內部基本類型的定義。

option文件夾下是一些可選的外部c文件,包含了多語言支持需要用到的文件和轉換函數。

00readme.txt 說明了當前目錄下 diskio.c 、 diskio.h、 ff.c、 ff.h、 integer.h 的功能。

FatFs移植步驟

在工程目錄下新建FatFs文件夾,并將src文件夾下的文件復制一份至該文件夾。

wKgZomUD8c2ADNhuAADOUabrU9k931.png
wKgaomUD8dGABXo4AAEGZ-eTmPc250.png

使用KEIL打開工程文件并添加FatFs組件,并將src文件夾下的ff.c、 diskio.c 和 cc936.c 三個文件加入FatFs組件中。

wKgZomUD8dKATkNKAAAgLjHjCCI835.png

加入cc936.c文件可以支持簡體中文,同時需要把 ffconf.h 中的 _CODE_PAGE 的宏改成 936。

wKgaomUD8dSAEbvbAAAboBlrwus858.png

接著添加FatFs路徑到工程選項。

wKgZomUD8dWAX8uKAABv34JCOG0549.png

此時進行編譯,會發現提示錯誤。

編寫FatFs接口函數

來看diskio.c文件,注釋前面的幾個頭文件,這里要加入自己的頭文件。下面的三個宏定義ATA、MMC、USB也可以改成想要的名稱,可以改成SD并定義為0。

wKgaomUD8deAWFxTAACDw6tcSZI972.png

然后將函數disk_status、disk_initialize、disk_read、disk_write里面執行的代碼注釋或者刪除,這里需要添加自己的代碼。由于上面改了宏定義,這里switch-case也要做一些修改。

wKgaomUD8diAIiwgAABUq_CQGUU473.png

更改如下:

wKgZomUD8dqAZh10AAA0HxfrY5s102.png

對disk_initialize、disk_read、disk_write幾個函數也這樣更改。

再次編譯,發現提示一個關于get_fattime的錯誤,get_fattime用來獲取當前時間,如果不需要,在ffconf.h中的宏定義#define _FS_NORTC改為1關閉,如果需要這個功能,需要在diskio.c里面,實現get_fattime函數,加入如下代碼即可。

wKgaomUD8duAcqA-AAAb-EtjbKw659.png

然后進行編譯,這時錯誤就沒有了。

至此我們已經完成FatFs文件管理系統的移植,不過功能還沒有實現,需要在disk_status、disk_initialize、disk_read、disk_writ、disk_ioctl函數中加入執行代碼:

設備狀態獲取

DSTATUS disk_status (
    BYTE pdrv       /* Physical drive number to identify the drive */
)
{
    DSTATUS stat;

    stat = disk.drv[pdrv]->disk_status(disk.lun[pdrv]);
    return stat;
}

設備初始化

DSTATUS disk_initialize (
    BYTE pdrv               /* Physical drive nmuber to identify the drive */
)
{
    DSTATUS stat = RES_OK;

    if(disk.is_initialized[pdrv] == 0) {
        disk.is_initialized[pdrv] = 1;
        stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);
    }
    return stat;
}

讀取扇區

DRESULT disk_read (
    BYTE pdrv,      /* Physical drive nmuber to identify the drive */
    BYTE* buff,     /* Data buffer to store read data */
    DWORD sector,           /* Sector address in LBA */
    UINT count      /* Number of sectors to read */
)
{
    DRESULT res;

    res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count);
    return res;
}

扇區寫入

DRESULT disk_write (
    BYTE pdrv,      /* Physical drive nmuber to identify the drive */
    const BYTE* buff,   /* Data to be written */
    DWORD sector,       /* Sector address in LBA */
    UINT count          /* Number of sectors to write */
)
{
    DRESULT res;

    res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count);
    return res;
}

其他

DRESULT disk_ioctl (
    BYTE pdrv,      /* Physical drive nmuber (0..) */
    BYTE cmd,       /* Control code */
    void* buff      /* Buffer to send/receive control data */
)
{
    DRESULT res;

    res = disk.drv[pdrv]->disk_ioctl(disk.lun[pdrv], cmd, buff);
    return res;
}

審核編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動器
    +關注

    關注

    54

    文章

    8469

    瀏覽量

    148441
  • 數據
    +關注

    關注

    8

    文章

    7232

    瀏覽量

    90686
  • SD卡
    +關注

    關注

    2

    文章

    573

    瀏覽量

    64794
  • 文件系統
    +關注

    關注

    0

    文章

    293

    瀏覽量

    20206
收藏 人收藏

    評論

    相關推薦

    基于STM32完成FATFS文件系統移植與運用

    這篇文章主要演示FATFS文件系統如何移植自己的工程,并完成文件的讀寫。 因為SD
    的頭像 發表于 03-08 09:17 ?6746次閱讀
    基于STM32完成<b class='flag-5'>FATFS</b><b class='flag-5'>文件系統</b><b class='flag-5'>移植</b>與運用

    FatFS文件系統在STM32F4上的移植和應用

    在實現如U盤文件讀寫,SD文件讀寫等工作時,我們往往需要一個文件系統來支持我們的工作。特別在一些MCU應用中,
    的頭像 發表于 12-13 17:26 ?2994次閱讀
    <b class='flag-5'>FatFS</b><b class='flag-5'>文件系統</b>在STM32F4上的<b class='flag-5'>移植</b>和應用

    STM32CubeMx入門教程(10):Fatfs文件系統的應用

    導語"fatfs是一個小型的文件系統,在小型的嵌入式系統中使用非常的廣泛,STM32CubeMx自帶該文件系統,我們通過簡單的配置就能夠使用,將前面的
    發表于 07-12 11:39 ?6138次閱讀
    STM32CubeMx入門教程(10):<b class='flag-5'>Fatfs</b><b class='flag-5'>文件系統</b>的應用

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

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

    轉:基于KL26的SDFatfs文件系統移植

    本文主要講解如何一直FatFs文件系統KL26上,實現SD文件建立,讀寫等功能。[size
    發表于 06-04 14:41

    FATFS文件系統如何移植工程

    STM32F103ZET6系統板、一個SPI接口的SD槽模塊、一張SD工程完整源碼下載地址
    發表于 08-24 06:34

    介紹移植fatfs文件系統步驟

    前言嵌入式系統中我們常常對flash、SD、U盤等進行操作,但我們操作一般是直接操作物理地址,使用起來相對來說比較繁瑣,也不能將我們自己寫的數據導出到我們的電腦中,這時大名鼎鼎的文件系統
    發表于 11-23 07:19

    FatFs文件系統的原理是什么?如何對FATFS進行移植

    FatFs文件系統的原理是什么?FatFs文件系統移植方法是什么?如何實現eMMC
    發表于 11-25 07:52

    靈動微課堂 (第194講) | SDFatFs文件管理系統

    單片機做了優化。本章節主要介紹移植FatFs文件系統SD
    發表于 01-10 11:31

    如何使用STM32CubeMX移植FATFS文件系統SD

    本篇詳細的記錄了如何使用STM32CubeMX移植FATFS文件系統SD上。1. 準備工作硬
    發表于 03-01 07:45

    基于SDFATFS文件系統的研究與應用_崔鵬偉

    基于SDFATFS文件系統的研究與應用_崔鵬偉。
    發表于 04-14 16:46 ?40次下載

    STM32單片機移植SDFATFS文件系統

    最近看了32的sdFATFS文件系統,現在就自己的理解總結一下。一、SD模塊
    發表于 11-15 16:51 ?6次下載
    STM32單片機<b class='flag-5'>移植</b><b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>FATFS</b><b class='flag-5'>文件系統</b>

    Fatfs文件系統移植

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

    文件系統FatFs文件系統在嵌入式芯片LPC18XX上的移植

    文件系統FatFs文件系統在嵌入式芯片LPC18XX上的移植
    發表于 12-04 10:51 ?12次下載
    【<b class='flag-5'>文件系統</b>】<b class='flag-5'>FatFs</b><b class='flag-5'>文件系統</b>在嵌入式芯片LPC18XX上的<b class='flag-5'>移植</b>

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

    四、移植FATFS文件系統前面第3章,完成了SDNAND的驅動代碼編寫,這一章節實現FATFS文件移植
    的頭像 發表于 03-03 13:52 ?1631次閱讀
    基于STM32+CS創世 <b class='flag-5'>SD</b> NAND(貼片<b class='flag-5'>SD</b><b class='flag-5'>卡</b>)完成<b class='flag-5'>FATFS</b><b class='flag-5'>文件系統</b><b class='flag-5'>移植</b>與測試(下篇)
    主站蜘蛛池模板: 成年女人色费视频免费 | 能可以直接看的av网址 | 午夜视频精品 | 午夜精品久久久久 | 青草青草视频2免费观看 | 激情性爽三级成人 | 色婷婷影院 | 有码日韩 | 婷婷色九月综合激情丁香 | 男人的天堂在线精品视频 | 欧美高清免费一级在线 | 色噜噜狠狠色综合欧洲 | 在线观看免费精品国产 | 五月婷婷六月丁香在线 | 免费鲁丝片一级观看 | 91久久澡人人爽人人添 | 校园春色亚洲欧美 | 磁力bt种子搜索在线 | 夜夜狠狠| 久久伊人成人 | 国产美女精品久久久久中文 | 色欧美亚洲 | 看黄在线 | 双性强迫开宫灌满h | 五月婷婷之综合激情 | 亚洲第一狼人社区 | 午夜剧场官网 | 中国三级视频 | 亚洲精品中文字幕乱码三区一二 | 久久精品网站免费观看 | 又污又黄的网站 | 美女免费视频黄 | 一级特色黄色片 | 久青草久青草高清在线播放 | 新天堂在线 | 在线高清一级欧美精品 | 国产精品网址你懂的 | 在线毛片网 | 人人草在线 | 人人干网站 | 狠狠色狠狠色综合日日32 |