www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]對于固態(tài)存儲器,其存儲容量可以很大,往往需要一款文件系統(tǒng)對存儲器用戶數(shù)據(jù)進行組織文件的管理。它對文件存儲器空間進行組織和分配,負責文件的存儲并對存入的文件進行保護和檢索。在嵌入式系統(tǒng)中,往往需要采用wi

對于固態(tài)存儲器,其存儲容量可以很大,往往需要一款文件系統(tǒng)對存儲器用戶數(shù)據(jù)進行組織文件的管理。它對文件存儲器空間進行組織和分配,負責文件的存儲并對存入的文件進行保護和檢索。在嵌入式系統(tǒng)中,往往需要采用windows兼容的文件系統(tǒng),像相機的照片、視頻監(jiān)控、語音產(chǎn)品等,很多都需要從windows計算機上提取資源或在windows計算機上進一步處理。Fatfs由于其開源免費,支持fat32,受到了廣泛的應用,筆者此處就s3c2416移植Fatfs,對sd卡進行讀寫訪問作一個簡單的介紹。

1. Fatfs概述

Fatfs是由日本工程師ChaN所編寫的fat文件系統(tǒng)模塊,從06年發(fā)布第一個Fatfs版本開始,作者就從未停止維護和更新。Fatfs的編寫遵循ANSI C,并且完全與磁盤I/O層分開。它不依賴于硬件架構,代碼和工作區(qū)占用空間小,使之可以嵌入到各個低成本的微控制器中,如AVR、8051、PIC、ARM、Z80、68K等。

2. 代碼準備

Fatfs源碼,請讀者自行從Fatfs官網(wǎng)http://elm-chan.org/fsw/ff/00index_e.html下載最新的源碼。

s3c2416啟動代碼工程,啟動代碼是s3c2416/50/51這系列arm9芯片在運行用戶c代碼main函數(shù)之前必須先運行的代碼,啟動代碼支持sd、Nand啟動,為用戶設置系統(tǒng)時鐘,初始化內(nèi)存,自動識別啟動設備并搬移代碼到RAM,MMU映射,中斷管理等,用戶只需專注于用c開發(fā)其它功能函數(shù)即可。關于啟動代碼以及啟動代碼的實現(xiàn)過程,筆者前面章節(jié)有非常詳細的介紹。此處以GCC下移植Fatfs為講解,下載”GCC啟動代碼工程應用實例”中的啟動代碼源碼即可。如果在MDK下開發(fā),下載”MDK啟動代碼工程應用實例”中的啟動代碼源碼。

用戶代碼,用c開發(fā)的所有功能代碼,其中,用戶代碼入口為main()函數(shù),在這里需要實現(xiàn)sd卡驅動模塊等。

3. 工程搭建

在linux操作系統(tǒng)下任一路徑下新建一個Fatfs_GCC的工程目錄,該目錄下新建Fatfs目錄,下載Fatfs最新源碼并解壓,把src目錄內(nèi)容全部拷貝到Fatfs目錄下。

把啟用代碼目錄start_code拷貝到Fatfs_GCC目錄下,這部分代碼無需任何的修改。并保留其中的Makefile這些文件,按照Makefile的模板添加各個目錄的Makefile。GCC啟動代碼下的工程管理Makefile提取自uboot,可以方便地增加源代碼以及代碼目錄。

在Fatfs_GCC目錄下新建apps目錄,用來保存應用相關的源碼以及各個模塊驅動。

4. Fatfs移植

Fatfs模塊完全獨立于磁盤I/O層,因此底層磁盤I/O訪問并不屬于Fatfs的模塊部分,用戶必須自己實現(xiàn)這部分用來訪問存儲設備。通常在diskio.c中實現(xiàn)這六個函數(shù)disk_initialize()、disk_status()、disk_read()、disk_wirte()、disk_ioctl()、get_fattime()即可。如果使能了OS相關的特性,則還需額外實現(xiàn)進程/內(nèi)存函數(shù)。sd卡底層驅動實現(xiàn)在前面的章節(jié)有詳細的介紹,此處直接在Fatfs移植接口中調(diào)用sd驅動模塊中的相關函數(shù)。

4.1. disk_initialize函數(shù)

初始化存儲設備,若設備初始化成功,應清除STA_NOINIT這個標志返回。若初始化不成功,應置位STA_NOINIT標志再返回。如果在初始化時,未檢測到卡,可設置STA_NODISK標志表明無卡,檢測到寫保護,可設置STA_PROTECT標志表明寫保護。

static DSTATUS State = STA_NOINIT;

DSTATUS disk_initialize (

BYTE pdrv /* Physical drive nmuber (0..) */

)

{

if (pdrv != 0) {

return STA_NOINIT; // 僅支持driver0

}

if (!Hsmmc_Init()) { // 調(diào)用sd卡初始化

State &= ~STA_NOINIT; // 初始化成功

} else {

State |= STA_NOINIT;

}

return State;

}

4.2. disk_status函數(shù)

獲取設備的狀態(tài),返回STA_NOINIT、STA_NODISK、STA_PROTECT這三個標志的組合。磁盤設備的狀態(tài)隨時都可能發(fā)生變化,例如初始化后的sd卡在某一時刻被拔出,此時無卡,F(xiàn)atfs通過disk_status函數(shù)重新獲知STA_NODISK無卡這一標志。

DSTATUS disk_status (

BYTE pdrv /* Physical drive nmuber (0..) */

)

{

if (pdrv != 0) {

return STA_NOINIT; // 僅支持driver0

}

return State;

}

4.3. disk_read函數(shù)

讀取扇區(qū),F(xiàn)atfs通過該函數(shù)從磁盤某一扇區(qū)地址開始獲取一塊或多塊扇區(qū)的數(shù)據(jù),F(xiàn)atfs最多支持一次性讀寫128個扇區(qū)的數(shù)據(jù),通常磁盤都支持多塊讀、多塊寫,并且這樣的讀寫性能遠遠好于分單塊的讀寫。

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) */

)

{

if (pdrv || !count) {

return RES_PARERR;

}

if (State & STA_NOINIT) {

return RES_NOTRDY;

}

if (!Hsmmc_ReadBlock(buff, sector,count)) {

return RES_OK; // 讀取成功

} else {

return RES_ERROR; // 讀取出錯

}

}

4.4. disk_wirte函數(shù)

寫扇區(qū),F(xiàn)atfs通過該函數(shù)從磁盤某一扇區(qū)地址開始寫入一塊或多塊扇區(qū)的數(shù)據(jù)。如果只讀(_FS_READONLY == 1),可以不實現(xiàn)該函數(shù)。

#if _USE_WRITE

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) */

)

{

if (pdrv || !count) {

return RES_PARERR;

}

if (State & STA_NOINIT) {

return RES_NOTRDY;

}

if (State & STA_PROTECT) {

return RES_WRPRT;

}

if (!Hsmmc_WriteBlock((unsignedchar *)buff, sector, count)) {

return RES_OK; // 寫成功

} else {

return RES_ERROR; // 寫錯誤

}

}

#endif

4.5. disk_ioctl函數(shù)

控制設備相關的功能,F(xiàn)atfs使用5個設備獨立的命令控制/獲取設備特定的功能。

CTRL_SYNC:寫同步,在關閉文件等操作時,如果磁盤I/O口層使用了寫緩存,那么通知磁盤I/O口層把寫緩存中的數(shù)據(jù)寫回到磁盤中。對于沒有寫緩存,即每次disk_write均寫入到磁盤中,無需處理該命令,只需返回RES_OK即可。在可寫時_FS_READONLY == 0,該命令才會被使用。

GET_SECTOR_COUNT:獲取磁盤的總扇區(qū)數(shù),在用f_mkfs()格式化文件系統(tǒng),f_fdisk對磁盤分區(qū)時均會使用這個命令來獲取磁盤的總扇區(qū)數(shù),對于sd卡,通過CSD獲取卡容量信息。在支持格式化文件系統(tǒng)或多分區(qū)的情況下(_USE_MKFS == 1 或 _MULTI_PARTITION== 1),該命令才會被使用。

GET_SECTOR_SIZE:獲取磁盤一個扇區(qū)的字節(jié)數(shù),有效值為512、1024、2048或4096。對于大部分的系統(tǒng),所有內(nèi)存卡,硬盤,通常返回扇區(qū)大小為512字節(jié),但對于flash,一頁可能為512字節(jié),也可能為1k字節(jié),2k字節(jié),4k字節(jié),需要根據(jù)具體的flash頁大小進行配置。

GET_BLOCK_SIZE:以扇區(qū)為單位獲取擦除塊的大小。在用f_mkfs()格式化文件系統(tǒng)時,用來使數(shù)據(jù)區(qū)對齊到擦除塊。例如,第一個擦除塊往往用來保存系統(tǒng)信息等,真正的數(shù)據(jù)在第二個擦除塊位置開始存放。該命令并不重要,可直接返回1表明1個扇區(qū)對齊。此處與原作者移植例程保持一致,對sd2.0版本卡,返回AU(可分配單元)的大小,sd1.0版本卡,返回擦除塊大小。在_USE_MKFS == 1時,該命令才被使用。

CTRL_ERASE_SECTOR:擦除某一段扇區(qū),對于flash,都是要先擦除才能正確寫入,對于nor、nand flash,某一個文件不再使用時(例如刪除或被覆蓋),先發(fā)出這個命令強制設備擦除這個文件所在的空間區(qū)域,之后在disk_write無需再對flash進行擦除操作,因為每次文件不再使用時,都已經(jīng)先擦除了這部分。對于sd卡等,這個命令沒有任何用處,因為sd卡接收到塊寫命令均是先擦除再寫。如果再開啟這個命令_USE_ERASE == 1,相當重復擦除。對于sd卡,建議設置_USE_ERASE == 0,不使用這個命令。

#if _USE_IOCTL

DRESULT disk_ioctl (

BYTE pdrv, /* Physical drive nmuber (0..) */

BYTE cmd, /* Control code */

void *buff /* Buffer to send/receive control data */

)

{

unsigned char CSD[16];

unsigned charSdState[64];

unsigned int c_size,c_size_multi, read_bl_len, sector_size, au_size;

DRESULT Result =RES_ERROR;

if (pd

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉