您好,登錄后才能下訂單哦!
Nandflash:
K9F2G08 : K9F表示是三星的Nandflash系列的,2G表示大小為2Gbit(2G*8bit = 256MB),08表示有8位
數(shù)據(jù)線。
一次讀寫的最小單元是page(頁),2kB+64bit 一次操作要操作2KB或者是2KB的整數(shù)倍
K9F2G08 頁往上的單位是塊,一塊block等于64page 一頁等于2KB,K9F2G08一共有2048個塊。
所以它的大小是 2048*64*2KB = 256MB 一塊等于64*2KB = 128KB。
block 是擦除nand的最小單位,page是讀寫的最小單位
nand的地址是精確到以字節(jié)為單位的,但是nand本身的單元一次讀寫是以頁為單位的,所以在實(shí)際用時
往往我們編寫程序時地址只能精確到頁的地址。
nand芯片內(nèi)部有存儲顆粒,有接口電路,接口電路是將來和外接通信用,210SOC中內(nèi)部外設(shè)了一個nand控制器接口,這個控制器接口就可以和nand中接口電路進(jìn)行連接,實(shí)現(xiàn)時序上的操作。
不同型號的nand,頁的大小,block塊的大小,nand的總大小是不一樣的。、
在K9F2G08這個nand芯片中,頁是2KB,這2KB是帶內(nèi)數(shù)據(jù),就是將來真正存儲東西的空間,每一頁中還有64
字節(jié)的帶外數(shù)據(jù),這64字節(jié)中放的是ECC的校驗(yàn)(錯誤校驗(yàn)碼)和壞塊標(biāo)記,這64B在算nand的大小時我們是
不加上的。因?yàn)閚and在讀寫的過程中,很有可能會出現(xiàn)位反轉(zhuǎn)的錯誤,所以有了ECC,并且nand在使用的過程中,很有可能也會出現(xiàn)壞塊的。所以也有壞塊標(biāo)記,當(dāng)有壞塊出現(xiàn)的時候,就會在這一個地方標(biāo)記壞塊,將來在訪問這個地方的時候,就訪問不了了,就會直接跳過這個區(qū)域。
nand的操作流程,要參考不同nand的數(shù)據(jù)手冊,看命令碼,操作時序,寫數(shù)據(jù),讀數(shù)據(jù)等。根據(jù)這些去進(jìn)行軟件上編寫操作。
壞塊的檢查:
先擦除nand中一塊,因?yàn)椴脸罄锩娴臇|西是FFH或者FFFFH(FFH是說明你的nand是8為數(shù)據(jù)
線的,F(xiàn)FFFH說明你的nand是16微數(shù)據(jù)線的),擦除后去一次讀取里面的值看是否全為1.
如果全都是1則證明沒有壞塊,接著去擦除下一塊,接著讀取里面的值,以此類推依次去檢查
,如果讀出來的值中不是FFH或者FFFFH則說明有壞塊,我們首先在進(jìn)行擦除一次這個塊,完了
在去讀取一次,如果讀出來的還不是FFH或者FFFFH則將這個區(qū)域進(jìn)行一個標(biāo)志,文件系統(tǒng)中
就會看見這個標(biāo)記了,文件系統(tǒng)就可以讓以后訪問這個區(qū)域時直接跳過這個區(qū)域。
nand的操作: 這些操作在nand的數(shù)據(jù)手冊中都有相關(guān)的時序
壞塊檢查操作:
寫頁操作:
擦除操作:
讀頁操作:
注意:在實(shí)際工作中,如果不是做生產(chǎn)nand的工作,你就不需要自己看著數(shù)據(jù)手冊,自己把整個
nand的相關(guān)代碼寫出來,只需能把原廠給的代碼,結(jié)合給的數(shù)據(jù)手冊能對應(yīng)上,大致能看懂,能
移植到自己的地方取用,并且將一些不好的,沒有的代碼給去掉即可。
現(xiàn)在大部分的SOC內(nèi)部都有nand控制器,這個控制器回去幫助我們完成嚴(yán)格的時序要求
因此我們只需要根據(jù)數(shù)據(jù)手冊中給的那些操作的順序進(jìn)行編寫就行了,嚴(yán)格的時序nand控制器
已經(jīng)為我們做好了。
inand在物理接線上和軟件操作上幾乎和SD卡一樣??梢哉finand就是芯片化了的SD卡
SD卡可以說是MMC卡的升級版,SD卡兼容MMC卡。但是MMC卡不兼容SD卡。
SD協(xié)議 支持的是SD卡,MMC協(xié)議支持的是MMC卡 eMMC協(xié)議支持的inand芯片等
SD卡向下兼容MMC卡
SD的工作:SD卡在每一個時刻都屬于某一個狀態(tài),讀狀態(tài),寫狀態(tài),空閑狀態(tài)等。SOC發(fā)送一條命令,如果命令和當(dāng)前SD卡的狀態(tài)相符合,SD卡就會有響應(yīng),執(zhí)行相應(yīng)的操作之后,根據(jù)結(jié)果切換到相應(yīng)的狀態(tài),SD卡工作時是在不同的狀態(tài)之間進(jìn)行切換的。如果SOC發(fā)送的命令和SD卡的當(dāng)前狀態(tài)不符合,SD卡就會不響應(yīng),從這種特性
我們就可以根據(jù)SD卡的響應(yīng)情況去判斷SD卡等的型號。執(zhí)行相應(yīng)型號的初始化操作
SD卡代碼的分析:
首先初始化和SOC SD卡控制器相連接的GPIO,210的GPIO連接到SOC SD卡控制器的引腳是
GPG0 將其引腳設(shè)置為SD卡的那個模式,上拉,驅(qū)動能力4X,
接著將SD卡控制器的時鐘源的來源設(shè)置為從SLOCK_EPLL來(在CLK_SRC4寄存器中設(shè)置),SOCK_EPLL的源時鐘我們設(shè)置為96M,相關(guān)參數(shù)根據(jù)數(shù)據(jù)手冊中,官方給的參數(shù)去設(shè)置EPLL_CON寄存器。
在將SLOCK_EPLL的96MHZ的頻率通過設(shè)置CLD_DIV寄存器進(jìn)行2分頻,48MHZ的頻率作為SD卡控制的時鐘。接著將SD卡控制器進(jìn)行軟復(fù)位。
接著在給SD卡一個時鐘,通過SOC的SD卡控制器中的寄存器,我們設(shè)置一個400k的時鐘先提供給SD卡,因?yàn)槲覀儸F(xiàn)在還不知道是什么版本的,不版本的SD卡,時鐘是不一樣的。
SD卡工作,需要時鐘,可是自己本身沒有時鐘發(fā)生單元,所以需要SOC通過SD卡控制器給SD卡一個時鐘。所以我們先給SD卡一個低頻的時鐘,這樣我們就可以和SD卡進(jìn)行通信了(之后的高頻率時鐘我們在通過代碼去
進(jìn)一步判斷這個SD卡到底是什么版本的,根據(jù)相應(yīng)的版本,在給這個SD卡一個對應(yīng)的時鐘。)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。