6410硬件啓動流程,注意最後一句話,irom啓動方式有SD卡啓動

主要講一下硬件啓動的流程以及DDR是在什麼時候初始化的。


S3C6410支持Nand/Nor/OneNAND/Modem/iROM(內部ROM)幾種啓動方式,OneNand用的比較少,就不說了。這裏比較新的就是iROM啓動,當OM[1:4]全部設置爲1時就爲iRom啓動方式(OM[0]腳用於對時鐘源的選擇控制),此時當板子上電後,會首先執行iRom中的代碼,iRom中的代碼會根據GPN[15:13]的管腳來判斷從哪個存儲設備中取4KB的啓動代碼到SteppingStone中運行,這段代碼被稱爲Bootloader1 BL1,其實就是異常向量表和_start代碼,包含初始化DDR的代碼,因爲SteppingStone是SRAM,不需要初始化就可以使用,因此當BL1執行了DDR初試化的代碼後,再將GPN[15:13]的管腳指定的存儲設備中的所有的bootload代碼拷貝到DDR中,包括之前已經拷貝的BL1,這樣就順利完成了啓動。也就說iROM中並沒有初始化DDR的代碼,這很容易可以想到:DDR的初始化方式各種各樣,iROM沒有那麼多的代碼空間去實現所有型號的DDR的初始化。


假如不是使用iROM啓動,也就是使用Nand/Nor/Modem啓動(注意,不支持SD啓動),那麼啓動的流程就會有點小變化了,我們以NandFlash爲例:


當芯片上電後,並不是執行iRom的代碼,而是NandFlash控制器會自動使用DMA將自己的bootloader區域的前4KB代碼搬運到iRAM(內部SRAM),注意,這步操作是硬件執行的,並不是由C代碼驅動的,當然前提是芯片內部的NandFlash控制器支持NandFlash啓動這個功能,很明顯S3C6410的NandFlash控制器是支持NandFlash啓動功能的。這裏再補充一點:很多做軟件的人平時習慣了C代碼驅動外設的方式,就會覺得很奇怪:硬件怎麼能自動使用DMAC搬運數據呢,其實這很簡單,在現代的SOC設計中,任何控制器均是由Verilog語言編寫的,然後整合到ARM芯片中,再進行綜合和佈局佈線,到最後進行後端處理,比如畫版圖、流片,那麼使用Verilog語言編寫一個從NandFlash芯片中取數據的硬件語言代碼應該還是蠻簡單的吧。


我們言歸正傳,如果nandflash中沒有bootloader程序,那麼此時芯片肯定無法啓動,DDR也是沒有初始化的。同樣使用Nor啓動也是一樣。執行iRAM中的代碼跟執行BL1中的代碼是一樣的,後面的流程也是一樣的了。


這樣應該就很清楚DDR是什麼時候初始化的了吧。


QT6410開發板,設計板子的人已經將GPN【15:13】焊死,接了GND,所以當IROM啓動時候只支持SD/MMC(CH0)。
發佈了13 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章