關於ARM啟動流程的分析(NandFlash Or NorFlash)
阿新 • • 發佈:2019-01-23
學習了S3C2440的啟動流程,如何讓bootLoader成功載入。並且找到了一篇講的非常好的部落格,試著結合著自己的理解總結一下,以備以後的複習。
第一部分關於內部的SRAM:
部分ARM9的CPU內部都整合有一個SRAM,SRAM是英文Static RAM的縮寫,它是一種具有靜止存取功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資料。這樣他不需要初始化就能夠直接使用。這與我們在外部擴充套件的大容量的SDRAM是不一樣的,外部大容量的SDRAM是需要初始化後才能使用的
在s3c2440這顆CPU上這個SRAM大小為4KB,datasheet裡把它叫做Stepping Stone,江湖人稱“起步石”。
第二部分關於Norflash與Nandflash的異同點
Norflash:
Norflash像記憶體一樣是直接掛在系統總線上的,這樣有足夠多的地址線使得CPU能夠定址到每一個儲存單元上去,這也意味著CPU能夠直接通過匯流排訪問Norflash上儲存的內容,同時他還支援XIP(即片上執行,不用將程式碼搬到記憶體中,直接在Norflash上就能執行)。
Nandflash:
而Nandflash它並不是直接掛載系統總線上,而是通過Nandflash控制器(這個一般整合在CPU內部)來完成讀寫操作的。如果我們把Norflash的那種定址方式叫直接定址的話(不是彙編裡的那個直接定址,這裡指CPU能夠直接通過地址線訪問儲存器的儲存單元),那麼這裡的Nandflash就是間接定址(這裡需要Nandflash控制器來定址)。所以我們在使用Nandflash之前,一定要初始化Nandflash控制器。
第三部分關於
為什麼系統能夠從Norflash直接啟動,而不能直接從Nandflash啟動???
這是因為,ARM在CPU復位時,CPU預設會到0x0000 0000地址處去取指令,而如果我們是從Norflash啟動的話(一般Norflash會掛到Bank0,nGCS0上),s3c2440
CPU就會把Norflash的空間掛接到0x0000 0000這段記憶體空間上。這時CPU就能夠直接從Norflash上取指令執行,啟動了。而如果是Nandflash, 因為Nandflash他不能直接掛到系統總線上,並且他的讀寫,擦除操作必須依賴Nandflash控制器,這也就意味著Nandflash的儲存空間永遠不能對映到0x0000 0000這個地址上去。另外,Nandflash的讀寫操作也不是這樣直接定址的
第四部分關於
而如果這些CPU要從Nandflash上啟動,那該怎麼辦呢?
這就要用到我之前提到的CPU的內部SRAM了。
在S3C2440的datasheet裡有提到,如果我們配置從Nandflash啟動的話,那麼CPU會自動將內部SRAM的地址對映到0x0000 0000這個地址空間上了,而如果不是從Nandflash啟動,那麼掛載Bank0(nGCS0)上的裝置就會被對映到0x0000
0000地址空間上,如我們之前提到的Norflash。
總結: