1. 硬件说明说明 CPU s3c6410 RAM K4X51163PG (32M x16 *2 = 128M,起始地址0x50000000) Nandflash: K9F2G08 (256MB) 网卡: DM9000 (连接XM0CSN1,地址0x18000000)
2. U-boot烧录 由于手头有J-link V8,所以关于OK6410开发板u-boot的烧录,我将不按照手册上提供的SD卡方式烧录,而是参考FL2440开发板的烧录方法使用J-link来烧录。该方法的基本思路是: S3C6410 CPU内部与S3C2440类似也有一个8KB的SRAM(Stepping Stone),系统在上电时,如果配置从Nandflash启动的话,CPU会将Nandflash的前8K代码拷贝到SRAM中运行。在U-boot中,这前面的代码主要是用来初始化CPU和时钟,初始化Nandflash控制器和SDRAM控制器,然后将u-boot从Nandflash中搬到SDRAM中并初始化堆栈等C语言环境,然后在SDRAM中执行剩下的U-boot C代码。 而我们使用J-link可以直接操作CPU内部的8KB SRAM和开发板扩展的128MB DDR内存中,但由于SDRAM需要初始化SDRAM控制器后才能使用,所以我们不能将u-boot直接加载到SDRAM中运行。另外,u-boot的大小有100多KB,这样虽说SRAM不需要初始化就可以直接使用,但由于大小限制,我们也不能把u-boot下到SRAM中运行。所以我们只能找一个折中的办法: 1) 首先我用汇编写了一个小于8KB的程序,该程序主要用来初始化CPU时钟和外部的DDR SDRAM,我把这个程序叫做bootstrap-s3c6410.bin; 2) 使用J-link将bootstap-s3c6410.bin下载到CPU内部的SRAM(0x0C00 0000)中运行,一旦这个程序运行后,外部的SDRAM将被初始化就可以用了; 3) 使用J-link将u-boot-s3c6410.bin下载到外部的SDRAM(0x57E0 0000)中去运行,然后使用u-boot提供的tftp和nand命令就可以下载烧录U-boot到Nandflash上去了;
下面是具体的烧录过程: Ø 首先把开发板的拨码开关设置成Nandflash启动,具体设置如下: S3C6410处理器支持NAND FLASH、NOR FLASH和 SD卡等多种启动方式,通过系统上电时配置引脚的不同状态确定启动和启动方式。OK6410开发板通过配置拨码开关SW2选择启动方式: SW2引脚号 | Pin1 | Pin2 | Pin3 | Pin4 | Pin5 | Pin6 | Pin7 | Pin8 | 引脚定义 | GPN13 | GPN14 | GPN15 | OM1 | OM2 | OM3 | OM4 | SELNAND | Nandflash启动 | X | X | X | 1 | 1 | 0 | 0 | 1 | Norflash启动 | X | X | X | 1 | 0 | 1 | 0 | X | SD卡启动 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | X |
注: OM0信号为S3C6410芯片时钟源选择信号,当OM0信号为“0”时选择XTlpll:当OM0信号为“1”时选择EXTCLK,OK6410开发板使用XTlpll所以OM0直接下拉接地。 SELNAND信号为选择系统FLASH存储器类型,当选择NAND FLASH时必须为高电平,选择ONENAND存储器时为低电平,OK6410开发板使用NAND存储器,直接上接为高。 EINT13-EINT15为IROM启动方式设备选择引脚,当使用IROM启动方式时,S3C6410处理器首先运行片内ROM固化程序,读取EINT15、EINT14、EINT13三个端口引脚状态,再根本配置的不同状态,从而选择不同的设备启动。OM1-OM4信号为S3C6410处理器启动方式配置引脚。
Ø 将开发板上电,然后运行J-link Command,开始下载并运行bootstrap-s3c6410.bin SEGGER J-Link Commander V4.10i ('?' for help) Compiled Jan 25 2010 14:44:16 DLL version V4.10i, compiled Jan 25 2010 14:43:57 Firmware: J-Link ARM V8 compiled Sep 6 2011 16:33:14 Hardware: V8.00 S/N : 20100214 Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull VTarget = 3.261V Info: TotalIRLen = 9, IRPrint = 0x0011 Found 2 JTAG devices, Total IRLen = 5: #0 Id: 0x2B900F0F, IRLen: 04, IRPrint: 0x0, ARM ETB #1 Id: 0x07B76F0F, IRLen: 05, IRPrint: 0x1, ARM1176 Core ARM11 identified. RTCK reaction time is approx. 126ns Using adaptive clocking instead of fixed JTAG speed. J-Link>h J-Link: ARM11 CP15 Settings changed: 0x00451078 from 0x00001002, MMU Off, ICache On, DCache Off Info: CP15.0.0: 0x410FB766: ARM, Architecture Unknown architecture Info: CP15.0.1: 0x1D152152: ICache: 16kB (4*128*32), DCache: 16kB (4*128*32) DIDR: 6 Breakpoints available and 2 Watchpoints available. J-Link>setpc 0 J-Link>loadbin C:\Users\USER\Downloads\bootstrap-s3c6410.bin 0x0C000000 Loading binary file... [C:\Users\USER\Downloads\bootstrap-s3c6410.bin] Writing bin data into target memory @ 0x0C000000. J-Link>setpc 0x0C000000 J-Link>g J-Link>
Ø 使用J-link下载u-boot到SDRAM中并运行 J-Link>h J-Link: ARM11 CP15 Settings changed: 0x00451078 from 0x00450078, MMU Off, ICache On, DCache Off Info: CP15.0.0: 0x410FB766: ARM, Architecture Unknown architecture Info: CP15.0.1: 0x1D152152: ICache: 16kB (4*128*32), DCache: 16kB (4*128*32) DIDR: 6 Breakpoints available and 2 Watchpoints available. J-Link>loadbin C:\Users\USER\Downloads\u-boot-s3c6410.bin 0x57e00000 Loading binary file... [C:\Users\USER\Downloads\u-boot-s3c6410.bin] Writing bin data into target memory @ 0x57E00000. J-Link>setpc 0x57e00000 J-Link>g
Ø 串口上可以看到u-boot开始运行,我们使用tftp和nand命令烧录: U-Boot 2010.09 (Mar 11 2013 - 23:24:01) by guowenxue<QQ:281143292>
CPU: S3C6410@533MHz Fclk = 533MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode) Board: OK6410 DRAM: 128 MiB NAND: 256 MiB *** Warning - bad CRC, using default environment
In: serial Out: serial Err: serial Net: dm9000 Hit any key to stop autoboot: 0 [ s3c6410@guowenxue ]# tftp 50000000 u-boot-s3c6410.bin dm9000 i/o: 0x18000300, id: 0x90000a46 DM9000: running in 16 bit mode MAC: 08:00:60:26:0a:6b operating at 100M full duplex mode Using dm9000 device TFTP from server 192.168.1.2; our IP address is 192.168.1.246 Filename 'u-boot-s3c6410.bin'. Load address: 0x50000000 Loading: ########### done Bytes transferred = 149940 (249b4 hex) [ s3c6410@guowenxue ]# nand write 50000000 0 40000
NAND write: device 0 offset 0x0, size 0x40000 262144 bytes written: OK [ s3c6410@guowenxue ]# reset resetting ...
U-Boot 2010.09 (Mar 11 2013 - 23:24:01) by guowenxue<QQ:281143292>
CPU: S3C6410@533MHz Fclk = 533MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode) Board: OK6410 DRAM: 128 MiB NAND: 256 MiB *** Warning - bad CRC, using default environment
In: serial Out: serial Err: serial Net: dm9000 Hit any key to stop autoboot: 0 [ s3c6410@guowenxue ]#
|