使用JLink烧写S3C2440开发板的Flash 刘启明 2010-04-01 1.简要说明 JLink的调试功能、烧写Flash的功能都很强大,但是对于S3C2410、S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢;烧写Nand Flash只是从理论上能够达到,但是还没有人直接实现这点。
本文使用一个间接的方法来实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来烧写。由于我手头使用的是飞凌的FL2440-Ⅰ开发板,这里就以该开发板为例,当然其他开发板都类似。
2. 操作步骤
2.1 连接硬件
接通FL2440开发板的电源,打开电源。将JLINK的JTAG接口接到开发板的JTEG座,如果JTEG接口不匹配,请使用JTEG转接板。将JLINK的USB端口接到PC的USB端口。当然前提是JLINK的驱动已经安装完毕。
2.2 运行J-Link commander
双击桌面上的J-Link ARM V4.08l图标,具体名称视安装JLINK驱动的版本而定,其启动界面如下图所示。 (如果没有发现检测到CPU,就在里面执行usb命令连接JLink,再执行r命令识别处理器)。
2.3 下载运行特制的程序
对于S3C2410、S3C2440处理器,它们内部有4K的SRAM,当使用Nor Flash启动时,地址为0x40000000;当使用Nand Flash启动时,地址为0。
对于S3C2410、S3C2440开发板,一般都外接64M的SDRAM。SDRAM能被使用之前,需要经过初始化。所以,先把一个init.bin下载到内部SRAM去运行,它执行SDRAM的初始化;然后再下载一个比较大的程序,比如u-boot到SDRAM去动行,它将实现对Nor、Nand Flash的操作。
以下是在J-Link commander里的命令,假设init.bin、u-boot.bin在e:盘下。
1. speed 12000 //设置TCK为12M,下载程序时会很快
2. 下载并运行init.bin,这是用来初始化SDRAM的
2.1 如果是NAND启动: h //由于开发板上电后可能存在程序运行,故先停止
loadbin e:\init.bin 0 //将E盘根目录下的init.bin文件导入0地址
setpc 0 //将运行指针指向0地址
g //运行0地址所在程序
执行上面三条命令后,开发板处理器就会执行init.bin文件,对板上的SDRAM进行初始化等操作。下面,就可以下载u-boot到SDRAM运行了。
2.2 如果是Nor启动:
loadbin e:\init.bin 0x40000000
setpc 0x40000000
g
上面三条指令是开发板设置为从NOR启动时的指令,这时仍然是执行init.bin文件,而且同样也是在S3C2440里面的4K SRAM里面运行。只不过启动方式不同,对应SRAM的起始地址不同罢了。 注意:2.1,2.2两步依启动配置方式不同而做出相应选择,只执行其中一步!
3. 下载特制的uboot:
h //停止处理器(同halt命令)
loadbin e:\u-boot.bin 0x33f80000 //将E盘根目录的u-boot.bin导到相应地址
setpc 0x33f80000 //将运行指针指向相应地址
g //运行相应地址所在程序
上述操作命令执行界面如下:
现在,u-boot已经启动了,在串口工具上可以看到下图所示的界面。
4. 使用u-boot烧写到Flash 4.1 将bootloader烧写到nand-flash
第一步:在J-Link commander里执行:
h
loadbin e:\2440bootV5.bin 0x30000000
g
第二步:在u-boot里执行(串口终端):
nand erase 0 30000 // 擦除从0地址开始的大小为0x30000的Nnad Flash扇区
nand write.jffs2 30000000 0 30000 // 把前面下载到0x30000000的程序烧写到Nand去
注意:上面的30000表示2440bootV5.bin的大小为192KB,具体大小似该文件而定。
4.2 通过u-boot烧写到Nor Flash:
第一步:在J-Link commander里执行:
h
loadbin e:\2440bootV5.bin 0x30000000
g
第二步:在u-boot里执行[串口终端]:
protect off all // 解锁
erase 0 2ffff // 擦除从0地址开始的大小为0x30000的NOR Flash扇区(大小为可擦除块的整数倍,可以运行flash info命令查看)
cp.b 0x30000000 0 30000 // 把前面下载到0x30000000的程序烧写到NOR去
注意:上面用的2ffff、30000等数字是192K,如果你的程序比较小,请自行设置。
4.1和4.2根据开发板启动方式选择执行,只执行其中一种方式。执行完后,重启开发板,刚才烧进去的bootloader也就跑起来了。
|