--------------------------------------------
本文系本站原创,欢迎转载!
--------------------------------------------
移植工作是建立在TI提供的u-boot-1.1.4 demo程序上进行的,该demo程序应用于TI 达芬奇平台demo板。移植工作集中在新电路板和TI demo板的不同的地方,主要分五个方面,CLOCK源设置,DDR2设置,FLASH设置,NET设置以及其他设置。
一、CLOCK源设置
demo程序里将时钟设置为无源晶振输入模式,而我们的板子为有源晶振输入模式。需要修改的地方在lowlevel_init.S的124行和413行,分别将MOV R10, #0x0修改为MOV R10, #0x1, MOV R2, #0x0修改为MOV R2, #0x1,即把PLL2和PLL的时钟来源修改为有源晶振输入。
二、DDR2设置
根据DDR2芯片手册,主要是修改DM6441的DDR2配置寄存器SDCFG和刷新时间寄存器SDREF。我们使用的DDR2的大概情况是,CL=3,16 bit,4 bank,PageSize=2Kbytes,所以只修改寄存器SDCFG,由原来的0x00178632改为0x0017c622(在lowlevel_init.S的704行), 即SDCFG_VAL: .word 0x0017c622。在davinci.h中的93行,设置#define PHYS_SDRAM_1_SIZE 0x04000000,即64MB。DDR2时钟采用默认的162MHz,可根据需要修改在lowlevel_init.S的170行PLL2_PLLM寄存器的值,相应的SDTIM0和SDTIM1寄存器也需要修改。
三、FLASH设置
根据FLASH芯片手册,主要是加入该FLASH的大小和sector等参数,集中在board/davinci/flash.c和include/flash.h中。FLASH是AMD兼容型号的(根据自己的具体型号,修改相应的参数),8M。在flash_get_size函数中,394行,加入
if ((FPW)addr[FLASH_ID3] == (FPW)AMD_ID_GL064MT_2 &&
(FPW)addr[FLASH_ID4] == (FPW)AMD_ID_LV128U_3)
{
info->flash_id += FLASH_AMD;
info->sector_count = 128;
info->size = 0x00800000;
for (i = 0; i < info->sector_count; i++)
{
info->start[i] = (ulong)addr + 0x10000 * i;
}
printf ("Flash Device is S29GL064N\n");
break;
}。
在flash.h的411行加入#define FLASH_AMD 0x00F1。在flash_erase函数的default分支前加入case FLASH_AMD: break; 。
四、NET设置
NET设置很简单,因为在dm644x_emac.c中已经实现了网络功能。网络模块的在davinci.c中打开。注释掉davinci.c misc_init_r函数中的351行至402行即可。
五、其他设置
可以根据需要修改ARM的时钟,在lowlevel_init.S的464行PLL1_PLLM寄存器的值。如果要打开摸个模块功能或使用某个gpio引脚,可在davinci.c中设置。串口波特率最好设置成9600,在davinci的110行,#define CONFIG_BAUDRATE 9600。等等。
用JTAG将u-boot下载到flash中进行调试。记住,在内核中也应该添加该flash的信息,否则内核可能找不到该flash。具体如何修改,将在后续的文章中阐述。