判斷uboot啟動方式:norflash還是nandflash
阿新 • • 發佈:2019-02-09
在XC2440開發板上做uboot從nandflash啟動時,需要檢測硬體啟動方式,啟動方式是由硬體OM管腳決定的,軟體無法檢測硬體電平狀態,但可以根據CPU的啟動特性來檢測。
通過深入研究2440的啟動方式,總結了幾點:
如果將S3C2440配置成從NANDFLASH啟動(將開發板的啟動開關拔到nand端,此時OM0管腳拉低)S3C2440的Nand控制器會自動把Nandflash中的前4K程式碼資料搬到內部SRAM中(地址為0x40000000),同時還把這塊SRAM地址對映到了0x00000000地址。CPU從0x00000000位置開始執行程式。
如果將S3C2440配置成從Norflash啟動(將開發的啟動開關拔到nor端,此時OM0管腳拉高),0x00000000就是norflash實際的起始地址,norflash中的程式就從這裡開始執行,不涉及到資料拷貝和地址對映
看S3C2440的地址對映圖:
根據前面的啟動過程分析,nand啟動時,地址0x00000000為SRAM對映的地址;nor啟動時,地址0x00000000為norflash的實際起始地址。向norflash中寫資料需要特定的命令時序,而向記憶體中寫資料可以直接向記憶體地址賦值。
根據這兩個特性,我們可以這樣檢測,程式碼如下:
而在nand啟動時,0地址是記憶體的地址對映,可以用直接賦值的方法向記憶體中寫入資料,接著從0地址讀回來的資料變為0x12345678,和之前寫入的資料相等,此時就為nand啟動,在操作完後,要將資料還原 *pdw = dwVal
-
int check_flashboot_mode(void)
-
{
-
volatile unsigned int *pdw = (volatile
unsigned int *)0;
-
unsigned int dwVal;
-
dwVal = *pdw;
-
*
-
if (*pdw != 0x12345678)
-
{
-
return 1;
-
}
-
else
-
{
-
*pdw = dwVal;
-
return 0;
-
}
- }