三、 修改网卡
与SMDKV210评估板一样,GEC210开发板同样使用DM9000芯片作为以太网芯片,但由于GEC210开发板上DM9000芯片的片选线与SMDKV210评估板的不一样了:
DM9000的片选线CS#接到了S5PV210的CSn1,也就是SROMC_BANK1,由下图可知访问DM9000的基址是0x88000000,DM9000的CMD接到了地址线ADDR2,访问DM9000数据的地址0x88000000+0b100(0x4)。
修改配置文件:
vim include/configs/smdkv210single.h
将:
#define CONFIG_DM9000_BASE (0xA8000000)
修改为:
#define CONFIG_DM9000_BASE (0x88000000)
将:
#define DM9000_DATA (CONFIG_DM9000_BASE+2)
修改为:
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
修改板级初始化文件:
vim board/samsung/smdkc110/smdkc110.c
修改DM9000预初始化函数dm9000_pre_init: static void dm9000_pre_init(void) { unsigned int tmp;
/* DM9000 on SROM BANK1, 16 bit */ SROM_BW_REG &= ~(0xf << 4); SROM_BW_REG |= (0x3 << 4); SROM_BC1_REG = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0)); /* Set MP01_1 as SROM_CSn[1] */ tmp = MP01CON_REG; tmp &=~(0xf<<4); tmp |=(2<<4); MP01CON_REG = tmp; }
重新编译下载运行,用TFTP下载测试网卡驱动: SMDKV210 # setenv serverip 192.168.0.21 SMDKV210 # tftp 0x40000000 u-boot.bin dm9000 i/o: 0x88000000, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
TFTP from server 192.168.0.21; our IP address is 192.168.0.20 Filename 'u-boot.bin'.
Load address: 0x40000000
Loading: T ################### done
Bytes transferred = 278528 (0x44000)
四、 固化u-boot
虽然GEC210开发板并不像SMDKV210评估板那样拥有512MB的NAND FLASH(只拥有256MB的NAND FLASH),但NAND FLASH相关的代码已能识别出系统只拥有256MB的NAND FLASH,所以NAND FLASH的读写应该没问题: SMDKV210 # nand erase 0 0x60000
NAND erase: device 0 offset 0x0, size 0x60000 Erasing at 0x40000 -- 100% complete. OK
SMDKV210 # nand write 0x40000000 0 0x60000
NAND write: device 0 offset 0x0, size 0x60000 Checksum is calculated. Main area write (3 blocks): 393216 bytes written: OK
现在已经把u-boot.bin烧写到NAND FLASH了,把GEC210开发板的启动方式开关打到NAND--BOOT一侧,然后复位开发板,串口并没有任何输出,u-boot应该还有问题(请把GEC210开发板的启动方式开关打回SD-BOOT一侧,否则后面USB连接不上,请思考为什么)。
五、 修改u-boot
由于我们的开发板并不像SMDKV210那样拥有16MB的SRAM和电源管理芯片,所以我们还要对代码进一步修改,修改底层初始化文件: vim board/samsung/smdkc110/lowlevel_init.S 使用条件编译屏蔽掉下面的代码:
#if 0
/* SRAM(2MB) init for SMDKC110 */ /* GPJ1 SROM_ADDR_16to21 */ ldr r0, =ELFIN_GPIO_BASE ……省略部分代码……
/* PS_HOLD pin(GPH0_0) set to high */
ldr r0, =(ELFIN_CLOCK_POWER_BASE + PS_HOLD_CONTROL_OFFSET) ldr r1, [r0]
orr r1, r1, #0x300 orr r1, r1, #0x1 str r1, [r0] #endif
使用条件编译屏蔽掉下面的代码:
#if 0
/* init PMIC chip */ bl PMIC_InitIp #endif
重新编译下载运行:
SMDKV210 # setenv serverip 192.168.0.21 SMDKV210 # tftp 0x40000000 u-boot.bin dm9000 i/o: 0x88000000, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
TFTP from server 192.168.0.21; our IP address is 192.168.0.20 Filename 'u-boot.bin'.
Load address: 0x40000000
Loading: T ################### done
Bytes transferred = 278528 (0x44000) SMDKV210 # nand erase 0 0x60000
NAND erase: device 0 offset 0x0, size 0x60000 Erasing at 0x40000 -- 100% complete. OK
SMDKV210 # nand write 0x40000000 0 0x60000
NAND write: device 0 offset 0x0, size 0x60000 Checksum is calculated. Main area write (3 blocks): 393216 bytes written: OK
现在已经把u-boot.bin烧写到NAND FLASH了,把GEC210开发板的启动方式开关打到NAND--BOOT一侧,然后复位开发板,u-boot成功从NAND FLASH启动了:
OK
U-Boot 1.3.4 (Jan 17 2013 - 11:25:27) for SMDKV210
CPU: S5PV210@1000MHz(OK)
APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz MPLL = 667MHz, EPLL = 80MHz
HclkDsys = 166MHz, PclkDsys = 83MHz HclkPsys = 133MHz, PclkPsys = 66MHz SCLKA2M = 200MHz Serial = CLKUART Board: SMDKV210 DRAM: 512 MB Flash: 8 MB
SD/MMC: Card init fail! 0 MB
NAND: 256 MB In: serial Out: serial Err: serial
checking mode for fastboot ... Hit any key to stop autoboot: 0 SMDKV210 #
输入saveenv保存环境变量,提示保存环境变量到NAND FLASH: SMDKV210 # saveenv
Unknown command 'saveebnv' - try 'help' SMDKV210 # saveenv
Saving Environment to SMDK bootable device... Erasing Nand... Writing to Nand...
Saved enviroment variables