当前位置:文档之家› 如何通过串口烧写uboot

如何通过串口烧写uboot

广州致远电子股份有限公司
如何通过串口烧写
uboot
基于M3352_EV_BOARD 评估板
修订历史
目录
1. 适用范围 (1)
2. 原理概述 (2)
3. 开发环境 (3)
4. 技术实现 (4)
4.1 连接调试串口 (4)
4.2 更新uboot (4)
4.2.1 下载SPL (4)
4.2.2 下载uboot (5)
4.2.3 下载MLO (6)
5. 免责声明 (8)
1. 适用范围
本文基于M3352_EV_BOARD评估板,主要介绍如何从串口启动AM3352处理器并实现uboot的更新,其原理和方法同样适用于EPC-9100I-L、EPC-9200I-L、EPC-9600I-L 工控主板以及所有基于M3352-N128LI工控核心板拓展的硬件平台。

2. 原理概述
AM3352处理器支持存储器启动以及外设启动。

上电后,处理器根据启动引脚的设置执行相应的一级引导代码(即固化在芯片内部的ROM Code)。

当选择从外设启动的时候,可以通过UART接口下载二级引导代码SPL(用来初始化内存、时钟和电源等)。

SPL执行完毕,处理器可继续通过UART接口下载uboot镜像文件,然后将控制权移交到uboot。

此后,还需要通过uboot来接收用于NAND Flash启动的二级引导代码MLO以及uboot镜像,并将它们烧写到NAND Flash中,从而实现处理器再次上电时从NAND Flash启动。

3. 开发环境
1)硬件清单:
M3352_EV_BOARD评估板。

2)软件资源:
产品光盘资料:M3352-N128LI CD V1.03;
附件:
●二级引导代码镜像文件(串口启动用):u-boot-spl.bin;
●uboot镜像文件:u-boot.img;
●二级引导代码镜像文件(NAND Flash启动用):MLO。

4. 技术实现
4.1 连接调试串口
注意:本文要求终端软件支持“Xmodem 1K”、“Ymodem”以及“Kermit”文件传输协议,如Tera Term v4.67。

对于Windows XP系统用户,推荐使用系统自带的“超级终端”软件。

此外,文中提到的JP6跳线只适用于M3350_EV_BOARD评估板,其它产品请以实际情况为准。

将M3350_EV_BOARD评估板的调试串口连接到计算机上,打开计算机的“超级终端”,按图4.1所示设置好串口参数。

图4.1 串口参数设置
用跳线帽短接M3350_EV_BOARD的JP6到SD引脚(如果板上插有SD卡,请先将其移除),然后连接电源并上电。

此时,处理器将首先运行ROM Code,并试图寻找可用于启动的外部设备,并且终端会不断地打印出“CCCCCC”。

此时M3350_EV_BOARD可以从串口接收文件并启动。

4.2 更新uboot
4.2.1 下载SPL
在“超级终端”软件的菜单栏中选择“传送”→“发送文件”,在弹出的对话框中点击“浏览”,选中文件“u-boot-spl.bin”后点击“打开”,然后在“协议”下拉列表中选择“1K Xmodem”,如图4.2所示。

图4.2 选择”1K Xmodem“
之后点击“发送”,此时“超级终端”将会弹出如图4.3所示的界面。

图4.3 Xmodem传送
“u-boot-spl.bin”文件传输完成后,M3350_EV_BOARD从SPL启动,终端显示启动信息后会再次打印“CCCC”:
CCCCCCCCCCCCCCCCCCCCCCC
U-Boot SPL 2011.09 (Sep 11 2015 - 16:35:56)
Texas Instruments Revision detection unimplemented
CCCC
4.2.2 下载uboot
再次在“超级终端”点击“传送”→“发送文件”,以“Ymodem”协议发送“u-boot.img”文件。

这个操作需要在60秒内完成,否则M3350_EV_BOARD将会提示错误:
spl: ymodem err - Timed out
### ERROR ### Please RESET the board ###
此外,用Ymodem传输“u-boot.img”会比较缓慢并且容易失败,请耐心等候,如果发生传输失败,请重启M3350_EV_BOARD并再次下载SPL和uboot。

如果“u-boot.img”正确传送,M3350_EV_BOARD从uboot启动,终端将会打印启动
信息,迅速在键盘上按下“zlg”,M3350_EV_BOARD停止启动并滞留在uboot选择菜单,依照提示输入“e”擦除NAND Flash:
Autobooting in 1 seconds. Enter "zlg" to interrupt Autoboot.
[e] Erase NAND Flash
[a] Burn all images
[b] Burn bootloader
[k] Burn kernel
[l] Burn logo
[r] Reboot
[q] exit to cmdline
e (输入“e”)
NAND erase.chip: device 0 whole chip
Skipping bad block at 0x04b60000
Skipping bad block at 0x04b80000
Skipping bad block at 0x0ff80000
Skipping bad block at 0x0ffa0000
Erasing at 0xffe0000 -- 100% complete.
OK
然后输入“q”回到uboot的命令行界面。

4.2.3 下载MLO
此时的uboot是在存储在内存中的,为了使M3350_EV_BOARD在掉电后重启时能从NAND Flash启动,需要将用于NAND Flash启动的二级引导代码MLO以及uboot固化在NAND Flash。

首先执行loadb指令下载MLO到0x82000000地址处:
U-Boot# loadb 0x82000000
## Ready for binary (kermit) download to 0x82000000 at 115200 bps...
在“超级终端”中点击“传送”→“发送文件”,以“Kermit”协议发送“MLO”文件。

发送完毕后,终端打印如下信息:
## Total Size = 0x000138ee = 80110 Bytes
## Start Addr = 0x82000000
此时M3350_EV_BOARD已经接收“MLO”文件并存放于0x82000000地址处,执行下列指令将其烧写到相应的分区地址处:
U-Boot# nandecc hw 0 (启用汉明码硬件校验)
HW ECC Hamming Code selected
U-Boot# nand erase 0x0 0x20000 (擦除待烧写的地址块)
NAND erase: device 0 offset 0x0, size 0x20000
Erasing at 0x0 -- 100% complete.
OK
U-Boot# nand write.i 0x82000000 0x0 0x20000 (将MLO写入0x0地址)
NAND write: device 0 offset 0x0, size 0x20000
131072 bytes written: OK
MLO烧写完毕后,再次执行loadb指令,同样在“超级终端”上以“Kermit”协议发送“u-boot.img”文件。

传送完毕后使用下列指令将“u-boot.img”文件烧写到相应地址:
U-Boot# nand erase 0x80000 0x80000
NAND erase: device 0 offset 0x80000, size 0x80000
Erasing at 0xe0000 -- 100% complete.
OK
U-Boot# nand write.i 0x82000000 0x80000 0x80000
NAND write: device 0 offset 0x80000, size 0x80000
524288 bytes written: OK
待uboot烧写完毕后,将JP6短接到NAND引脚并重新启动M3350_EV_BOARD,可以看到uboot正常启动并打印出相关信息,说明MLO以及uboot都已通过串口固化在NAND Flash。

产品应用笔记 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.
8 如何通过串口烧写uboot 5. 免责声明
广州致远电子股份有限公司所提供的所有服务内容旨在协助客户加速产品的研发进度,在服务过程中所提供的任何程序、文档、测试结果、方案、支持等资料和信息,都仅供参考,客户有权不使用或自行参考修改,本公司不提供任何的完整性、可靠性等保证,若在客户使用过程中因任何原因造成的特别的、偶然的或间接的损失,本公司不承担任何责任。

相关主题