前提是板子上已经有u-boot程序在运行。如果没有,先使用codewarrior烧录一个u–boot。
串口烧写
=>help
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loadx - load binary file over serial line (xmodem mode)
loady - load binary file over serial line (ymodem mode)
我们可以用kermit/xmodem/ymodem协议来进行串口下载
例:更新u-boot程序
-
先解除写保护,u-boot是系统默认写保护的
protect off 0xEFF40000 0xEFFFFFFF
-
擦除,nor写入前必须先擦除
era 0xEFF40000 0xEFFFFFFF
-
串口烧写,使用ymodem协议烧写
输入
loady 0xEF520000
,boot进入一个等待状态,然后点击文件-》传输-》YMODEM(Y)-》用YMODEM发送
,弹出文件选择对话框,选择u-boot.bin镜像。 -
等待进度条读完,直到出现done,即烧写成功。
网络tftp烧写
注意:由于tftp下载不能直接下载至flash中(测试烧录时发现的),需要先烧写到ddr中,然后复制到flash中。
以下以烧写u-boot为例
-
先设置好u-boot环境变量参数,主要是网络参数。
> setenv ipaddr 192.168.1.200 //本地ip > setenv gatewayip 192.168.1.1 //网关,不设置也可以,根据实际的网络状况来定 > setenv netmask 255.255.225.0 //子网掩码 > setenv serverip 192.168.1.223 //tftp服务器ip
-
nor必须先擦除才能写入,所以先擦除
> protect off 0xEFF40000 0xEFFFFFFF //解除写保护 > era 0xEFF40000 0xEFFFFFFF //擦除
-
下载只ddr中
> tftp 0x30000000 u-boot.bin //下载完成会显示文件的字节数,下一步会用到
-
写入nor中
> cp.b 0x30000000 0xEFF40000 0xc0000 //最后一个参数是tftp下载的字节数,将ddr的镜像文件拷贝至nor中 > cmp.b 0x30000000 0xEFF40000 0xc0000 //检查拷贝是否正确,非必要项
-
完毕
p1020ndae的镜像烧写
nor flash(128MB)分区划分
修改u-boot的tlb之后,nor支持我们的128M nor,我们需要对128M的nor进行分区
根据RM手册可知,cpu启动会从读取nor最后4byte,所以u-boot要烧录到nor最后,以下是我的分区划分。
address = baseaddr + offset;
baseaddr = 0xe8000000;
Start Physical offset | End Physical offset | Definition | Size | Size(B) | hex |
---|---|---|---|---|---|
00000000 >> E800 0000 | 054FFFFF >> Ed4FFFFF | rootfs | 85M | 89128960 | 5500000 |
05500000 >> Ed500000 | 074FFFFF >> EF4FFFFF | fpga.bin | 32M | 33554432 | 2000000 |
07500000 >> EF500000 | 0751FFFF >> EF51FFFF | dtb | 128K | 131072 | 20000 |
07520000 >> EF520000 | 07F1 FFFF >> EFF1FFFF | uImage | 10M | 10485760 | A00000 |
07F2 0000 >> EFF20000 | 07F3 FFFF >> EFF3 FFFF | u-boot env | 128K | 131072 | 20000 |
07F4 0000 >> EFF40000 | 07FFFFFF >> EFFF FFFF | u-boot | 768K | 786431 | C0000 |
对应的boot参数
- RAM boot参数:
setenv ramargs 'setenv bootargs root=/dev/ram rw console=ttyS0,115200'
setenv bootcmd 'run ramargs; bootm EF520000 E8000000 EF500000'
- jffs2 boot参数:
setenv bootcmd 'setenv bootargs root=/dev/$jffs2nor rw console=$consoledev,$baudrate rootfstype=jffs2 $othbootargs;bootm EF520000 - EF500000;'
镜像烧写
设置环境变量
> setenv ipaddr 192.168.1.200
> setenv gatewayip 192.168.1.1
> setenv netmask 255.255.225.0
> setenv serverip 192.168.1.223
烧写u-boot
> protect off 0xEFF40000 0xEFFFFFFF
> era 0xEFF40000 0xEFFFFFFF
> tftp 0x30000000 u-boot.bin
> cp.b 0x30000000 0xEFF40000 0xc0000
> cmp.b 0x30000000 0xEFF40000 0xc0000
ALL> protect off 0xEFF40000 0xEFFFFFFF;era 0xEFF40000 0xEFFFFFFF;tftp 0x30000000 u-boot.bin;cp.b 0x30000000 0xEFF40000 0xc0000;cmp.b 0x30000000 0xEFF40000 0xc0000
烧写rootfs
> protect off 0xE8000000 0xEd4FFFFF
> era 0xE8000000 0xEd4FFFFF
> tftp 0x30000000 fsl.rootfs.ext2.gz.u-boot
> cp.b 0x30000000 0xe8000000 0x18f45d2 //最后的cp大小,以tftp下载字节数为准
> cmp.b 0x30000000 0xe8000000 0x18f45d2
ALL> protect off 0xE8000000 0xEd4FFFFF;era 0xE8000000 0xEd4FFFFF;tftp 0x30000000 pjffs2;cp.b 0x30000000 0xe8000000 0x20e0000;cmp.b 0x30000000 0xe8000000 0x20e0000
烧写fpga.bin
> protect off 0xEd500000 0xEF4FFFFF
> era 0xEd500000 0xEF4FFFFF
> tftp 0x30000000 vc707.bin
> cp.b 0x30000000 0xEd500000 0x135591c
> fpga load 0 0xEd500000 0x135591c
ALL> protect off 0xEd500000 0xEF4FFFFF;era 0xEd500000 0xEF4FFFFF;tftp 0x30000000 vc0612.bin;cp.b 0x30000000 0xEd500000 0x135591c;cmp.b 0x30000000 0xEd500000 0x135591c;
> tftp 0x30000000 vc707.bin;fpga load 0 0x30000000 0x135591c
烧写dtb
> protect off 0xEF500000 0xEF51FFFF
> era 0xEF500000 0xEF51FFFF
> tftp 0x30000000 p1020.dtb
> cp.b 0x30000000 0xef500000 0x3326
> cmp.b 0x30000000 0xef500000 0x3326
ALL>protect off 0xEF500000 0xEF51FFFF;era 0xEF500000 0xEF51FFFF;tftp 0x30000000 p1020rdb-pd_32b.dtb;cp.b 0x30000000 0xef500000 0x33b2;cmp.b 0x30000000 0xef500000 0x33b2
烧写uImage
> protect off 0xEF520000 0xEFF1FFFF
> era 0xEF520000 0xEFF1FFFF
> tftp 0x30000000 uImage
> cp.b 0x30000000 0xef520000 0x3e8dff
> cmp.b 0x30000000 0xef520000 0x3e8dff
ALL>protect off 0xEF520000 0xEFF1FFFF;era 0xEF520000 0xEFF1FFFF;tftp 0x30000000 uImage;cp.b 0x30000000 0xef520000 0x3b6843;cmp.b 0x30000000 0xef520000 0x3b6843
烧写u-boot env
> protect off 0xEFF20000 0xEFF3FFFF
> era 0xEFF20000 0xEFF3FFFF
> tftp 0x30000000 u-boot.env
> cp.b 0x30000000 0xEFF20000 0x3e8dff
> cmp.b 0x30000000 0xEFF20000 0x3e8dff
ALL>protect off 0xEFF20000 0xEFF3FFFF;era 0xEFF20000 0xEFF3FFFF;tftp 0x30000000 u-boot.env;cp.b 0x30000000 0xEFF20000 0x3b6843;cmp.b 0x30000000 0xEFF20000 0x3b6843
擦除命令
擦除u-boot:era 0xEFF40000 0xEFFFFFFF
擦除dtb: era 0xEF500000 0xEF51FFFF
擦除uImage:era 0xEF520000 0xEFF1FFFF
擦除env:era 0xEFF20000 0xEFF3FFFF
擦除fs:era 0xE8000000 0xEd4FFFFF
擦除整个nor: era all