这里是假设了nor flash 已经烧进了u-boot,如果没有烧进u-boot,也可以先通过J-Link commander把对目标板SDRAM的初始化init.bin文件加载进SRAM(s3c2440里面的steppingstone,如果是nor启动方式的话,这个steppingstone被映射到0x40000000上,如果从nand启动的话,被映射到0x0地址上.然后设置PC值并运行它,这样SDRAM就被初始化好了.然后把u-boot.bin加载到SDRAM的某个地址处,只要不跟其他需要用到的空间重叠就行,运行u-boot,之后的操作跟下面基本一样.
1.把J-Link连接上PC机跟目标板,确保J-link驱动能正常使用.把串口连上PC机跟目标板,确保能正常通信.之后把开发板拨到nor flash启动,开启电源.因为nor flash已经烧进了u-boot,串口输出如下:
2.因为nor flash启动时已经把SDRAM给初始化好了,所以我们可以使用J-Link commander来把我们要烧到nand flash的bin文件加载到内存0x30000000处:
3.打开J-Link Commander后,如果提示如下,说明J-Link正确connect上了目标板:
4.把JTAG速度设置为12M这样会更快点,然后使用loadbin命令把我们要加载到内存的bin文件加载进去,然后g一下.(这里需要注意的是:不要去运行它,因为如果运行后程序无法停止,那么后续的操作就无法进行了,虽然说h命令可以停止cpu运行,但是不知道为什么h之后后续还是有些问题)
实践如下:
以上在J-Link commander的命令如下:
speed12000
loadbinF:\VM_Share\arm_test\nand_led\nand_led.bin 0x30000000
g
5.之后转到u-boot命令下:
①选择q,进入u-boot命令行
②根据之前查看到文件的大小,先擦除最小块数的nandflash.我的nand flash每一块大小是2048Byte,因为读写是以页为单位,所以我直接擦除一个块,大小为0x200000.
③之后把0x30000000处的内容拷贝到nand flash 的第一个页里.
在u-boot里命令如下:
nanderase 0 200000
nandwrite.jffs2 30000000 0 200000
具体实现如下: