Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18241
  • 博文数量: 12
  • 博客积分: 1420
  • 博客等级: 上尉
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-24 13:10
文章存档

2010年(10)

2009年(2)

我的朋友

分类: LINUX

2010-05-29 14:48:47

文件: 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) |
给主人留下些什么吧!~~