2009年12月16日 星期三

ARM的Flash啟動流程與機制(s3c2440)

Nand 與 Nor 不同處

Nor支援XIP(eXcute In Place)指令可以在Flash內執行,有點像是Memory的感覺。

Nand沒有Nor的特性,就嵌入式而言如果要執行Nand裡頭的指令必須載入Ram裡頭方可執行,Nand就好比一般個人電腦裡的硬碟。

另外Google到的參考文章解決我的困惑,bootloader有分網路啟動、Flash啟動,其中Flash的啟動中,Nand Flash有著很大的不同處。

NANDFlash需要与一个叫“Steppingstone”的内部SRAM配合工作(在所有的内存映射图上它叫BootSRAM),它是一个处理器内部自带的SRAM缓冲器,它把NANDFlash上4Kbyte启动代码加载,然后执行不信的话请看看英文原解S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash bootloader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4KBytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstonewill be executed而这4K的SRAM buffer called ‘Steppingstone’会映射到0x00000000,在bootloader把主程序移到SDRAM以后他就可以被用到其他用途。

Steppingstone(SRAM, 並且映射至nGSC0)其實是內部就做好的,在開啟開發版(Reset)後會自動抓取nand前的4KB載入至Steppingstone(映射至nGSC0,0x00000000),CPU從0x00000000執行(其實是Steppingstone的SRAM),前4KB並不是指整個bootloader,而是只應射到steppingstone的內容必須小於4KB,之後,就是執行bootloader裡的內容,像是中斷、設置cpu速度與時鐘頻率、SDRAM初始化、LED初始化、複製bootloader‥等,然後是載入核心、檔案系統。


自启动模式的执行步骤如下:
(1)完成复位
(2)如果自动启动模式使能,NAND Flash存储器的前4KB自动复制到Steppingstone内部缓冲器;
(3)Steppingstone映射到nGCS0;
(4)CPU在Steppingstone的4KB内部缓冲器中开始执行启动代码。
注意:在自动启动模式下,不进行ECC检测。因此,应确保NAND Flash的前4KB不能有位错误(一般NAND Flash厂家都能确保)。


Steppingstone有點像是戰爭裡頭的第一槍,沒了這第一槍戰爭是打不起來的。

參考http://www.arm79.com/simple/?t347.html
      http://blog.sina.com.cn/s/blog_5128d4fc0100923l.html
      http://hi.baidu.com/zengzhaonong/blog/item/4b901ee9b5ef343cb90e2d16.html
      http://www.diybl.com/course/6_system/linux/Linuxjs/2008930/147032.html
      http://blog.ednchina.com/tengjingshu/245192/message.aspx