基於stm32移植FATFS檔案系統

2021-10-11 18:32:41 字數 2039 閱讀 7371

2.   ff14a/source 下就是需要的檔案。

ff.c         fatfs模組。

ffconf.h fatfs模組的配置檔案。

ff.h fatfs和應用程式模組的通用包含檔案。

diskio.h fatfs 和disk i / o模組的公用包含檔案。

diskio.c 將現有disk i / o模組連線到fatfs的粘合功能示例。

ffunicode.c 可選的unicode實用程式功能。(中文顯示需要)

ffsystem.c 可選的o / s相關功能的示例。

fatfs 模組提供的是 ff.c 和 ff.h。除非有必要,使用者一般不用修改,使用時將標頭檔案直接包含進去即可。

ffconf.h   fatfs模組配置檔案,比如ff_use_fastseek設定為1時,可以使用快速查詢功能。

需要我們編寫移植**的是 fatfs 模組提供的底層介面,它包括儲存媒介讀/寫介面(diski/o)和供給檔案建立修改時間的實時時鐘。即diskio.c 需要使用者自己編寫。 

和平台無關的檔案:

diskio.h

ff.c 

ff.h

ffconf.h

ffsystem.c

ffunicode.c

和平台有關的檔案

diskio.c

fatfs 模組在移植的時候,我們一般只需要修改 2 個檔案,即 ffconf.h 和 diskio.c。

ffconf.h 的配置,

1. 參看別的專案

2. 官網中,使用者呼叫不同應用函式時,引數設定有具體說明 

3.  看fatfs原始碼,根據需要設定

幾個重要的配置選項:

_volumes。用於設定 fatfs 支援的邏輯裝置數目,我們設定為 2,即支援 2 個裝置。

_max_ss。扇區緩衝的最大值,一般設定為 512。

_use_lfn。該選項用於設定是否支援長檔名(還需要_code_page 支援),取值範圍為 0~3。 0,表示不支援長檔名, 1~3 是支援長檔名,但是儲存地方不一樣,我們選擇使用 3,通過 ff_memalloc 函式來動態分配長檔名的儲存區域。

/   0: disable lfn. ff_max_lfn has no effect.

/   1: enable lfn with static  working buffer on the bss. always not thread-safe.

/   2: enable lfn with dynamic working buffer on the stack.

/   3: enable lfn with dynamic working buffer on the heap.

_code_page。這個用於設定語言型別,包括很多選項(見 fatfs 官網說明),我們這裡設定為 936,即簡體中文。

936 - simplified chinese (dbcs)

此選項指定要在目標系統上使用的oem**頁。 錯誤的**頁設定可能導致檔案開啟失敗。

開啟diskio.c 檔案,需要編寫這幾個介面函式

dstatus disk_initialize (byte pdrv);

dstatus disk_status (byte pdrv);

dresult disk_read (byte pdrv, byte* buff, lba_t sector, uint count);

dresult disk_write (byte pdrv, const byte* buff, lba_t sector, uint count);

dresult disk_ioctl (byte pdrv, byte cmd, void* buff);

dword get_fattime (void)

//動態分配記憶體

void *ff_memalloc (uint size)            

//釋放記憶體

void ff_memfree (void* mf)         

STM32中檔案作業系統FATFS的移植

這裡主要介紹一下 stm32中檔案作業系統fatfs的移植。1.版本 fatfs0.11a 3.將壓縮後將檔案放入user目錄 工程模板選擇spiflash例程模板 1.在mdk工程介面中新建fatfs目錄,新增如下檔案 2.魔術棒中 設定標頭檔案包含 fatfs src 目錄 3.在ffconf....

基於STM32移植LWIP的資料準備

windows作業系統 unix類作業系統都有自己的一套方法來實現tcp ip通訊協議,它們都提供非常完整的tcp ip協議。對於一般的嵌入式裝置,受制於硬體條件沒辦法支援使用在window或unix類作業系統的執行的tcp ip協議棧,一般只能使用簡化版本的tcp ip協議棧,目前開源的適合嵌入式...

stm32移植ucosII成功

osstarthang b osstarthang should never get here 現在做開發真的離不開internet啊 不然我也不可能2.5小時內搞定ucosii的移植。我的硬體版本是 stm32f103c8t6,ucos版本是ucosiiv2.86 另外給大家推薦一本學習ucosi...