運(yùn)動(dòng)控制器29:FATFS文件系統(tǒng)應(yīng)用文檔2

本來(lái)FATFS系統(tǒng)有大量的資料可以參考,移植到STM32中有成熟的源碼,但是還是想研究一下官網(wǎng)的文檔介紹惜傲。
官網(wǎng)的鏈接如下FATFS APPLICATION NOTE

Performance Effective File Access

先理解一個(gè)概念volume,一個(gè)卷,也就是我說(shuō)的一個(gè)磁盤(pán)拇囊,一個(gè)SD卡可以看做是一個(gè)磁盤(pán)。因?yàn)榇疟P(pán)的容量有限靶橱,我們?cè)谶M(jìn)行讀寫(xiě)的時(shí)候寥袭,需要隨時(shí)查看讀寫(xiě)的進(jìn)度。
另外抓韩,我們以MT29F4G08B為例纠永,看看存儲(chǔ)器的結(jié)構(gòu)如下:

FATFS7.png

  • 一頁(yè)紙上有四個(gè)內(nèi)容塊,一個(gè)內(nèi)容塊就是基本的閱讀單元谒拴,為512字節(jié)尝江,就是一個(gè)Sector。
  • 一頁(yè)紙就是一個(gè)PAGE=4*512字節(jié)英上。
  • 64頁(yè)訂在一起炭序,就是一本書(shū),為一個(gè)BLOCK苍日,也就是說(shuō)惭聂,一個(gè)BLOCK有644512字節(jié)。
  • 一個(gè)圖書(shū)館一共有4096本書(shū)相恃,也就是4096個(gè)BLOCK辜纲,這個(gè)圖書(shū)館的名字叫做volume。
  • 但是注意拦耐,每一頁(yè)還有64字節(jié)的位置耕腾,相當(dāng)于是圖書(shū)館的導(dǎo)覽圖標(biāo)存儲(chǔ)位置。
    在操作的時(shí)候杀糯,如果Sector沒(méi)有對(duì)齊扫俺,應(yīng)該怎么樣處理呢?如下圖:
    FATFS8.png

    我們讀取的時(shí)候固翰,I/O buffer一次性讀取一個(gè)sector狼纬,一個(gè)sector的大小可以通過(guò)FF_FS_TINY進(jìn)行設(shè)置。
    從上面的圖我們可以看到骂际,如果沒(méi)有進(jìn)行sector對(duì)齊疗琉,則我們將數(shù)據(jù)截成多塊進(jìn)行傳輸。

Considerations on Flash Memory Media

大容量存儲(chǔ)器的讀寫(xiě)我們必須考慮傳輸效率歉铝,如下圖没炒,單個(gè)SECTOR的效率明顯要低于多sector傳輸效率。


FATFS9.png

所以我們要盡量用多SECTOR來(lái)進(jìn)行讀寫(xiě),如果操作一個(gè)4G的內(nèi)存卡送火,用單SECTOR和多個(gè)sector可以明顯的看出傳輸速率的差異拳话,如下圖:

FATFS10.png
強(qiáng)制進(jìn)行擦除

當(dāng)我們使用f_unlink將磁盤(pán)進(jìn)行彈出時(shí),F(xiàn)AT則處于FREE狀態(tài)种吸,但是可能數(shù)據(jù)還沒(méi)有傳輸完成弃衍,就像我們U盤(pán)播放電影時(shí)候,突然掉線(xiàn)彈出后坚俗,數(shù)據(jù)需要全部進(jìn)行擦除镜盯,我們可以使用FF_USE_TRIM來(lái)使能Trim 功能,此時(shí)猖败,CTRL_TRIM 功能將在disk_ioctl 中進(jìn)行執(zhí)行速缆。

Critical Section

如果有特殊情況打斷section的傳輸,比如udden blackout, incorrect media removal and unrecoverable disk error恩闻,此時(shí)數(shù)據(jù)傳輸失敗艺糜,比如下面的情況,我們打開(kāi)一個(gè)文件以后幢尚,當(dāng)有重命名的請(qǐng)求的時(shí)候破停,將破壞數(shù)據(jù),我們可以多加入一些同步的命令尉剩,防止數(shù)據(jù)破壞的概率真慢。


FATFS11.png

Extended Use of FatFs API

下面示范一個(gè)清空一個(gè)目錄的操作,代碼如下:

/*------------------------------------------------------------/
/ Remove all contents of a directory
/ This function works regardless of FF_FS_RPATH.
/------------------------------------------------------------*/
FILINFO fno;
//入口參數(shù):清空的具體路徑
FRESULT empty_directory (
    char* path 
{
    UINT i, j;
    FRESULT fr;
    DIR dir;
    //先打開(kāi)此文件
    fr = f_opendir(&dir, path);
    if (fr == FR_OK) {
        for (i = 0; path[i]; i++) ;
        path[i++] = '/';
        for (;;) {
            fr = f_readdir(&dir, &fno);
            if (fr != FR_OK || !fno.fname[0]) break;
            if (_FS_RPATH && fno.fname[0] == '.') continue;
            j = 0;
            do
                path[i+j] = fno.fname[j];
            while (fno.fname[j++]);
            if (fno.fattrib & AM_DIR) {
                fr = empty_directory(path);
                if (fr != FR_OK) break;
            }
            fr = f_unlink(path);
            if (fr != FR_OK) break;
        }
        path[--i] = '\0';
        closedir(&dir);
    }

    return fr;
}

int main (void)
{
    FRESULT fr;
    FATFS fs;
    char buff[256];    /* Working buffer */



    f_mount(&fs, "", 0);

    strcpy(buff, "/");  /* Directory to be emptied */
    fr = empty_directory(buff);

    if (fr) {
        printf("Function failed. (%u)\n", fr);
        return fr;
    } else {
        printf("All contents in the %s are successfully removed.\n", buff);
        return 0;
    }
}

具體的函數(shù)功能參考下一篇FATFS的常用接口函數(shù)理茎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末黑界,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子皂林,更是在濱河造成了極大的恐慌朗鸠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件式撼,死亡現(xiàn)場(chǎng)離奇詭異童社,居然都是意外死亡求厕,警方通過(guò)查閱死者的電腦和手機(jī)著隆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呀癣,“玉大人美浦,你說(shuō)我怎么就攤上這事∠罾福” “怎么了浦辨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)沼沈。 經(jīng)常有香客問(wèn)我流酬,道長(zhǎng)币厕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任旦装,我火速辦了婚禮,結(jié)果婚禮上摊滔,老公的妹妹穿的比我還像新娘阴绢。我一直安慰自己,他們只是感情好呻袭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布腺兴。 她就那樣靜靜地躺著,像睡著了一般券腔。 火紅的嫁衣襯著肌膚如雪纷纫。 梳的紋絲不亂的頭發(fā)上陪腌,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天辱魁,我揣著相機(jī)與錄音染簇,去河邊找鬼。 笑死强岸,一個(gè)胖子當(dāng)著我的面吹牛锻弓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝌箍,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼青灼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了妓盲?” 一聲冷哼從身側(cè)響起杂拨,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悯衬,沒(méi)想到半個(gè)月后弹沽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年策橘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炸渡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丽已,死狀恐怖偶摔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情促脉,我是刑警寧澤辰斋,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站瘸味,受9級(jí)特大地震影響宫仗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旁仿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一藕夫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枯冈,春花似錦毅贮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至炫加,卻和暖如春瑰煎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俗孝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工酒甸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赋铝。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓插勤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親革骨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子农尖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容