s5pv210——nandflash和inand的基础理论
以下內容源于朱友鵬《物聯(lián)網(wǎng)大講壇》課程的學習。如有侵權,請告知刪除。
首先是一些基礎知識,見下圖
一、NandFlash的接口
1、Nand的型號與命名
以K9F2G08為例
- K9F表示是三星公司的NandFlash系列。
- 2G表示Nand的大小是2Gbit(256MB)。
- 08表示Nand是8位的(8位就是數(shù)據(jù)線有8根)。
- 看出廠家、系列型號、容量大小、數(shù)據(jù)位數(shù)。
2、Nand的數(shù)據(jù)位
- Nand有8位數(shù)據(jù)位的,有16位數(shù)據(jù)位的;
- Nand是并行接口;
- Nand的數(shù)據(jù)線上傳遞的不一定全部是有效數(shù)據(jù),也可能有命令、地址等。
3、Nand的功能框圖
(1)Nand的結構
- 可以看作一個矩陣式存儲器。被分成一個個小塊,每一小塊可以存儲一個bit位。
(2)Nand中可以被單次訪問的最小單元叫做Page(頁)
- 即Nand進行一次讀寫至少要讀寫這么多內容,或者是這么多內容的整數(shù)倍;
- K9F2G08芯片中,Page的大小是2KB+64B。這說明要讀寫K9F2G08,每次至少要讀寫2KB或者n*2KB,即使只需要其中的一個字節(jié)。其中2KB是真正用來存儲的,而64B是用來存儲ECC數(shù)據(jù)、塊壞標志。
- 這是典型的塊設備。(現(xiàn)在有些塊設備為了方便,提供了一種random read模式,可以只讀取1個字節(jié))。
- 塊設備(例如硬盤)的扇區(qū),類似于nand的頁。而block的概念是共有的,那么塊設備中的一個block有多少個扇區(qū)?
(3)頁往上還有個Block(塊)的概念
- 1個塊等于若干個頁(譬如在K9F2G08中1個塊等于64頁)。
(4)塊往上是整個Nand芯片,叫做Device。
- 一個Device是若干個Block,譬如K9F2F08一個Device有2028個block。所以整個Device大小為:2048×64×2K = 256MB
(5)塊設備分page、block的意義
- 塊設備不能完全按字節(jié)訪問而必須塊訪問,這是物理上的限制,而非人為設置的障礙。
- Page和Block各有各的意義,譬如Nand中,Page是讀寫Nand的最小單位;Block是擦除Nand的最小單位。
- 這些規(guī)則都是Nand的物理原理和限制要求的。
(6)Nand芯片中主要包含2部分:Nand存儲顆粒+Nand接口電路。
- 存儲顆粒就是純粹的Nand原理的存儲單元,類似于倉庫;
- Nand接口電路是用來管理存儲顆粒,并且給外界提供一個統(tǒng)一的Nand接口規(guī)格的訪問接口的。
(7)Nand中有多個存儲單元,每個單元都有自己的地址(地址是精確到字節(jié)的)。
- 所以Nand是地址編排精確到字節(jié),但是實際讀寫卻只能精確到頁(所以Nand的很多操作都要求給的地址是頁對齊的,譬如2K、4K、512K等這樣的地址,不能給3000B這樣的地址)。
- Nand讀寫時地址傳遞是通過IO線發(fā)送的,因為地址有32位而IO只有8位,所以需要多個cycle才能發(fā)送完畢。
- 一般的Nand都是4cycle或者5cycle發(fā)送地址(從這里把Nand分為了4cycle Nand和5cycle Nand)。
(8)總結
- Nand芯片內部有存儲空間,并且有電路來管理這些存儲空間,向外部提供統(tǒng)一的Nand接口的訪問規(guī)則。
- 外部的SoC可以使用Nand接口時序來讀寫這個Nand存儲芯片。
- Nand接口是一種公用接口,是一種標準,理論上來說外部SoC可以直接模擬Nand接口來讀寫Nand芯片,但是實際上因為nand接口對時序要求非常嚴格,而且時序很復雜,所以一般的SoC都是通過專用的硬件的Nand控制器(這些控制器一般是作為SoC的內部外設來存在的)來操控Nand芯片的。
二、NandFlash的結構
1、Nand的單元組織:block與page
(1)Nand的頁和塊設備(尤其是硬盤)的扇區(qū)是類似的。
- 扇區(qū)最早在磁盤中是512字節(jié),后來也有些高級硬盤扇區(qū)不是512字節(jié)而是1024字節(jié)/2048字節(jié)/4096字節(jié)等。
- Nand也是一樣,不同的Nand的頁的大小是不同的,也有512字節(jié)/1024字節(jié)/2048字節(jié)/4096字節(jié)等。
(2)一個block等于多少page也是不定的,不同的Nand也不同。一個Nand芯片有多少block也是不定的,不同的Nand芯片也不同。
(3)Nand的組織架構挺亂的,接口時序也不同,造成結構就是不同廠家的Nand芯片,或者是同一個廠家的不同系列型號存儲容量的nand接口也不一樣。
- nand有一個很大的問題就是一旦升級容量或者換芯片系列則硬件要重新做、軟件要重新移植。
2、帶內數(shù)據(jù)和帶外數(shù)據(jù)
(1)Nand的每個頁由2部分組成,這2部分各自都有一定的存儲空間。
- 譬如K9F2G08中為2K+64字節(jié)。
- 2K字節(jié)屬于帶內數(shù)據(jù),是我們真正的存儲空間,將來存儲在Nand中的有效數(shù)據(jù)就是存在這2K范圍內的(平時計算nand的容量時只考慮這2KB);
- 64字節(jié)的帶外數(shù)據(jù)不能用來存儲有效數(shù)據(jù),是作為別的附加用途的(譬如用來存儲ECC數(shù)據(jù)、用來存儲壞塊標志等……)。
(2)ECC(error correction code,錯誤校驗碼)
- Nand的穩(wěn)定性不夠好,因而nand存儲的出錯(即位反轉)概率高;
- 將有效信息存儲到Nand中的同時,按照一定的算法(譬如CRC16等校驗算法)計算ECC信息,將ECC信息同時存儲到Nand這個頁的帶外數(shù)據(jù)區(qū)。
- 讀取數(shù)據(jù)時,對數(shù)據(jù)用同樣的算法再計算一次ECC,并且和從帶外數(shù)據(jù)區(qū)讀出的ECC進行校驗;
- 如果校驗通過則證明Nand的有效數(shù)據(jù)可信,如果校驗不通過則證明這個數(shù)據(jù)已經(jīng)被損壞(只能丟棄或者嘗試修復)。
(3)壞塊標志
- Nand芯片在用一段時間后,某些塊可能會壞掉(這些塊無法擦除了,或者無法讀寫了),類似于硬盤的壞道。
- 壞塊是不可避免的,而且隨著Nand的使用壞塊會越來越多。當壞塊還不算太多時這個Nand都是可以用的,除非壞塊太多了不劃算使用了才會換新的。
- 為了管理Nand,發(fā)明了一種壞塊標志機制。Nand的每個頁的64字節(jié)的帶外數(shù)據(jù)中,文件系統(tǒng)定義了一個固定位置(譬如定位第24字節(jié))來標記這個塊是好的還是壞的。當某個塊已經(jīng)壞了,文件系統(tǒng)將該塊標記為壞塊,以后訪問nand時直接跳過這個塊。
3、Nand的地址時序
(1)nand的地址有多位,分4/5周期通過IO引腳發(fā)送給Nand芯片(一般它的外接引腳只有8bit或者16bit)來對Nand進行尋址。
- 尋址的最小單位是字節(jié),但是讀寫的最小單位是頁。
(2)nand的地址在寫代碼時要按照Nand要求的時序和順序去依次寫入。
4、Nand的命令碼
(1)外部SoC要想通過Nand控制器來訪問Nand(實質就是通過Nand接口),就必須按照Nand接口給nand發(fā)送命令、地址、數(shù)據(jù)等信息來讀寫Nand。
(2)Nand芯片內部的管理電路本身可以接收外部發(fā)送的命令,然后根據(jù)這些命令來讀寫Nand內容與外部SoC交互。
- 對nand進行的所有操作(擦除、讀、寫……)都要有命令、地址、數(shù)據(jù)的參與才能完成,而且必須按照Nand芯片規(guī)定的流程來做。
三、NandFlash的常見操作及流程分析
1、壞塊檢查
- Flash使用之前要先統(tǒng)一擦除(擦除的單位是塊)。Flash類設備擦除后里面全是1,所以擦干凈之后讀出來的值是0xff。
- 檢查壞塊的思路就是:先塊擦除,然后將整塊讀出來,依次檢測各自節(jié)是否為0xff,如果是則表明不是壞塊,如果不是則表明是壞塊。
2、頁寫(program)操作
(1)寫之前確保這個頁被擦除干凈
- 寫操作(write)在flash的操作中就叫編程(program)
(2)SoC寫Flash時通過命令線、IO線依次發(fā)送寫命令、寫頁地址、寫數(shù)據(jù)等進入NandFlash。
(3)寫的過程
- SoC通過Nand控制器和Nand芯片完成順序對接,然后按照時序要求將一頁數(shù)據(jù)發(fā)給Nand芯片內部的接口電路。
- 接口電路先接收收據(jù)到自己的緩沖區(qū),然后再集中寫入Nand芯片的存儲區(qū)域中。
- Nand接口電路將一頁數(shù)據(jù)從緩沖區(qū)中寫入Nand存儲系統(tǒng)中需要一定的時間,這段時間Nand芯片不能再響應SOC發(fā)過來的其他命令,所以SoC要等待Nnad接口電路忙完。
- 等待方法是SoC不斷讀取狀態(tài)寄存器(這個狀態(tài)寄存器有2種情況:一種是SoC的Nand控制器自帶的,另一種是SoC通過發(fā)命令得到命令響應得到的);
- SoC通過檢查狀態(tài)寄存器的狀態(tài)位,得知頁數(shù)據(jù)是否已經(jīng)寫完。
(4)Nand的讀寫可能出錯,為了安全進行ECC校驗
- ECC校驗有硬件式校驗和軟件式校驗;
- 軟件式校驗,策略之一是將剛才寫入的1頁數(shù)據(jù)讀出來,和寫入的內容進行逐一對比。如果讀出的和寫入的完全一樣,說明剛才的寫入過程正確完成了;如果讀出來的和寫入的不完全一樣那就說明剛才的寫入有問題。
- SoC的Nand控制器可以提供硬件式ECC(這個也是比較普遍的情況),硬件式ECC就是在Nand的控制器中有個硬件模塊專門做ECC操作。
- 在寫入Nand芯片時,打開ECC生成開關。則在寫入Nand芯片的過程中,Nand控制器的ECC模塊會自動生成ECC數(shù)據(jù),并放在相應的寄存器中,然后將ECC數(shù)據(jù)寫入Nand芯片的帶外數(shù)據(jù)區(qū);
- 在讀取Nand芯片時,打開硬件ECC開關。則在讀取Nand芯片的過程中,硬件ECC會自動計算讀進來的一頁數(shù)據(jù)的ECC值,并放到相應的寄存器中。然后讀取帶外數(shù)據(jù)區(qū)中原來寫入時存入的ECC值,和之前得到的ECC值進行校驗。
- 校驗通過則說明讀寫正確,校驗不通過則說明不正確。
3、擦除(erase)操作
(1)擦除時必須給塊對齊的地址。如果給了不對齊的地址,結果是不可知的(有些Nand芯片沒關系,它內部會自動將其對齊,而有些Nand會返回地址錯誤)。
(2)讀寫時給的地址也是一樣,要求是頁對齊地址。如果給了不對齊的,也是有可能對有可能錯。
4、頁讀(read)操作
四、S5PV210的NandFlash控制器
1、SoC的Nand控制器的作用
(1)Nand芯片本身通過Nand接口電路來存取數(shù)據(jù),Nand接口電路和SOC之間通過Nand接口時序來通信。
- Nand接口時序相對復雜,完全用軟件來實現(xiàn)Nand接口時序的缺點:難保證時序能滿足、容易不穩(wěn)定,代碼很難寫。
- 解決方案:在SoC內部集成一個Nand控制器(實質是一塊硬件電路,其完全滿足Nand接口時序的操作,然后將接口時序的操作寄存器化)。
(2)SOC和Nand芯片之間通信
- 在SoC沒有Nand控制器時,需要SoC來處理接口時序,編程很麻煩,需要程序員看Nand芯片的接口時序圖,嚴格按照接口時序圖中編程;
- 在SoC有Nand控制器時,SoC只需要編程操控Nand控制器的寄存器即可,Nand控制器內部硬件會根據(jù)寄存器值來生成合適的Nand接口時序和Nand芯片通信。因此讀寫Nand芯片時不用再關注Nand接口時序,只要關注SoC的Nand控制器的寄存器,編程變得簡單。
(3)現(xiàn)在的技術趨勢(硬件加速)
- 目前幾乎所有的外設在SoC內部都有對應的控制器來與其通信;
- SoC內部集成的各種控制器(也就是各種內部外設)越多,則SoC硬件能完成的功能越多,使用此SoC來完成相應任務時,軟件編程越簡單。
- 譬如圖形處理和圖像處理領域中的2D圖像編碼(jpeg編碼)、視頻編碼(h.264編碼)。現(xiàn)在大部分的application級別的SoC都有集成的內部編碼器(像S5PV210就有,更復雜的譬如4418、6818也有)。利用這些硬件編碼器來進行快速編解碼,軟件工作量和大大難度降低。
2、結構框圖分析
結構框圖中關鍵點:
(1)SFR
- 后續(xù)編程的關鍵,編程時就是通過讀寫SFR來產(chǎn)生Nand接口時序以讀寫Nand芯片的;
(2)Nand interface
- 硬件接口,將來和Nand芯片的相應引腳進行連接
(3)ECC生成器
五、S5PV210的Nand控制器的主要寄存器
NFCONF、NFCONT、NFCMMD、NFADDR、NFDATA、NFMECCD0&NFMECCD1、NFSECCD、NFSTAT六、iNand介紹
1、iNand/eMMC/SDCard/MMCCard的關聯(lián)
(1)最早出現(xiàn)的是MMC卡,卡片式結構,按照MMC協(xié)議設計。
- 相較于NandFlash芯片來說,MMC卡有2個優(yōu)勢:第一是卡片化,便于拆裝;第二是統(tǒng)一了協(xié)議接口,兼容性好。
(2)后來出現(xiàn)SD卡,兼容MMC協(xié)議。
- SD卡較MMC有一些改進,譬如寫保護、速率、容量等。
- SD卡遵守SD協(xié)議,有多個版本。多個版本之間向前兼容。
(3)iNand/eMMC在SD卡的基礎上發(fā)展起來。
- 較SD卡的區(qū)別就是將SD卡芯片化了(解決卡的接觸不良問題,便于設備迷你化)。
(4)iNand和eMMC的關聯(lián)
- eMMC是協(xié)議;
- iNand是Sandisk公司符合eMMC協(xié)議的一種芯片系列名稱。
2、iNand/eMMC的結構框圖及其與NandFlash的區(qū)別
(1)iNand內部也是由存儲系統(tǒng)和接口電路構成(和Nand結構特性類似,不同之處在于接口電路功能不同)。
(2)iNand的接口電路挺復雜,功能很健全。譬如:
- 提供eMMC接口協(xié)議,和SoC的eMMC接口控制器通信對接。
- 提供塊的ECC校驗相關的邏輯,也就是說iNand本身自己完成存儲系統(tǒng)的ECC功能,SoC使用iNand時自己不用寫代碼來進行ECC相關操作,大大簡化了SoC的編程難度。(NandFlash分2種:SLC和MLC,SLC更穩(wěn)定,但是容量小價格高;MLC容易出錯,但是容量大價格低)。
- iNand芯片內部使用MLC Nand顆粒,所以性價比很高。
- iNand接口電路還提供了cache機制,所以inand的操作速度很快。
3、iNand/eMMC的物理接口和SD卡物理接口的對比
(1)S5PV210芯片本身支持4通道的SD/MMC
- 在X210中實際是在SD/MMC0通道接了iNand芯片,而SD/MMC2接了SD卡(SD/MMC3也接了SD卡)。
(2)對比inand和SD卡接線
- 這兩個接線幾乎是一樣的,唯一的區(qū)別就是SD卡IO線有4根,而iNand的IO線有8根。
- 在實際操作iNand芯片時和操作SD卡時幾乎是一樣的(物理接線幾乎一樣,軟件操作協(xié)議幾乎一樣)。
- iNand/eMMC其實就是芯片化的SD/MMC卡,軟件操作和SD卡相同。
- 分析iNand芯片的操作代碼時,其實就是以前的SD卡的操作代碼。一些細節(jié)的區(qū)別就是為了區(qū)分各種不同版本的SD卡、iNand的細節(jié)差異。
七、SD卡/iNand操作
1、硬件接口:DATA、CLK、CMD
(1)iNand的IO線有8根,支持1、4、8線并行傳輸模式;SD卡IO線有4根,支持1、4線并行傳輸模式。
(2)CMD線用來傳輸命令、CLK線用來傳輸時鐘信號。
(2)接口有CLK線,工作時主機SoC通過CLK線傳輸時鐘信號給SD卡/iNand芯片。
- SD/iNand是同步的,SD/iNand的工作速率是由主機給它的CLK頻率決定的。
2、命令響應的操作模式
(1)SD協(xié)議事先定義很多標準命令(CMD0、CMD1……),每個命令都有它的作用和使用條件和對應的響應。
- 在一個命令周期中,主機先發(fā)送CMD給SD卡,然后SD卡解析這個命令并且執(zhí)行這個命令;
- SD卡根據(jù)結果回發(fā)給主機SoC一個響應(有些命令是不需要響應的,這時SD卡不會給主機回發(fā)響應,主機也不用等待響應)。
(2)標準的“命令+響應”的周期中,主機發(fā)完一個命令后應該等待SD卡的響應而不是接著發(fā)下一條命令。
3、SD/iNand的體系結構圖
(1)SD卡內部有一個接口控制器
- 其類似于一個單片機,功能是通過CMD線接收外部主機SoC發(fā)給SD卡的命令碼,然后執(zhí)行這個命令并且回發(fā)響應給主機SoC。
- 這個單片機處理命令及回發(fā)響應遵循的就是SD協(xié)議。這個單片機同時可以控制SD卡內部的存儲單元,可以讀寫存儲單元。
4、SD/iNand的寄存器(重點是RCA寄存器)
(1)SD卡內部的寄存器,而非主機SoC的SD控制器的寄存器。
- 很多外置芯片內部都是有寄存器的,這些寄存器可以按照一定的規(guī)則訪問,訪問這些寄存器可以得知芯片的一些信息。
(2)RCA(relative address,相對地址寄存器)
- 我們在訪問SD卡時,實際上SD卡內部每個存儲單元的地址沒有絕對數(shù)字,都是使用相對地址。
- 相對地址由SD卡自己決定的,存放在RCA寄存器中。
5、SoC的SD/MMC/iNand控制器簡介
(1)不同的SoC可能在SD/MMC/iNand等支持方面有差異,但是如果支持都是通過內部提供SD控制器來支持的。
(2)S5PV210的SD卡控制器在Section8.7部分。
總結
以上是生活随笔為你收集整理的s5pv210——nandflash和inand的基础理论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WMS仓储管理系统解决方案
- 下一篇: win11 dev cpp程序关闭时弹出