|
文件: |
u-boot_sat.rar |
大小: |
12KB |
下载: |
下载 | |
版本:u-boot-1.1.6
开发板有两种启动模式:
(1) 片内启动, loader.bin + u-boot.bin.
(2) 利用片外启动,把boot.bin 和 u-boot.bin.gz 固化在相应的位置,即实现压缩式的u-boot启动。
因为boot 在初始化后,会把 u-boot.bin解压到 sdram 中,所以上述两种方式下,本质上u-boot的生命
周期都在sdram当中。如果采用非压缩方式,直接把u-boot.bin放在0x10000000处,那么启动后,
如果不定义 #define CONFIG_SKIP_LOWLEVEL_INIT 1 , lowlevel_init会被调用,再次初始化sdram,这
样启动显然死掉。
压缩方式:在 include/configs/at91rm9200dk.h 中定义 #define CONFIG_SKIP_LOWLEVEL_INIT 1
别一种方法就是修正lowlevel_init的bug,使 u-boot启动sdram 和flash 无关。
在 cpu/arm920t/satrt.S 中,增加编绎条件:
mov ip, lr
#if defined(CONFIG_AT91RM9200DK)
adr r0, _start
ldr r1, _TEXT_BASE
cmp r0, r1
beq 1f
#endif
bl lowlevel_init
1:
mov lr, ip
mov pc, lr
这样,首先分析,如果在sdram中,那么_start 和 _TEXT_BASE 会相同,这样就不进行 lowlevel_init;
反之,则进行 lowlevel_init.
注意:要对SMC片选寄存器的一些参数进行修改
在board/at91rm9200dk/at91rm9200dk.c 中添加:
#define AT91C_SMC2_NWS ((unsigned int) 0x7F << 0) // (SMC2) Number of Wait States
#define AT91C_SMC2_WSEN ((unsigned int) 0x1 << 7) // (SMC2) Wait State Enable
#define AT91C_SMC2_TDF ((unsigned int) 0xF << 8) // (SMC2) Data Float Time
#define AT91C_SMC2_BAT ((unsigned int) 0x1 << 12) // (SMC2) Byte Access Type
//#define AT91C_SMC2_DBW ((unsigned int) 0x1 << 13) // (SMC2) Data Bus Width
#define AT91C_SMC2_DBW_16 ((unsigned int) 0x1 << 13) // (SMC2) 16-bit.
//#define AT91C_SMC2_DBW_8 ((unsigned int) 0x2 << 13) // (SMC2) 8-bit.
AT91C_BASE_SMC2->SMC2_CSR[0] = (AT91C_SMC2_NWS & 0x10) | AT91C_SMC2_WSEN |
(AT91C_SMC2_TDF & 0x800)| AT91C_SMC2_BAT |
AT91C_SMC2_DBW_16;
阅读(409) | 评论(0) | 转发(0) |