(一)s5pv210啟動方式
序:
後悔自己當初買了友善的smart210,它的資料做的很不好,就像學校裡頭的博創實驗箱,箱子可以可是做的資料卻狗屁不是。如果之前買的是韋東山老師的jz2440估計現在學起來不用那麼苦逼,我也看了很多人的部落格關於smart210的技術說明,但我發現它們都是直接在友善的裸機實驗的pdf中"ctrl+c" 然後"ctrl+v",這樣就成為了自己的部落格技術文章。雖說這樣做沒有錯,自己沒有總結過的知識點學起來能紮實?我買了苗鳳娟的arm cortex a8的書,書的小錯誤倒不說,我在糾結DDR2 SDRAM的配置時,您也不能拿個norflash的配置程式碼來忽悠我啊苗大人(對作者的尊稱),網上下載配套的光碟程式碼卻是sdram的初始化程式碼,在書裡就是隨便忽悠,這樣真的好嗎?因此我從arm的裸機開始,把smart210的裸機驅動玩一遍。從最開始的點燈到最後面的LCD液晶驅動以及DM9000的移植,最後參照韋東山老師教的,自己嘗試移植uboot,這就是我的裸機開發部分的學習計劃。這裡做簡單的說明,smart210使用的是三星公司是s5pv210(cortex A8)晶片,友善做的superboot不開源,這也是我對友善不是很"友善"的原因。
晶片簡介:
s5pv210微控制器是三星公司推出的一款基於cortex a8核的微控制器(和s5pc100基本相同),s5pc100主要用於手機當中,它的體積比較小且功耗要求都比較低因此各方面做得都很精細,而s5pv210主要用於平板電腦中,它的效能和功耗都要比s85pc100高一點(其實也強不到多少)。s5pv210的內部ram為96K、rom為64K,一共有237個gpio埠(一共15組,QAQ),帶有nor、nand、sdram介面,在中斷方面和arm7的基本相同,且它有3組中斷源,4個串列埠,4個LCD液晶介面(友善只引出2個),還有camera(攝像頭)介面,系統最高頻率是1GHz。此款微控制器對多媒體的支援比較好,在音訊資料傳輸上有獨立的DMA,內部帶有jpeg檔案的編解碼,支援視訊檔案的h.264的硬體編解碼等。
啟動方式:
一般的,我們通過 jtag介面給我們的arm微控制器燒寫程式。雖然我們的s5pv210微控制器也有jtag介面,友善在核心板上也引出這幾個腳(就幾個點點引了跟沒引一個鳥樣),但因s5pv210的啟動方式多樣且容易上手,因此在對s5pv210操作時候我們一般不用jtag。s5pv210的啟動方式有6種,我們最常用的啟動方式是nand、nor、sd(卡)方式進行啟動。在晶片剛上電的時候,會自動執行內部irom的程式碼(我們稱之為BL0 =》boot loader 0),它主要是關看門狗、初始化cache、設定堆疊指標以及根據我們選擇的引導方式,從特定的裝置中將它的前16K資料拷貝到sram中,然後再sram中執行程式碼(我們稱之為BL1),BL1最主要就是用於初始化板子,以及載入BL2的程式碼(boot lodaer 的第2階段),BL2主要是負責SDRAM的初始化,將核心拷貝到SDRAM中,引導核心。首先我先上一個圖,這個圖就是內部iROM程式碼所做的事情,如下圖所示:
它的執行步驟也說的很清楚了,就是關看門狗,初始化cache、設定堆疊指標、初始化內部的塊裝置拷貝函式(用於快速從nand、nor、sd卡中把資料拷貝到ram中)、將引導裝置的前16K拷貝到sram中、確認引導裝置中的程式碼是否有效(檢查校驗位元組)等,如果校驗成功則跳到剛才拷貝的16K的部分開始執行。現在我們再次回顧它的啟動過程:IROM根據晶片的boot引腳知道選擇了哪個裝置作為引導,然後拷貝對應裝置的前16K內容到sram中並對其進行校驗,如果校驗成功則執行SRAM中的程式碼(BL1),這部分程式碼主要是初始化板子的各個部件、時鐘等,然後載入BL2(用於初始化sdram、引導核心等),BL2主要的作用就是將核心拷貝到sdram中然後引導核心的執行。具體的我們可以看下面的這個圖:
我們可以從流程圖知道,晶片上電時候執行其內部的初始化程式碼,然後根據OM引腳(boot 選擇引腳)決定從哪個裝置開始引導(我們稱為1st boot,第一次引導),如果在第一次引導中,指定設定中的程式碼無效則這次的引導會不成功,這時候會對用於第二次引導的裝置進行輪詢校驗(也就是圖中左邊的Go to 2nd boot)。對於secure boot我們一般不關心,它主要是與晶片加密相關的,我們既不做飛機大炮,又不做衛星導彈,這個功能用不到,且一般都配置它為非secure boot(預設就是非secure boot),然後就順利跑到了BL1部分,BL1主要是初始化板子與載入BL2的程式碼,然後執行BL2的程式碼。BL2主要是初始化SDRAM然後引導核心。這就是整個boot的流程。對於之前沒講的go to 2nd部分,我現在補充,但是還要先上圖:
在第一個引導失敗後,會進行第二次引導,例如sd卡有兩個通道,通道0用於1st boot,通道2用於 2nd boot(s5pv210有多個SD卡控制介面,也就是所謂的通道),如果第二次引導都失敗的話,就會嘗試通過串列埠和USB進行引導,如果還是引導失敗的話則終止引導過程(估計是板子要“假死”了)QAQ。這就是s5pv210的boot基本情況。對於使用MMC裝置(SD卡)啟動的的,要在特定位置設定MMC卡的資料資訊,主要是三個全域性變數,如下表所示(一般來說不設定也沒有多大問題,不用rom內部的函式就是了):
初始化後的板子:
板子在經過irom的初始化後,主頻情況如下所示:
今天只要對s5pv210的啟動方式有所瞭解即可,到了後面會對這份手冊進行詳細的補充,手冊:S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf