在這篇文章的基礎上,本文詳細介紹u-boot-2011.06的NorFlash啟動移植方法。
相關閱讀:
U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm
U-Boot-2011.06啟動流程分析 http://www.linuxidc.com/Linux/2011-07/39310.htm
u-boot-2011.06在基於s3c2440開發板的移植之編譯配置 http://www.linuxidc.com/Linux/2011-10/45455.htm
u-boot-2011.06在基於s3c2440開發板的移植之NorFlash啟動 http://www.linuxidc.com/Linux/2011-10/45456.htm
u-boot-2011.06在基於S3C2440開發板的移植之解決raise: Signal # 8 caught http://www.linuxidc.com/Linux/2011-10/454554.htm
u-boot-2011.06在基於s3c2440開發板的移植之支持NandFlash讀寫 http://www.linuxidc.com/Linux/2011-10/45457.htm
u-boot-2011.06在基於s3c2440開發板的移植之硬件ECC http://www.linuxidc.com/Linux/2011-10/454558.htm
1.修改宏定義
打開include/configs/zhaocj2440.h文件
第38行“#define CONFIG_S3C2410 /*specifically a SAMSUNG S3C2410SoC */”改為:
38:#define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2440 SoC */
目的是告之系統本開發板使用的是S3C2440處理器。
第131行“#define CONFIG_SYS_PROMPT "SMDK2410 # "”改為:
131:#define CONFIG_SYS_PROMPT "ZHAOCJ2440# "
目的是使命令行提示符顯示為“ZHAOCJ2440# ”。
第185行“#define CONFIG_FLASH_CFI_LEGACY”改為:
185:#define CONFIG_SYS_CFI_FLASH_CONFIG_REGS {0xFFFF}
因為在u-boot-2011.06中,使用的是CFI的NorFlash接口,所以不需要定義CONFIG_FLASH_CFI_LEGACY,而是要定義CONFIG_SYS_CFI_FLASH_CONFIG_REGS。
第191行“#define CONFIG_SYS_MAX_FLASH_SECT (19)”改為:
191:#define CONFIG_SYS_MAX_FLASH_SECT (35)
因為本開發板使用的NorFlash是EN29LV160AB,它有35個扇區。
第212行“#define CONFIG_NAND_S3C2410”改為:
212:#define CONFIG_NAND_S3C2440
第213行“#define CONFIG_SYS_S3C2410_NAND_HWECC”改為:
213:#define CONFIG_SYS_S3C2440_NAND_HWECC
2.修改系統時鐘頻率
打開arch/arm/cpu/arm920t/start.s文件
第164行“# if defined(CONFIG_S3C2410)”改為:
164:# if defined(CONFIG_S3C2440)
第165行“ldr r1, =0x3ff”改為:
165:ldr r1, =0x7fff
目的是屏蔽所有子中斷。
第173行“mov r1, #3”改為:
173:mov r1, #5
目的是使FCLK:HCLK:PCLK= 1:4:8。
打開board/samsung/zhaocj2440/zhaocj2440.c文件
第42行至第44行的內容改為:
42:#define M_MDIV 92
43:#define M_PDIV 1
44:#define M_SDIV 1
本開發板的輸入晶振頻率為12MHz,通過上面的修改,則MPLL頻率為400MHz。
第54行至第56行的內容改為:
54:#define U_M_MDIV 56
55:#define U_M_PDIV 2
56:#define U_M_SDIV 2
通過上面的修改,則UPLL頻率為48MHz。
3.修改內存SDRAM時序
打開board/samsung/zhaocj2440/lowlevel_init.s文件
第54行至第126行的內容改為:
54:#define B1_BWSCON (DW16)
55:#define B2_BWSCON (DW16)
56:#define B3_BWSCON (DW16)
57:#define B4_BWSCON (DW32)
58:#define B5_BWSCON (DW16)
59:#define B6_BWSCON (DW32)
60:#define B7_BWSCON (DW32)
61:
62:/* BANK0CON */
63:#define B0_Tacs 0x3
64:#define B0_Tcos 0x3
65:#define B0_Tacc 0x7
66:#define B0_Tcoh 0x3
67:#define B0_Tah 0x3
68:#define B0_Tacp 0x1
69:#define B0_PMC 0x0
70:
71:/* BANK1CON */
72:#define B1_Tacs 0x1
73:#define B1_Tcos 0x1
74:#define B1_Tacc 0x6
75:#define B1_Tcoh 0x1
76:#define B1_Tah 0x1
77:#define B1_Tacp 0x0
78:#define B1_PMC 0x0
79:
80:#define B2_Tacs 0x1
81:#define B2_Tcos 0x1
82:#define B2_Tacc 0x6
83:#define B2_Tcoh 0x1
84:#define B2_Tah 0x1
85:#define B2_Tacp 0x0
86:#define B2_PMC 0x0
87:
88:#define B3_Tacs 0x1
89:#define B3_Tcos 0x1
90:#define B3_Tacc 0x6
91:#define B3_Tcoh 0x1
92:#define B3_Tah 0x1
93:#define B3_Tacp 0x0
94:#define B3_PMC 0x0
95:
96:#define B4_Tacs 0x1
97:#define B4_Tcos 0x1
98:#define B4_Tacc 0x6
99:#define B4_Tcoh 0x1
100:#define B4_Tah 0x1
101:#define B4_Tacp 0x0
102:#define B4_PMC 0x0
103:
104:#define B5_Tacs 0x1
105:#define B5_Tcos 0x1
106:#define B5_Tacc 0x6
107:#define B5_Tcoh 0x1
108:#define B5_Tah 0x1
109:#define B5_Tacp 0x0
110:#define B5_PMC 0x0
111:
112:#define B6_MT 0x3
113:#define B6_Trcd 0x1
114:#define B6_SCAN 0x1
115:
116:#define B7_MT 0x3
117:#define B7_Trcd 0x1
118:#define B7_SCAN 0x1
119:
120:/* REFRESH parameter */
121:#define REFEN 0x1
122:#define TREFMD 0x0
123:#define Trp 0x1
124:#define Trc 0x1
125:#define Tchr 0x2
126:#define REFCNT 1268
4.修改NandFlash相關內容。
盡管本次移植沒有涉及到NandFlash,但為了能夠編譯成功,必須修改下面有關NandFlash的內容。
進入u-boot-2011.06目錄,執行下列命令:
cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c
打開drivers/mtd/nand/s3c2440_nand.c文件,把該文件內的所有有關“2410”的地方一律改為“2440”。
再打開drivers/mtd/nand/Makefile文件
第48行“COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o”改為
48:COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o
編譯u-boot,把編譯生成的新的u-boot.bin燒寫到NorFlash中。開發板上電啟動後,則在超級終端(或類似的軟件)中顯示的結果為:
U-Boot 2011.06 (Jul 30 2011 - 23:40:44)
DRAM: 64 MiB
Flash: 2 MiB
NAND: raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
raise: Signal # 8 caught
No NAND device found!!!
0 MiB
*** Warning - bad CRC, using defaultenvironment
In: serial
Out: serial
Err: serial
Net: CS8900-0
ZHAOCJ2440 #
從上述顯示的內容可以看出本開發板的一些基本的信息,如DRAM為64M,NorFlash為2M,由於我沒有設置NandFlash,因此系統沒有檢測到NandFlash,命令提示符也已經修改為“ZHAOCJ2440 # ”。
在提示符下輸入flinfo,則會把NorFlash的更詳細的信息顯示出來:
Bank # 1: CFI conformant flash (16 x16) Size: 2 MB in 35 Sectors
AMDStandard command set, Manufacturer ID: 0x1C,Device ID: 0x2249
Erase timeout: 16384 ms, write timeout: 1 ms
Sector Start Addresses:
00000000 RO 00004000 RO 00006000 RO 00008000 RO 00010000 RO
00020000 RO 00030000 RO 00040000 RO 00050000 RO 00060000 RO
00070000 RO 00080000 00090000 000A0000 000B0000
000C0000 000D0000 000E0000 000F0000 00100000
00110000 00120000 00130000 00140000 00150000
00160000 00170000 00180000 00190000 001A0000
001B0000 001C0000 001D0000 001E0000 001F0000