MPC5125 uboot移植记录(二)

  6.console_init_f 在环境变量里对串口进行注册。

  7.display_options 至此将显示uboot的版本号,也是在console中显示的第一行,根据makefile自动获取的新版本号,所以无需修改

  8.checkboard   修改硬件板卡版本号,做一些IO初始化。因为以太网EFC1管脚复位即为第一功能,所以注释掉iopin_initialize()的初始化。

 因为MPC5125有两个GPIO模块,所以基地址发生变化,修改GPIO的结构体:

typedef struct gpio512x {
 u32 gpdir;
 u32 gpodr;
 u32 gpdat;
 u32 gpier;
 u32 gpimr;
 u32 gpicr1;
 u32 gpicr2;
 u8 res0[0x64];
} gpio512x_t;

注意gpio_initialize()关于对板子GPIO的初始化的修改。此处先不做修改。

9.uboot并没有用到I2C以及SPI所以不对其做修改。

10.init_func_ram

主要完成对SDRAM的初始化,由于此次改为DDR2的MT47H64M16LFCK-3,256M,工作时钟为200MHz,主要修改cpu/mpc512x/fixed_sdram.c初始化时序

对于mpc5125 ddr模块没有做出调整,因此不用对其进行重映射;对于DDR控制器优先级采用默认设置;

修改SDRAM容量的定义atdboard_v2.h

#define CONFIG_SYS_DDR_SIZE  256

根据芯片手册的初始化顺序在fixed_sdram.c中添加对SDRAM初始化结构体

u32 mt47H64M16_init_seq[] = {
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_NOP,
 CONFIG_SYS_DDRCMD_PCHG_ALL,
 CONFIG_SYS_DDRCMD_EMR2,
 CONFIG_SYS_DDRCMD_EMR3,
 CONFIG_SYS_DDRCMD_EMR_EN_DLL,
  CONFIG_SYS_DDRCMD_MR_RST_DLL,
 CONFIG_SYS_DDRCMD_PCHG_ALL,
 CONFIG_SYS_DDRCMD_RFSH,
 CONFIG_SYS_DDRCMD_RFSH,
 CONFIG_SYS_DDRCMD_MR_INIT_DEV_OP,
 CONFIG_SYS_DDRCMD_EMR_OCD_DEF,
 CONFIG_SYS_DDRCMD_EMR_OCD_EXIT
}

以及对DDR控制器配置寄存器的以下定义

#ifdef CONFIG_ATDBOARD_V2
#define CONFIG_SYS_MDDRC_SYS_CFG 0xea804a00
#define CONFIG_SYS_MDDRC_TIME_CFG0      0x00003c2d
#define CONFIG_SYS_MDDRC_TIME_CFG1 0x68ec1189
#define CONFIG_SYS_MDDRC_TIME_CFG2 0x35310864
/* MDDRC SYS CFG and Timing CFG0 Registers */
#define MDDRC_SYS_CFG_EN 0xF0000000
#define MDDRC_SYS_CFG_CMD_MASK 0x10000000
#define MDDRC_REFRESH_ZERO_MASK 0x0000FFFF
#endif

定义初始化自定义的命令

#ifdef CONFIG_ATDBOARD_V2
#define CONFIG_SYS_DDRCMD_EMR_EN_DLL     0x01010000  
#define CONFIG_SYS_DDRCMD_MR_RST_DLL     0x01000100     
#define CONFIG_SYS_DDRCMD_MR_INIT_DEV_OP 0x01000432
#define CONFIG_SYS_DDRCMD_EMR_OCD_DEF    0x01010400
#define CONFIG_SYS_DDRCMD_EMR_OCD_EXIT   0x01010000
#define CONFIG_SYS_DDRCMD_EMR2  0x01020000
#define CONFIG_SYS_DDRCMD_EMR3  0x01030000
#endif

至此初始化对SDRAM初始化完毕,接下来对环境变量进行分配空间,存储系统参数,无需更改,跳转到relocate_code处进行copymyself.

在start.S中可以看出这部分没有变化,所以跳转到内存中去执行

board_init_r:

     1.flash_init:  使用LPC总线无需对相应寄存器进行设置,只需对地址直接进行读写。采用了CFI标准接口协议对flash初始化,获得容量大小,其读写操作分析不再赘述。

    2.env_relocate ()重定位环境变量指针

    3.getenv_IPaddr 在环境变量中获得IP地址,interrupt_init()初始化decrementer定时器中断

    4.getenv(),获得下载地址以及引导命令

    5.eth_initialize()以太网初始化,MPC5125有两个以太网控制器,FEC1与MPC5121e的相同,寄存器不变,PHY芯片不变

    6.main_loop

 移植总结:

       本次移植主要对处理器的memory map、PSC串口、DDR2 SDRAM以及GPIO进行了移植,最麻烦的地方就是memory map,需要细心的与芯片手册寄存器对照,写错一个就会影响到之后所有的模块,移植的正确性,需要在调试中验证。

 

 

 

    

你可能感兴趣的:(struct,cmd,Flash,dll,makefile,存储系统)