關(guān) 閉

新聞中心

EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 一種支持多種閃存的自適應(yīng)驅(qū)動(dòng)設(shè)計(jì)

一種支持多種閃存的自適應(yīng)驅(qū)動(dòng)設(shè)計(jì)

作者: 時(shí)間:2012-05-23 來源:網(wǎng)絡(luò) 收藏

Flash ID讀取流程如圖6所示。

f.JPG

2.3 自適應(yīng)驅(qū)動(dòng)的結(jié)構(gòu)設(shè)計(jì)

指針數(shù)組*(spansion_part[])的每個(gè)成員都是一種Flash的接口函數(shù)指針,系統(tǒng)每添加一種Flash的驅(qū)動(dòng)接口,需要在spansion_part中添加一個(gè)成員變量,數(shù)據(jù)有多少個(gè)成員變量,就代表系統(tǒng)支持多少種Flash。本系統(tǒng)現(xiàn)已支持6種Flash,*(spansion_part[])數(shù)組有6個(gè)成員變量和1個(gè)NULL(結(jié)束標(biāo)志)。

k.JPG

fsi_nor_device結(jié)構(gòu)體定義如圖7所示。flash_name[32]用來存儲(chǔ)當(dāng)前Flash的名字;id[4]存儲(chǔ)Flash唯一的ID號(hào),在Flash的識(shí)別階段,系統(tǒng)通過比較ID號(hào)來識(shí)別當(dāng)前系統(tǒng)所采用的Flash,從而選擇對(duì)應(yīng)的接口函數(shù);geometry存儲(chǔ)的是Flash的一些物理參數(shù)信息,其成員變量family type標(biāo)記當(dāng)前Flash屬于哪一個(gè)系列,device_size存儲(chǔ)Flash容量大小,X_iface存儲(chǔ)Flash的位寬(16位/8位),write_buf_size存儲(chǔ)Flash的緩沖區(qū)大小,blk_regions記錄的是Flash的硬件結(jié)構(gòu)方面的信息,給文件系統(tǒng)提供參數(shù)。ops是一個(gè)指向結(jié)構(gòu)體的指針,ops所指向的結(jié)構(gòu)體各個(gè)成員變量都是當(dāng)前Flash的操作函數(shù),Ops->read()函數(shù)實(shí)現(xiàn)Flash的讀操作,ops->write()函數(shù)實(shí)現(xiàn)對(duì)Flash的寫操作。

本系統(tǒng)采用結(jié)構(gòu)化的編程思想,在自適應(yīng)層中構(gòu)造了一組數(shù)據(jù)結(jié)構(gòu),為適配層提供統(tǒng)一的接口函數(shù),使各種Flash驅(qū)動(dòng)接口相互獨(dú)立。每個(gè)Flash的接口函數(shù)都是*(spansion_part[])的一個(gè)成員變量,只需要在*(spansion_part[])添加一個(gè)成員變量即可多支持一款Flash存儲(chǔ)器。

l.JPG

自適應(yīng)驅(qū)動(dòng)的結(jié)構(gòu)如圖8所示。如果自適應(yīng)層讀取的ID等于spansion_part[O]->geometry.id,則確認(rèn) 當(dāng) 前 Flash 為ty5701111183kc 04,spansion_parts[0]->ops->config()為當(dāng)前Flash的配置函數(shù)ty5701111183kc04_configure;依次類推spansion_parts[0]->ops->read()為當(dāng)前Flash的寫函數(shù),spansion_part[0]->geometry.device_size是Flash的容量大小。

2.4 Flash自適應(yīng)識(shí)別過程

flash_nor_probe()函數(shù)遍歷數(shù)組指針*(spansion_parts[])尋找符合當(dāng)前Flash的驅(qū)動(dòng)函數(shù)。如圖9所示,自適應(yīng)識(shí)別過程如下:

m.JPG



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉