首先说说本人板子的信息:DDR2——64M-Byte,NAND——512M-Byte——512Byte Page;没有NOR FLASH。/*=======*/
/* Board */
/*=======*/
#define DV_EVM #define CFG_NAND_SMALLPAGE//支持512 Byte Page的NAND
//#define CFG_NAND_LARGEPAGE //支持2K Page的NAND //#define CFG_USE_NOR//modified by Dashon 2012.3.10 #define CFG_USE_NAND//added by Dashon 2012.3.10 /*===================*/
/* SoC Configuration */
/*===================*/
#define CONFIG_ARM926EJS/* arm926ejs CPU core */
#define CONFIG_SYS_CLK_FREQ297000000/* Arm Clock frequency */
#define CFG_TIMERBASE0x01c21400/* use timer 0 */
#define CFG_HZ_CLOCK27000000/* Timer Input clock freq */
#define CFG_HZ1000 #define CONFIG_SOC_DM644X//added by Dashon 2012.3.10 /*====================================================*/
/* EEPROM definitions for Atmel 24C256BN SEEPROM chip */
/* on Sonata/DV_EVM board. No EEPROM on schmoogie. */
/*====================================================*/ //板子没有I2C接口的EEPROM,modified by Dashon 2012.3.10
//#define CFG_I2C_EEPROM_ADDR_LEN2
//#define CFG_I2C_EEPROM_ADDR0x50
//#define CFG_EEPROM_PAGE_WRITE_BITS6
//#define CFG_EEPROM_PAGE_WRITE_DELAY_MS20
/*=============*/
/* Memory Info */
/*=============*/
#define CFG_MALLOC_LEN(0x10000 + 128*1024)/* malloc() len */
#define CFG_GBL_DATA_SIZE128/* reserved for initial data */
#define CFG_MEMTEST_START0x80000000/* memtest start address */
#define CFG_MEMTEST_END0x81000000/* 16MB RAM test */
#define CONFIG_NR_DRAM_BANKS1/* we have 1 bank of DRAM */
#define CONFIG_STACKSIZE(256*1024)/* regular stack */
#define PHYS_SDRAM_10x80000000/* DDR Start */
//modified by Dashon 2012.3.10,For K4T1G164QE #define PHYS_SDRAM_1_SIZE0x04000000/* DDR size 64MB */
#define DDR_8BANKS/* 8-bank DDR2 (64MB) */ /*====================*/
/* Serial Driver info */
/*====================*/ //串口驱动不用改/*===================*/
/* I2C Configuration */
/*===================*/
//没有用到,modified by Dashon 2012.3.10 //#define CONFIG_HARD_I2C
//#define CONFIG_DRIVER_DAVINCI_I2C
//#define CFG_I2C_SPEED80000/* 100Kbps won't work, silicon bug */
//#define CFG_I2C_SLAVE10/* Bogus, master-only in U-Boot */
/*==================================*/
/* Network & Ethernet Configuration */
/*==================================*/ //网络配置也不需要修改/*=====================*/
/* Flash & Environment */
/*=====================*/
//由于最开始我们已经定义好CFG_USE_NAND和CFG_NAND_LARGEPAGE的信息,所以这里也不需要修改;
/*==============================*/
/* U-Boot general configuration */
/*==============================*/
//这里主要定义UBOOT的一些操作,比如命令行显示字符串,delay等待时间的长短,这些根据个人要求修改,不改也可以。
/*===================*/
/* Linux Information */
/*===================*/
//UBOOT要把一些参数信息传给内核linux使用,linux内核运行的时候需要这些配置信息,内核能够识别这些字符串信息。先把以下两个定义注释掉, //#define CONFIG_BOOTARGS xxxxxxxxxxxxxx
//#define CONFIG_BOOTCOMMAND xxxxxxxxxxxxxxx 如果你要从NAND FLASH启动: #define CONFIG_BOOTARGS “mem=120M console=ttyS0,115200n8 noinitrd ip=off root=/dev/mtdblock3”(mtdblock3 表示文件系统放在LINUX内核分区) #define CONFIG_BOOTCOMMAND " nboot 0x80008000 0x700000"(把linux 内核从FLASH BOOT起来,下面会介绍UBOOT的命令) /*=================*/
/* U-Boot commands */
/*=================*/
#include
#define CONFIG_CMD_ASKENV
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_DIAG //#define CONFIG_CMD_I2C//modified by Dashon 2012.3.11
#define CONFIG_CMD_MII
#define CONFIG_CMD_PING
#define CONFIG_CMD_SAVES //#define CONFIG_CMD_EEPROM//modified by Dashon 2012.3.11 //#undef CONFIG_CMD_I2C
#undef CONFIG_CMD_BDI
#undef CONFIG_CMD_FPGA
#undef CONFIG_CMD_SETGETDCR
#ifdef CFG_USE_NAND
#undef CONFIG_CMD_FLASH
#undef CONFIG_CMD_IMLS
#define CONFIG_CMD_NAND
#elif defined(CFG_USE_NOR)
#define CONFIG_CMD_JFFS2
#else
#error "Either CFG_USE_NAND or CFG_USE_NOR _MUST_ be defined !!!"
#endif
2、修改board/davinci/dm6441/dv_board.c里的有关自己板子的配置
1)在int board_init(void)函数里,因为本人的板子使用/EM_CS2作为NAND FLASH的片选信号,故在PINMUX0寄存器里,有关AEAW必须关掉。
/* Enable EMAC and AEMIF pins */ //REG(PINMUX0) = 0x80000c1f;//modified by Dashon,2012.3.19 REG(PINMUX0) = 0x80000000;只使用EMAC否则UBOOT 启动不起来。 2)在int misc_init_r (void)函数里,因为本人没有使用I2C EEPROM存储MAC 地址,所以要注释掉 //modified by Dashon 2012.3.10 #if 0 /* Set Ethernet MAC address from EEPROM */ if (i2c_read(CFG_I2C_EEPROM_ADDR, 0x7f00, CFG_I2C_EEPROM_ADDR_LEN, buf, 6)) { printf("
EEPROM @ 0x%02x read FAILED!!!
", CFG_I2C_EEPROM_ADDR); } else { tmp[0] = 0xff; for (i = 0; i < 6; i++) tmp[0] &= buf[i]; if ((tmp[0] != 0xff) && (getenv("ethaddr") == NULL)) { sprintf((char *)&tmp[0], "%02x:%02x:%02x:%02x:%02x:%02x", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); setenv("ethaddr", (char *)&tmp[0]); } } #endif一般MAC地址保存到NAND,降低成本。 if (!eth_hw_init())printf("ethernet init failed!
"); //modified by Dashon 2012.3.10 #if 0 i2c_read (0x39, 0x00, 1, (u_int8_t *)&i, 1); setenv ("videostd", ((i & 0x80) ? "pal" : "ntsc")); #endif如果你的板子没有TI 的视频采集芯片TVP5146之类的,上面的功能最好去掉。
3、网口驱动移植:cpu/arm926ejs/davinci/ether.c
因为DM6446芯片上集成EMAC和MDIO,所以直接使用PHY芯片就可以了,驱动就使用UBOOT-1.3.4 TI 默认的驱动,而不是TI EVM使用的PHY_LXT972。直接使用GENERIC PHY,有个地方需要修改,否则网口工作不起来,本人也是从一个网友那里查到类似的信息,在static int dm644x_eth_phy_detect(void)函数里,改成: #if 0
for (i = 0; i < 32; i++) {
if (phy_act_state & (1 << i)) {
if (phy_act_state & ~(1 << i))
return(0); /* More than one PHY */
else {
active_phy_addr = i;
return(1);
}
}
}
return(0); /* Just to make GCC happy */ #else
active_phy_addr = 1;
return(1);
#endif