日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

arm裸机块设备

發(fā)布時(shí)間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arm裸机块设备 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

RAM 內(nèi)存
ROM 外存

NorFlash(可總線式訪問)
NandFlash(塊設(shè)備) SLC 可靠性高,缺點(diǎn)是容量做不大
MLC 容量可以做很大很便宜

SD卡與SRAM/DDR/SROM之類的東西的不同:SRAM/DDR/SROM之類的存儲(chǔ)芯片是總線式的,只要連接上初始化好之后就可以由SoC直接以地址方式來訪問;但是SD卡不能直接通過接口給地址來訪問,它的訪問需要按照一定的接口協(xié)議(時(shí)序)來訪問。
SD卡支持兩種讀寫協(xié)議:SD協(xié)議和SPI協(xié)議。
SPI協(xié)議特點(diǎn)(低速、接口操作時(shí)序簡單、適合單片機(jī))
SD協(xié)議特點(diǎn)(高速、接口時(shí)序復(fù)雜,適合有SDIO接口的SoC)

S5PV210的SD/MMC控制器
(1)數(shù)據(jù)手冊(cè)Section8.7,為SD/MMC控制器介紹。
(2)SD卡內(nèi)部除了存儲(chǔ)單元Flash外,還有SD卡管理模塊,我們SoC和SD卡通信時(shí),通過9針引腳以SD協(xié)議/SPI協(xié)議向SD卡管理模塊發(fā)送命令、時(shí)鐘、數(shù)據(jù)等信息,然后從SD卡返回信息給SoC來交互。工作時(shí)每一個(gè)任務(wù)(譬如初始化SD卡、譬如讀一個(gè)塊、譬如寫、譬如擦除····)都需要一定的時(shí)序來完成(所謂時(shí)序就是先向SD卡發(fā)送xx命令,SD卡回xx消息,然后再向SD卡發(fā)送xx命令····)

命令碼

壞塊檢查

(1)Flash使用之前要先統(tǒng)一擦除(擦除的單位是塊)。Flash類設(shè)備擦除后里面全是1,所以擦干凈之后讀出來的值是0xff。
(2)檢查壞塊的思路就是:先塊擦除,然后將整塊讀出來,依次檢測各自節(jié)是否為0xff,如果是則表明不是壞塊,如果不是則表明是壞塊。

頁寫

(1)寫之前確保這個(gè)頁是被擦除干凈的。如果不是擦除干凈的(而是臟的、用過的)頁,寫進(jìn)去的值就是錯(cuò)的,不是你想要的結(jié)果。
(2)寫操作(write)在flash的操作中就叫編程(program)
(3)SoC寫Flash時(shí)通過命令線、IO線依次發(fā)送寫命令、寫頁地址、寫數(shù)據(jù)等進(jìn)入NandFlash。
(4)寫的過程:SOC通過Nand控制器和Nand芯片完成順序?qū)?#xff0c;然后按照時(shí)序要求將一頁數(shù)據(jù)發(fā)給Nand芯片內(nèi)部的接口電路。接口電路先接收收據(jù)到自己的緩沖區(qū),然后再集中寫入Nand芯片的存儲(chǔ)區(qū)域中。Nand接口電路將一頁數(shù)據(jù)從緩沖區(qū)中寫入Nand存儲(chǔ)系統(tǒng)中需要一定的時(shí)間,這段時(shí)間Nand芯片不能再響應(yīng)SOC發(fā)過來的其他命令,所以SoC要等待Nnad接口電路忙完。等待方法是SoC不斷讀取狀態(tài)寄存器(這個(gè)狀態(tài)寄存器有2種情況:一種是SoC的Nand控制器自帶的,另一種是SoC通過發(fā)命令得到命令響應(yīng)得到的),然后通過檢查這個(gè)狀態(tài)寄存器的狀態(tài)位就能知道Nand接口電路剛才寫的那一頁數(shù)據(jù)寫完了沒、寫好了沒。直到SoC收到正確的狀態(tài)寄存器響應(yīng)才能認(rèn)為剛才要寫的那一頁數(shù)據(jù)已經(jīng)ok。(如果SoC收到的狀態(tài)一直不對(duì),可以考慮重寫或者認(rèn)為這一頁所在的塊已經(jīng)是壞塊,或者整個(gè)Nand芯片已經(jīng)掛掉了)。
(5)正常情況下到了第四步就已經(jīng)完了。但是因?yàn)镹and的讀寫有不靠譜情況,因此我們?yōu)榱税踩珪?huì)去做ECC校驗(yàn)。ECC校驗(yàn)有硬件式校驗(yàn)和軟件式校驗(yàn)2種。軟件式校驗(yàn)可以采用的策略有很多,其中之一(Nand芯片手冊(cè)上推薦的方式是):將剛才寫入的1頁數(shù)據(jù)讀出來,和寫入的內(nèi)容進(jìn)行逐一對(duì)比。如果讀出的和寫入的完全一樣,說明剛才的寫入過程正確完成了;如果讀出來的和寫入的不完全一樣那就說明剛才的寫入有問題。
(6)硬件式ECC:SoC的Nand控制器可以提供硬件式ECC(這個(gè)也是比較普遍的情況)。硬件式ECC就是在Nand的控制器中有個(gè)硬件模塊專門做ECC操作。當(dāng)我們操作Nand芯片時(shí),只要按照SoC的要求按時(shí)打開ECC生成開關(guān),則當(dāng)我們寫入Nand芯片時(shí)SoC的Nand控制器的ECC模塊會(huì)自動(dòng)生成ECC數(shù)據(jù)放在相應(yīng)的寄存器中,然后我們只需要將這生成的ECC數(shù)據(jù)寫入Nand芯片的帶外數(shù)據(jù)區(qū)即可;在將來讀取這塊Nand芯片時(shí),同樣要打開硬件ECC開關(guān),然后開始讀,在讀的過程當(dāng)中硬件ECC會(huì)自動(dòng)計(jì)算讀進(jìn)來的一頁數(shù)據(jù)的ECC值并將之放到相應(yīng)的寄存器中。然后我們?cè)僮x取帶外數(shù)據(jù)區(qū)中原來寫入時(shí)存入的ECC值,和我們剛才讀的時(shí)候得到的ECC值進(jìn)行校驗(yàn)。校驗(yàn)通過則說明讀寫正確,校驗(yàn)不通過則說明不正確(放棄數(shù)據(jù)或者嘗試修復(fù))。

擦除(erase)操作

(1)擦除時(shí)必須給塊對(duì)齊的地址。如果給了不對(duì)齊的地址,結(jié)果是不可知的(有些Nand芯片沒關(guān)系,它內(nèi)部會(huì)自動(dòng)將其對(duì)齊,而有些Nand會(huì)返回地址錯(cuò)誤)。
(2)讀寫時(shí)給的地址也是一樣,要求是頁對(duì)齊地址。如果給了不對(duì)齊的,也是有可能對(duì)有可能錯(cuò)。

頁讀

nandflash控制器

nand芯片是通過nand接口電路進(jìn)行讀寫的,nand接口電路和soc之間通過nand接口時(shí)序來通信的,nand接口時(shí)序相對(duì)復(fù)雜,如果要用軟件來編,很難保證時(shí)序能滿足,會(huì)不穩(wěn)定,也難寫。所以soc內(nèi)部集成了一個(gè)nand控制器。


框圖分析
通過對(duì)SFR特殊寄存器進(jìn)行讀寫來產(chǎn)生nand接口時(shí)序
nand flash interface 接口硬件,將nand芯片相對(duì)應(yīng)的引腳進(jìn)行連接
ECC生成器。

主要寄存器分析

NFCONF 主要用來配置nand接口
NFCONT 接口控制的控制,主要有接口時(shí)序。

NFCMMD 用來發(fā)命令的
NFADDR 用來發(fā)地址的(一般有4、5個(gè)Cycle,每次發(fā)一個(gè)Cycle,每個(gè)Cycle八個(gè)位)
NFDATA 用來讀寫數(shù)據(jù)的。讀出來的一個(gè)字節(jié)的數(shù)據(jù)存放在這里。

NFMECCD0
NFMECCD1 產(chǎn)生ECCdata(數(shù)據(jù))的(這是主數(shù)據(jù)區(qū)(也就是2K那的)的ECC) 這個(gè)ECC存放在帶外數(shù)據(jù)區(qū)。

NFSECCD 產(chǎn)生ECCdata(數(shù)據(jù))的(這是次數(shù)據(jù)區(qū)(也就是64 B那的)的ECC)這個(gè)ECC存放在哪呢,,也放在帶外數(shù)據(jù)區(qū)。
(因?yàn)?4B的帶外數(shù)據(jù)區(qū)就是存放這些東西的)

NFSTAT 狀態(tài)寄存器,這里邊的值主要來自nand接口電路

沒用到暫時(shí)
NFSBLK 存放塊地址的
NFEBLK 可編程的結(jié)束塊地址寄存器,

SD/iNand

CMD與ACMD
這兩種都是命令碼,CND是單命令命令,就是單獨(dú)發(fā)一個(gè)CMD即可表示的意思,ACMD是一種擴(kuò)展,就是需要發(fā)兩個(gè)CND表示一個(gè)意思(就是ACMD),即ACMDz = CMDy +CMDx.

1.11.8.3、卡狀態(tài)
(1)SD卡內(nèi)部的接口控制器類似于一個(gè)單片機(jī),這個(gè)單片機(jī)其實(shí)是一個(gè)狀態(tài)機(jī)。所以SD卡任何時(shí)候都屬于某一種狀態(tài)(空閑狀態(tài)、準(zhǔn)備好狀態(tài)、讀寫狀態(tài)、出錯(cuò)狀態(tài)·……都是事先定義好的.在這種狀態(tài)下能夠接受的命令是一定的,接受到命令之后執(zhí)行一定的操作然后根據(jù)操作結(jié)果會(huì)跳轉(zhuǎn)為其他狀態(tài).如果主機(jī)發(fā)過來的命令和當(dāng)前狀態(tài)丕符狀態(tài)機(jī)就不響應(yīng).如果收到命令和當(dāng)前狀態(tài)相符就會(huì)執(zhí)行相應(yīng)操作.執(zhí)行完之后根據(jù)結(jié)果跳轉(zhuǎn)為基他狀態(tài)。

《1.10.ARM裸機(jī)第十部分-SD卡啟動(dòng)詳解》

第一部分、章節(jié)目錄
1.10.1.主流的外存設(shè)備介紹
1.10.2.SD卡的特點(diǎn)和背景知識(shí)
1.10.3.SD卡的編程接口
1.10.4.S5PV210的SD卡啟動(dòng)詳解1
1.10.5.S5PV210的SD卡啟動(dòng)詳解2
1.10.6.S5PV210的SD卡啟動(dòng)實(shí)戰(zhàn)1
1.10.7.S5PV210的SD卡啟動(dòng)實(shí)戰(zhàn)2
1.10.8.解決X210開發(fā)板的軟開關(guān)按鍵問題

第二部分、章節(jié)介紹
1.10.1.主流的外存設(shè)備介紹
本節(jié)主要講解目前為止出現(xiàn)過的主流外部存儲(chǔ)設(shè)備如磁存儲(chǔ)設(shè)備、Flash類存儲(chǔ)設(shè)備以及其主要特點(diǎn)。
1.10.2.SD卡的特點(diǎn)和背景知識(shí)
本節(jié)主要講解SD卡的簡單背景,以及SD卡與MMC卡,SD卡與TF卡、MicroSD卡等的關(guān)聯(lián)和區(qū)別。
1.10.3.SD卡的編程接口
本節(jié)從編程角度講解SD卡的接口特征,SD協(xié)議和SPI協(xié)議訪問SD卡的各自特點(diǎn),主要目標(biāo)是希望大家搞清楚SD卡的時(shí)序式訪問和SRAM/DDR等的總線式訪問的區(qū)別。
1.10.4.S5PV210的SD卡啟動(dòng)詳解1
本節(jié)介紹S5PV210的S卡啟動(dòng)的基礎(chǔ)知識(shí),通過回顧S5PV210的iROM application note文檔中的啟動(dòng)過程描述,來分析SD卡啟動(dòng)的方法。
1.10.5.S5PV210的SD卡啟動(dòng)詳解2
本節(jié)著重講解扇區(qū)和塊的概念,試圖讓大家建立塊設(shè)備的概念,并且明白Flash的以塊為單位進(jìn)行讀寫的操作特征。
1.10.6.S5PV210的SD卡啟動(dòng)實(shí)戰(zhàn)1
本節(jié)詳細(xì)分析210的iROM中的block device copy function及其使用細(xì)節(jié),為編程實(shí)戰(zhàn)打好基礎(chǔ),同時(shí)將編程中的細(xì)節(jié)參數(shù)都確定好。
1.10.7.S5PV210的SD卡啟動(dòng)實(shí)戰(zhàn)2
本節(jié)帶大家從零開始寫代碼并進(jìn)行調(diào)試,實(shí)現(xiàn)分散加載的SD卡啟動(dòng)。
1.10.8.解決X210開發(fā)板的軟開關(guān)按鍵問題
本節(jié)講解X210開發(fā)板的軟啟動(dòng)開關(guān)電路設(shè)計(jì)原理,通過分析教會(huì)大家如何在原有程序中添加代碼來實(shí)現(xiàn)開發(fā)板置鎖,以解決要不停按下POWER按鍵給開發(fā)板供電的問題。

第三部分、隨堂記錄
1.10.1.主流的外存設(shè)備介紹
內(nèi)存和外存的區(qū)別:一般是把這種RAM(random access memory,隨機(jī)訪問存儲(chǔ)器,特點(diǎn)是任意字節(jié)讀寫,掉電丟失)叫內(nèi)存,把ROM(read only memory,只讀存儲(chǔ)器,類似于Flash SD卡之類的,用來存儲(chǔ)東西,掉電不丟失,不能隨機(jī)地址訪問,只能以塊為單位來訪問)叫外存
1.10.1.1、軟盤、硬盤、光盤、CD、磁帶
(1)存儲(chǔ)原理大部分為磁存儲(chǔ),缺點(diǎn)是讀寫速度、可靠性等。優(yōu)點(diǎn)是技術(shù)成熟、價(jià)格便宜。廣泛使用在桌面電腦中,在嵌入式設(shè)備中幾乎無使用。
(2)現(xiàn)代存儲(chǔ)的發(fā)展方向是Flash存儲(chǔ),閃存技術(shù)是利用電學(xué)原理來存儲(chǔ)1和0,從而制成存儲(chǔ)設(shè)備。所以閃存設(shè)備沒有物理運(yùn)動(dòng)(硬盤中的磁頭),所以讀寫速度可以很快,且無物理損耗。
1.10.1.2、純粹的Flash:NandFlash、NorFlash
(1)這些是最早出現(xiàn)的、最原始的Flash顆粒組成芯片。也就是說NandFlash、NorFlash芯片中只是對(duì)存儲(chǔ)單元做了最基本的讀寫接口,然后要求外部的SoC來提供Flash讀寫的控制器以和Flash進(jìn)行讀寫時(shí)序。
(2)缺陷:1、讀寫接口時(shí)序比較復(fù)雜。2、內(nèi)部無壞塊處理機(jī)制,需要SoC自己來管理Flash的壞塊;3、各家廠家的Flash接口不一致,甚至同一個(gè)廠家的不同型號(hào)、系列的Flash接口都不一致,這就造成產(chǎn)品升級(jí)時(shí)很麻煩。
(3)NandFlash分MLC和SLC兩種。SLC技術(shù)比較早,可靠性高,缺點(diǎn)是容量做不大(或者說容量大了太貴,一般SLC Nand都是512MB以下);MLC技術(shù)比較新,不成熟,可靠性差,優(yōu)點(diǎn)是容量可以做很大很便宜,現(xiàn)在基本都在發(fā)展MLC技術(shù)。
1.10.1.3、SD卡、MMC卡、MicroSD、TF卡
(1)這些卡其實(shí)內(nèi)部就是Flash存儲(chǔ)顆粒,比直接的Nand芯片多了統(tǒng)一的外部封裝和接口。
(2)卡都有統(tǒng)一的標(biāo)準(zhǔn),譬如SD卡都是遵照SD規(guī)范來發(fā)布的。這些規(guī)范規(guī)定了SD卡的讀寫速度、讀寫接口時(shí)序、讀寫命令集、卡大小尺寸、引腳個(gè)數(shù)及定義。這樣做的好處就是不同廠家的SD卡可以通用。
1.10.1.4、iNand、MoviNand、eSSD
(1)電子產(chǎn)品如手機(jī)、相機(jī)等,前些年趨勢是用SD卡/TF卡等擴(kuò)展存儲(chǔ)容量;但是近年來的趨勢是直接內(nèi)置大容量Flash芯片而不是外部擴(kuò)展卡。
(2)外部擴(kuò)展卡時(shí)間長了卡槽可能會(huì)接觸不良導(dǎo)致不可靠。
(3)現(xiàn)在主流的發(fā)展方向是使用iNand、MoviNand、eSSD(還有別的一些名字)來做電子產(chǎn)品的存儲(chǔ)芯片。這些東西的本質(zhì)還是NandFlash,內(nèi)部由Nand的存儲(chǔ)顆粒構(gòu)成,再集成了塊設(shè)備管理單元,綜合了SD卡為代表的各種卡的優(yōu)勢和原始的NandFlash芯片的優(yōu)勢。
(4)優(yōu)勢:1、向SD卡學(xué)習(xí),有統(tǒng)一的接口標(biāo)準(zhǔn)(包括引腳定義、物理封裝、接口時(shí)序)。2、向原始的Nand學(xué)習(xí),以芯片的方式來發(fā)布而不是以卡的方式;3、內(nèi)部內(nèi)置了Flash管理模塊,提供了諸如壞塊管理等功能,讓Nand的管理容易了起來。
1.10.1.5、SSD(固態(tài)硬盤)

1.10.2.SD卡的特點(diǎn)和背景知識(shí)
1.10.2.1、SD卡和MMC卡的關(guān)系
(1)MMC標(biāo)準(zhǔn)比SD標(biāo)準(zhǔn)早,SD標(biāo)準(zhǔn)兼容MMC標(biāo)準(zhǔn)。
(2)MMC卡可以被SD讀卡器讀寫,而SD卡不可以被MMC讀卡器讀寫。
1.10.2.2、SD卡和Nand、Nor等Flash芯片差異
(1)SD卡/MMC卡等卡類有統(tǒng)一的接口標(biāo)準(zhǔn),而Nand芯片沒有統(tǒng)一的標(biāo)準(zhǔn)(各家產(chǎn)品會(huì)有差異)
1.10.2.3、SD卡與MicroSD的區(qū)別
(1)體積大小區(qū)別而已,傳輸與原理完全相同。
1.10.2.4、SD卡與TF卡的區(qū)別
(1)外觀上,SD卡大而TF卡小;用途上,SD卡用于數(shù)碼相機(jī)等而TF卡廣泛用于手機(jī)、GPS等;
(2)時(shí)間上,SD卡1999年推出,TF卡于2004年推出;SD卡由日本松下、東芝與美國SanDisk共同推出,而TF卡由Motorola與SanDisk共同推出。
(3)SD卡有寫保護(hù)而TF卡沒有,TF卡可以通過卡套轉(zhuǎn)成SD卡使用。

1.10.3.SD卡的編程接口
1.10.3.1、SD卡的物理接口
(1)SD卡由9個(gè)針腳與外界進(jìn)行物理連接,這9個(gè)腳中有2個(gè)地,1個(gè)電源,6個(gè)信號(hào)線。
1.10.3.2、SD協(xié)議與SPI協(xié)議
(1)SD卡與SRAM/DDR/SROM之類的東西的不同:SRAM/DDR/SROM之類的存儲(chǔ)芯片是總線式的,只要連接上初始化好之后就可以由SoC直接以地址方式來訪問;但是SD卡不能直接通過接口給地址來訪問,它的訪問需要按照一定的接口協(xié)議(時(shí)序)來訪問。
(2)SD卡雖然只有一種物理接口,但是卻支持兩種讀寫協(xié)議:SD協(xié)議和SPI協(xié)議。

1.10.3.3、SPI協(xié)議特點(diǎn)(低速、接口操作時(shí)序簡單、適合單片機(jī))
(1)SPI協(xié)議是單片機(jī)中廣泛使用的一種通信協(xié)議,并不是為SD卡專門發(fā)明的。
(2)SPI協(xié)議相對(duì)SD協(xié)議來說速度比較低。
(3)SD卡支持SPI協(xié)議,就是為了單片機(jī)方便使用。

1.10.3.4、SD協(xié)議特點(diǎn)(高速、接口時(shí)序復(fù)雜,適合有SDIO接口的SoC)
(1)SD協(xié)議是專門用來和SD卡通信的。
(2)SD協(xié)議要求SoC中有SD控制器,運(yùn)行在高速率下,要求SoC的主頻不能太低。

1.10.3.5、S5PV210的SD/MMC控制器
(1)數(shù)據(jù)手冊(cè)Section8.7,為SD/MMC控制器介紹。
(2)SD卡內(nèi)部除了存儲(chǔ)單元Flash外,還有SD卡管理模塊,我們SoC和SD卡通信時(shí),通過9針引腳以SD協(xié)議/SPI協(xié)議向SD卡管理模塊發(fā)送命令、時(shí)鐘、數(shù)據(jù)等信息,然后從SD卡返回信息給SoC來交互。工作時(shí)每一個(gè)任務(wù)(譬如初始化SD卡、譬如讀一個(gè)塊、譬如寫、譬如擦除····)都需要一定的時(shí)序來完成(所謂時(shí)序就是先向SD卡發(fā)送xx命令,SD卡回xx消息,然后再向SD卡發(fā)送xx命令····)

1.10.4.S5PV210的SD卡啟動(dòng)詳解1
1.10.4.1、SoC為何要支持SD卡啟動(dòng)
(1)一個(gè)普遍性的原則就是:SoC支持的啟動(dòng)方式越多,將來使用時(shí)就越方便,用戶的可選擇性就越大,SoC的適用面就越廣。
(2)SD卡有一些好處:譬如可以在不借用專用燒錄工具(類似Jlink)的情況下對(duì)SD卡進(jìn)行刷機(jī),然后刷機(jī)后的SD卡插入卡槽,SoC既可啟動(dòng);譬如可以用SD卡啟動(dòng)進(jìn)行量產(chǎn)刷機(jī)(量產(chǎn)卡)。像我們X210開發(fā)板,板子貼片好的時(shí)候,內(nèi)部iNand是空的,此時(shí)直接啟動(dòng)無啟動(dòng);板子出廠前官方刷機(jī)時(shí)是把事先做好的量產(chǎn)卡插入SD卡卡槽,然后打到iNand方式啟動(dòng);因?yàn)榇藭r(shí)iNand是空的所以第一啟動(dòng)失敗,會(huì)轉(zhuǎn)而第二啟動(dòng),就從外部SD2通道的SD卡啟動(dòng)了。啟動(dòng)后會(huì)執(zhí)行刷機(jī)操作對(duì)iNand進(jìn)行刷機(jī),刷機(jī)完成后自動(dòng)重啟(這回重啟時(shí)iNand中已經(jīng)有image了,所以可以啟動(dòng)了)。刷機(jī)完成后SD量產(chǎn)卡拔掉,燒機(jī)48小時(shí),無死機(jī)即可裝箱待發(fā)貨。

1.10.4.2、SD卡啟動(dòng)的難點(diǎn)在哪里(SRAM、DDR、SDCard)
(1)SRAM、DDR都是總線式訪問的,SRAM不需初始化既可直接使用而DDR需要初始化后才能使用,但是總之CPU可以直接和SRAM/DRAM打交道;而SD卡需要時(shí)序訪問,CPU不能直接和SD卡打交道;NorFlash讀取時(shí)可以總線式訪問,所以Norflash啟動(dòng)非常簡單,可以直接啟動(dòng),但是SD/NandFlash不行。
(2)以前只有Norflash可以作為啟動(dòng)介質(zhì),臺(tái)式機(jī)筆記本的BIOS就是Norflash做的。后來三星在2440中使用了SteppingStone的技術(shù),讓Nandflash也可以作為啟動(dòng)介質(zhì)。SteppingStone(翻譯為啟動(dòng)基石)技術(shù)就是在SoC內(nèi)部內(nèi)置4KB的SRAM,然后開機(jī)時(shí)SoC根據(jù)OMpin判斷用戶設(shè)置的啟動(dòng)方式,如果是NandFlash啟動(dòng),則SoC的啟動(dòng)部分的硬件直接從外部NandFlash中讀取開頭的4KB到內(nèi)部SRAM作為啟動(dòng)內(nèi)容。
(3)啟動(dòng)基石技術(shù)進(jìn)一步發(fā)展,在6410芯片中得到完善,在210芯片時(shí)已經(jīng)完全成熟。210中有96KB的SRAM,并且有一段iROM代碼作為BL0,BL0再去啟動(dòng)BL1(210中的BL0做的事情在2440中也有,只不過那時(shí)候是硬件自動(dòng)完成的,而且體系沒有210中這么詳細(xì))。

1.10.4.3、S5PV210的啟動(dòng)過程回顧
(1)210啟動(dòng)首先執(zhí)行內(nèi)部的iROM(也就是BL0),BL0會(huì)判斷OMpin來決定從哪個(gè)設(shè)備啟動(dòng),如果啟動(dòng)設(shè)備是SD卡,則BL0會(huì)從SD卡讀取前16KB(不一定是16,反正16是工作的)到SRAM中去啟動(dòng)執(zhí)行(這部分就是BL1,這就是steppingstone技術(shù))
(2)BL1執(zhí)行之后剩下的就是軟件的事情了,SoC就不用再去操心了。

1.10.4.4、SD卡啟動(dòng)流程(bin文件小于16KB時(shí)和大于16KB時(shí))
(1)啟動(dòng)的第一種情況是整個(gè)鏡像大小小于16KB。這時(shí)候相當(dāng)于我的整個(gè)鏡像作為BL1被steppingstone直接硬件加載執(zhí)行了而已。
(2)啟動(dòng)的第二種情況就是整個(gè)鏡像大小大于16KB。(只要大于16KB,哪怕是17KB,或者是700MB都是一樣的)這時(shí)候就要把整個(gè)鏡像分為2部分:第一部分16KB大小,第二部分是剩下的大小。然后第一部分作為BL1啟動(dòng),負(fù)責(zé)去初始化DRAM并且將第二部分加載到DRAM中去執(zhí)行(uboot就是這樣做的)。
1.10.4.5、最重要的但是卻隱含未講的東西
(1)問題:iROM究竟是怎樣讀取SD卡/NandFlash的?
(2)三星在iROM中事先內(nèi)置了一些代碼去初始化外部SD卡/NandFlash,并且內(nèi)置了讀取各種SD卡/NandFlash的代碼在iROM中。BL0執(zhí)行時(shí)就是通過調(diào)用這些device copy function來讀取外部SD卡/NandFlash中的BL1的。

1.10.5.S5PV210的SD卡啟動(dòng)詳解2
1.10.5.1、SoC支持SD卡啟動(dòng)的秘密(iROM代碼)
(1)三星系列SoC支持SD卡/NandFlash啟動(dòng),主要是依靠SteppingStone技術(shù),具體在S5PV210中支持steppingstone技術(shù)的是內(nèi)部的iROM代碼。
1.10.5.2、再看iROM application note:block device copy function

1.10.5.3、扇區(qū)和塊的概念
(1)早期的塊設(shè)備就是軟盤硬盤這類磁存儲(chǔ)設(shè)備,這種設(shè)備的存儲(chǔ)單元不是以字節(jié)為單位,而是以扇區(qū)為單位。磁存儲(chǔ)設(shè)備讀寫的最小單元就是扇區(qū),不能只讀取或?qū)懖糠稚葏^(qū)。這個(gè)限制是磁存儲(chǔ)設(shè)備本身物理方面的原因造成的,也成為了我們編程時(shí)必須遵守的規(guī)律。
(2)一個(gè)扇區(qū)有好多個(gè)字節(jié)(一般是512個(gè)字節(jié))。早期的磁盤扇區(qū)是512字節(jié),實(shí)際上后來的磁盤扇區(qū)可以做的比較大(譬如1024字節(jié),譬如2048字節(jié),譬如4096字節(jié)),但是因?yàn)樵瓉碜钤缡?12字節(jié),很多的軟件(包括操作系統(tǒng)和文件系統(tǒng))已經(jīng)默認(rèn)了512這個(gè)數(shù)字,因此后來的硬件雖然物理上可能支持更大的扇區(qū),但是實(shí)際上一般還是兼容512字節(jié)扇區(qū)這種操作方法。
(3)一個(gè)扇區(qū)可以看成是一個(gè)塊block(塊的概念就是:不是一個(gè)字節(jié),是多個(gè)字節(jié)組成一個(gè)共同的操作單元塊),所以就把這一類的設(shè)備稱為塊設(shè)備。常見的塊設(shè)備有:磁存儲(chǔ)設(shè)備硬盤、軟盤、DVD和Flash設(shè)備(U盤、SSD、SD卡、NandFlash、Norflash、eMMC、iNand)
(4)linux里有個(gè)mtd驅(qū)動(dòng),就是用來管理這類塊設(shè)備的。
(5)磁盤和Flash以塊為單位來讀寫,就決定了我們啟動(dòng)時(shí)device copy function只能以整塊為單位來讀取SD卡。

1.10.5.4、用函數(shù)指針方式調(diào)用device copy function
(1)第一種方法:宏定義方式來調(diào)用。好處是簡單方便,壞處是編譯器不能幫我們做參數(shù)的靜態(tài)類型檢查。
(2)第二種方法:用函數(shù)指針方式來調(diào)用。

1.10.6.S5PV210的SD卡啟動(dòng)實(shí)戰(zhàn)1
1.10.6.1、任務(wù):大于16KB的bin文件使用SD卡啟動(dòng)
(1)總體思路:將我們的代碼分為2部分:第一部分BL1小于等于16KB,第二部分為任意大小,iROM代碼執(zhí)行完成后從SD卡啟動(dòng)會(huì)自動(dòng)讀取BL1到SRAM中執(zhí)行;BL1執(zhí)行時(shí)負(fù)責(zé)初始化DDR,然后手動(dòng)將BL2從SD卡copy到DDR中正確位置,然后BL1遠(yuǎn)跳轉(zhuǎn)到BL2中執(zhí)行BL2.
(2)細(xì)節(jié)1:程序怎么安排?程序整個(gè)分為2個(gè)文件夾BL1和BL2,各自管理各自的項(xiàng)目。
(3)細(xì)節(jié)2:BL1中要完成:關(guān)看門狗、設(shè)置棧、開iCache、初始化DDR、從SD卡復(fù)制BL2到DDR中特定位置,跳轉(zhuǎn)執(zhí)行BL2.
(4)細(xì)節(jié)3:BL1在SD卡中必須從Block1開始(Block0不能用,這個(gè)是三星官方規(guī)定的),長度為16KB內(nèi),我們就定為16KB(也就是32個(gè)block);BL1理論上可以從33扇區(qū)開始,但是實(shí)際上為了安全都會(huì)留一些空扇區(qū)作為隔離,譬如可以從45扇區(qū)開始,長度由自己定(實(shí)際根據(jù)自己的BL2大小來分配長度,我們實(shí)驗(yàn)時(shí)BL2非常小,因此我們定義BL2長度為16KB,也就是32扇區(qū))。
(5)細(xì)節(jié)4:DDR初始化好之后,整個(gè)DDR都可以使用了,這時(shí)在其中選擇一段長度足夠BL2的DDR空間即可。我們選0x23E00000(因?yàn)槲覀傿L1中只初始化了DDR1,地址空間范圍是0x20000000~0x2FFFFFFF)。

1.10.6.2、代碼劃分為2部分(BL1和BL2)

1.10.6.3、BL1中的重定位

1.10.6.4、BL2遠(yuǎn)跳轉(zhuǎn)
(1)因?yàn)槲覀傿L1和BL2其實(shí)是2個(gè)獨(dú)立的程序,鏈接時(shí)也是獨(dú)立分開鏈接的,所以不能像以前一樣使用ldr pc, =main這種方式來通過鏈接地址實(shí)現(xiàn)元跳轉(zhuǎn)到BL2.
(2)我們的解決方案是使用地址進(jìn)行強(qiáng)制跳轉(zhuǎn)。因?yàn)槲覀冎繠L2在內(nèi)存地址0x23E00000處,所以直接去執(zhí)行這個(gè)地址即可。

1.10.7.S5PV210的SD卡啟動(dòng)實(shí)戰(zhàn)2
1.10.7.1、燒錄啟動(dòng)實(shí)驗(yàn)
1.10.7.2、代碼分為2部分啟動(dòng)(上一節(jié)講的)的缺陷
(1)代碼分為2部分,這種技術(shù)叫分散加載。這種分散加載的方法可以解決問題,但是比較麻煩。
(2)分散加載的缺陷:第一,代碼完全分2部分,完全獨(dú)立,代碼編寫和組織上麻煩;第二,無法讓工程項(xiàng)目兼容SD卡啟動(dòng)和Nand啟動(dòng)、NorFlash啟動(dòng)等各種啟動(dòng)方式。
1.10.7.3、uboot中的做法
(1)第二種思路:程序代碼仍然包括BL1和BL2兩部分,但是組織形式上不分為2部分而是作為一個(gè)整體來組織。它的實(shí)現(xiàn)方式是:iROM啟動(dòng)然后從SD卡的扇區(qū)1開始讀取16KB的BL1然后去執(zhí)行BL1,BL1負(fù)責(zé)初始化DDR,然后從SD卡中讀取整個(gè)程序(BL1+BL2)到DDR中,然后從DDR中執(zhí)行(利用ldr pc, =main這種方式以遠(yuǎn)跳轉(zhuǎn)從SRAM中運(yùn)行的BL1跳轉(zhuǎn)到DDR中運(yùn)行的BL2)。

1.10.7.4、再來分析uboot的SD卡啟動(dòng)細(xì)節(jié)
(1)uboot編譯好之后有200多KB,超出了16KB。uboot的組織方式就是前面16KB為BL1,剩下的部分為BL2.
(2)uboot在燒錄到SD卡的時(shí)候,先截取uboot.bin的前16KB(實(shí)際腳本截取的是8KB)燒錄到SD卡的block1~bolck32;然后將整個(gè)uboot燒錄到SD卡的某個(gè)扇區(qū)中(譬如49扇區(qū))
(3)實(shí)際uboot從SD卡啟動(dòng)時(shí)是這樣的:iROM先執(zhí)行,根據(jù)OMpin判斷出啟動(dòng)設(shè)備是SD卡,然后從S卡的block1開始讀取16KB(8KB)到SRAM中執(zhí)行BL1,BL1執(zhí)行時(shí)負(fù)責(zé)初始化DDR,并且從SD卡的49扇區(qū)開始復(fù)制整個(gè)uboot到DDR中指定位置(0x23E00000)去備用;然后BL1繼續(xù)執(zhí)行直到ldr pc, =main時(shí)BL1跳轉(zhuǎn)到DDR上的BL2中接著執(zhí)行uboot的第二階段。

總結(jié):uboot中的這種啟動(dòng)方式比上節(jié)講的分散加載的好處在于:能夠兼容各種啟動(dòng)方式。

1.10.8.解決X210開發(fā)板的軟開關(guān)按鍵問題
1.10.8.1、X210開發(fā)板的軟啟動(dòng)電路詳解
(1)210供電需要的電壓比較穩(wěn)定,而外部適配器的輸出電壓不一定那么穩(wěn)定,因此板載了一個(gè)文穩(wěn)壓器件MP1482.這個(gè)穩(wěn)壓芯片的作用就是外部適配器電壓在一定范圍內(nèi)變化時(shí)穩(wěn)壓芯片的輸出電壓都是5V。
(2)MP1482芯片有一個(gè)EN(Enable)引腳,這個(gè)引腳可以讓穩(wěn)壓芯片輸出或關(guān)閉輸出。EN為高電平時(shí)有輸出電壓,EN引腳為低電平時(shí)穩(wěn)壓芯片無輸出。
(3)兩個(gè)因素可以影響EN引腳的電平:第一個(gè)是POWER按鍵(SW1),POWER按鍵按下時(shí)EN為高電平,POWER按鍵彈起時(shí)EN為低電平;第二個(gè)是POWER_LOCK(EINT0)引腳,這個(gè)引腳為POWER_LOCK模式下高電平,則EN為高;若這個(gè)引腳為EINT0模式或者為POWER_LOCK模式但輸出為低電平,則EN為低。
(4)圖中還有EINT1引腳,這個(gè)引腳的作用是用來做中斷,提供給CPU用來喚醒的。

1.10.8.2、為什么要軟啟動(dòng)
(1)一般的電路設(shè)計(jì)都是用撥碼開關(guān)來做電源開關(guān)的(打到一側(cè)則接通,打到另一側(cè)則關(guān)閉)。這種方式的優(yōu)點(diǎn)是設(shè)計(jì)簡單,缺點(diǎn)是電路太簡單,整個(gè)主板要么有電要么沒電無法做休眠模式、低功耗模式等。
(2)軟啟動(dòng)電路是比較接近于實(shí)際產(chǎn)品的,其他開發(fā)板的硬開關(guān)其實(shí)是簡化版的,和實(shí)際產(chǎn)品還有差異。

1.10.8.3、開發(fā)板供電置鎖原理和分析
(1)軟開關(guān)在設(shè)計(jì)時(shí)有一個(gè)置鎖電路,用EINT0(也就是GPH0_2)引腳來控制的。
(2)EINT0這個(gè)引腳是有復(fù)用設(shè)計(jì)(兩個(gè)完全不相干的功能擠在同一個(gè)引腳上,同時(shí)我們只能讓這個(gè)引腳用于其中一種功能,這就叫復(fù)用)的,一個(gè)是GPIO(也就是GPH0_2引腳)、一個(gè)是PS_HOLD_CONTROL。(注意:EINT0功能算是GPIO下的一個(gè)子功能)
(3)PS_HOLD在Section2.4 Power Management章節(jié)下的4.10.5.8節(jié)下。
(4)PS_HOLD_CONTROL寄存器(0xE010E81C),共有3個(gè)位有用。
bit0, 0表示這個(gè)引腳為GPIO功能,1表示這個(gè)引腳為PS_HOLD功能
bit9,0表示這個(gè)引腳方向?yàn)檩斎?#xff0c;1表示這個(gè)引腳方向?yàn)檩敵?br /> bit8,0表示這個(gè)引腳輸出為低電平,1表示輸出為高電平。
分析:我們要使用軟啟動(dòng)置鎖,則需要將bit0、8、9都置為1即可。

1.10.8.4、寫代碼+實(shí)驗(yàn)驗(yàn)證
(1)要想讓開發(fā)板和普通的開發(fā)板一樣,一按下按鍵程序運(yùn)行后即可松手不會(huì)斷電,則只要在程序的開頭部分添加代碼去置鎖開關(guān)板即可。
(2)置鎖代碼的方法是:給PS_HOLD_CONTROL寄存器的bit0、8、9均寫入1即可。
(3)注意:此時(shí)開發(fā)板已經(jīng)置鎖,POWER按鍵已經(jīng)失效,關(guān)機(jī)時(shí)需要按下復(fù)位按鍵。

總結(jié)

以上是生活随笔為你收集整理的arm裸机块设备的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。