十四.ARM裸机学习之iNand详解
2017/12/24 22:20
**
● iNand、MoviNand、eSSD:
**
1.內(nèi)部為NandFlash芯片,集成塊設(shè)備存儲單元,集成了擴(kuò)展卡式Flash 的優(yōu)點(diǎn)
2.即內(nèi)部采用MLC存儲顆粒,外部封裝了接口,接口標(biāo)準(zhǔn)統(tǒng)一、通用。
3.接口標(biāo)準(zhǔn)統(tǒng)一(時序、物理封裝、引腳定義),以芯片級封裝發(fā)布
4.芯片內(nèi)部具有Flash管理模塊:具有能壞塊管理,ECC校驗(yàn)等功能
● 相對MLC NandFlash,iNAND有以下優(yōu)點(diǎn)
iNand/eMMC其實(shí)就是芯片化的SD/MMC卡,軟件操作和SD卡相同。
1.芯片內(nèi)部具有Flash管理模塊:具有能壞塊管理,ECC校驗(yàn)等功能,故使用時SOC不需要參與FLASH的壞塊管理、ECC校正等管理。而NandFlash卻需要,會犧牲部分SOC性能。
2.統(tǒng)一了協(xié)議接口,兼容性好,iNand芯片內(nèi)部使用MLC Nand顆粒,所以性價比很高。
3.iNand接口電路還提供了cache機(jī)制,所以inand的操作速度更快。
● iNand/eMMC的物理接口和SD卡物理接口的對比
在X210中iNand連接在SD/MMC0通道,SD卡連接在SD/MMC2,與SD卡相比,iNand芯片的IO引腳有8個,是SD卡的芯片化,軟件操作與SD卡基本相同。
二、iNand接口
● 硬件接口功能如下:
1.iNand的8個IO支持1、4、8bit并行傳輸,SD卡的4個IO,支持1、4線并行傳輸
2.CMD引腳用來傳輸命令
3.CLK引腳用來傳輸同步時鐘信號,說明SD/iNand是同步的,SD/iNand的工作速率是由主機(jī)給它的CLK頻率決定的。
● SD/iNand的體系結(jié)構(gòu)圖
SD卡內(nèi)部有一個接口控制器,這個控制器類似于一個單片機(jī),這個單片機(jī)的程序功能就是通過CMD線接收外部主機(jī)SoC發(fā)給SD卡的命令碼,然后執(zhí)行這個命令并且回發(fā)響應(yīng)給主機(jī)SoC。這個單片機(jī)處理命令及回發(fā)響應(yīng)遵循的就是SD協(xié)議。這個單片機(jī)同時可以控制SD卡內(nèi)部的存儲單元,可以讀寫存儲單元。
● SD/iNand的內(nèi)部寄存器(重點(diǎn)是RCA寄存器)
RCA(relative address,相對地址寄存器)。我們在訪問SD卡時,實(shí)際上SD卡內(nèi)部每個存儲單元的地址沒有絕對數(shù)字,都是使用相對地址。相對地址由SD卡自己決定的,存放在RCA寄存器中。
● SoC的SD/MMC/iNand控制器
1.S5PV210的SD卡控制器在Section8.7部分
三、SD/iNand代碼分析之SD卡基礎(chǔ)理論
● 命令碼CMD和ACMD
1、SD卡工作在命令+響應(yīng)的模式下。
2、SD協(xié)議的命令分2種:CMDx和ACMDx。CMD是單命令命令,就是單獨(dú)發(fā)一個CMD即可表示一個意思。ACMD是一種擴(kuò)展,就是發(fā)2個CMD加起來表示一個意思??梢哉J(rèn)為ACMDx = CMDy+CMDz(y一般是55)
● 卡類型識別SD or MMC?
1、MMC協(xié)議、SD協(xié)議、eMMC協(xié)議本身是一脈相承的,所以造成了一定的兼容性,所以當(dāng)我們SoC控制器工作時連接到SoC上的可能是一個MMC卡、也可能是SD卡、也可能是iNand芯片。主機(jī)SoC需要去識別這個卡到底是什么版本的卡
2、SoC如何區(qū)分卡種類?因?yàn)椴煌姹镜目▋?nèi)部協(xié)議不同的,所以對卡識別命令的響應(yīng)也是不同的。SoC通過發(fā)送一些命令、聽取響應(yīng)就可以根據(jù)不同的響應(yīng)判定卡的版本。
● 卡狀態(tài)
SD卡內(nèi)部的接口控制器類似于一個單片機(jī),這個單片機(jī)其實(shí)是一個狀態(tài)機(jī)。所以SD卡任何時候都屬于某一種狀態(tài)(空閑狀態(tài)、準(zhǔn)備好狀態(tài)、讀寫狀態(tài)、出錯狀態(tài)····都是事先定義好的),在這種狀態(tài)下能夠接受的命令是一定的,接受到命令之后執(zhí)行一定的操作然后根據(jù)操作結(jié)果會跳轉(zhuǎn)為其他狀態(tài)。
如果主機(jī)發(fā)過來的命令和當(dāng)前狀態(tài)不符狀態(tài)機(jī)就不響應(yīng),如果收到命令和當(dāng)前狀態(tài)相符就會執(zhí)行相應(yīng)操作,執(zhí)行完之后根據(jù)結(jié)果跳轉(zhuǎn)為其他狀態(tài)。
● 卡回復(fù)類型
1、一般來說,SD卡的命令都屬于:命令+響應(yīng)的模式。也有極少數(shù)的SD卡命令是不需要回復(fù)的。
2、卡回復(fù)有R1、R7、R1B等8種類型,每種卡回復(fù)類型都有自己的解析規(guī)則。然后卡在特定狀態(tài)下響應(yīng)特定命令時有可能回復(fù)哪種響應(yīng)都是SD協(xié)議事先規(guī)定好的,詳細(xì)細(xì)節(jié)要查閱協(xié)議文檔。
四、SD/iNand代碼分析
● SD/iNand相關(guān)的GPIO初始化
分析代碼的方法:查閱芯片原理圖對應(yīng)GPIO+Soc手冊找到對應(yīng)寄存器+良好的C語法基礎(chǔ),(下面僅做個例說明)
● 時鐘設(shè)置
為什么使用的是SOC控制器的時鐘?
1、SD卡本身工作需要時鐘,但是自己又沒有時鐘發(fā)生單元,依靠主機(jī)SoC的控制器通過SD接口中的CLK線傳一個時鐘過來給SD卡內(nèi)部使用。所以主機(jī)SD卡控制器先初始化好自己的時鐘,然后將自己的時鐘傳給SD卡。
2、因?yàn)榇藭r剛開始和SD卡通信,主機(jī)不清楚SD卡屬于哪個版本(高版本和低版本的SD卡的讀寫速率不同,高版本的可以工作在低版本的速率下,低版本的SD卡不能工作在高版本速率下),所以先給SD卡發(fā)400KHz的低速率時鐘,SD卡拿到這個時鐘后就能工作了。然后在后面和SD卡進(jìn)行進(jìn)一步通信時去識別SD卡的版本號,識別后再根據(jù)SD卡的版本進(jìn)一步給它更合適的時鐘。
時鐘代碼部分結(jié)合前面的210時鐘博文:
http://blog.csdn.net/wangweijundeqq/article/details/78503699
搞清楚那張時鐘框圖,
這里截取主要的框圖部分
S5PV210時鐘體系框圖詳解**
這兩張圖就是一個時鐘體系框圖,
兩張圖是一個漸進(jìn)的關(guān)系,
第一張是整體時鐘來源,第二張是各個外設(shè),或者說是各個模塊的更進(jìn)一步,更加細(xì)分的時鐘來源。
第一張圖從左到右依次完成了原始時鐘生成->PLL倍頻得到高頻時鐘->初次分頻得到各總線時鐘;
第二張圖是從各中間時鐘(第一張圖中某個步驟生成的時鐘)到各外設(shè)自己使用的時鐘(實(shí)際就是個別外設(shè)自己再額外分頻的設(shè)置)
**在數(shù)據(jù)手冊中,
寄存器中的clock source x 就是在設(shè)置MUX開關(guān),
寄存器中的clock divider control就是設(shè)置分頻器中的系數(shù)。**
時鐘初始化源碼如下:**
● 下面是最重要的SD卡通信最關(guān)鍵的地方了
結(jié)合提供的SD卡初始化一起分析;
● SD卡數(shù)據(jù)傳輸
總結(jié)
以上是生活随笔為你收集整理的十四.ARM裸机学习之iNand详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。