本文主要描述如何在EVB335X-II上实现从SPI Flash启动系统,包括启动方式的修改,u-boot编译,SPI Flash的烧写。EVB335X-II使用的SPI Flash型号为W25Q32FV,大小为4M-Byte,挂载在SPI0总线上。以下为功能实现步骤。
一 修改核心板启动方式:
根据COM335X核心板设计原理图,从SPI0启动时,SYSBOOT[4:0]应该为11000b。因此,核心板应做以下修改:焊接R9、R8、R15、R14、R13,不焊接R17、R16、R7、R6、R5,如下图所示:
二:编译u-boot
在终端输入以下命令:
$makecom335x_spi_128_config
(注:128是指RAM大小为128M,如果使用的RAm大小为256M或者512M,请将128改为256或者512.)
$makeARCH=arm CROSS_COMPILE=/opt/arm-2010.09/bin/arm-none-linux-gnueabi-
编译完成,在当前目录下生成MLO、MLO.byteswap和u-boot.img文件,在spl目录下生成u-boot-spl.bin文件。其中,MLO.byteswap是烧写到SPI Flash的专用文件。
三:SPI Flash烧写步骤
下载 MLO.byteswap和 u-boot.img 到 SPI Flash 中,可以通过网口、串口、USB 口、SD Card 将上一步骤中编译好的文件下载到 SDRAM中,然后通过运行的 u-boot 将程序烧写到 SPIFlash 中。本文以从串口下载为例进行说明。
1、将调试串口连接到电脑上,打开Windows下的超级终端,设置如下参数:波特率(115200)、数据位(8 位)、停止位(1 位)、校验位(无)、数据流控制(无),如下图所示:
2、给开发板上电,当超级终端打印出“CCCCC”字符后,表示内部ROM工作正常,然后选择超级终端:传送 → 发送文件→ 1K Xmodem,如下图所示:
3、点击→浏览,选择u-boot-spl.bin文件
然后,选择发送,传输u-boot-spl.bin文件
4、传输成功,则u-boot-spl.bin会自动在CPU内部RAM中运行,初始化外部DDR3RAM,并自动引导待下载到DDR3 RAM中的u-boot.bin,如下图所示:
5、 这时会再次出现”CC”字符,此时可以传输u-boot.img文件,
选择:传送 → 发送文件 → Ymodem
6、点击→浏览,选择u-boot.img文件
然后,选择发送,传送u-boot.img文件。注意:此过程可能需要等待50s左右才能开始传输。
7、u-boot.img传输成功后,SPL会自动引导在DDR3 RAM的u-boot
8、在3秒内单击回车键,会出现“U-Boot# ”提示,此时u-boot已经正确烧写到DDR3 RAM中,但还没有烧写到SPI Flash中。接下来我们要通过UART串口将镜像烧到SPI Flash.
9、 在“U-Boot# ”提示下依次输入:
U-Boot# mw.b 0x81000000 0xFF 0x20000 //把内存0x81000000开始的0x20000字节设为0xFF
U-Boot# loadb 0x81000000 //等待从串口下载文件至内存0x81000000处
打开传输协议,选择:传送 → 发送文件 → Kermit
10、点击→浏览,选择MLO.byteswap文件
然后,选择发送,传输MLO.byteswap文件。
11、传输完成后,在“U-Boot# ”提示下依次输入:
U-Boot# sf probe 0 //检测SPI0上的flash是否存在,操作SPI Flash前必须运行一次
U-Boot# sf erase 0 +0x400000 //擦除SPI Flash
U-Boot#sf write 0x81000000 0 ${filesize} //将DDR3中的MLO文件烧写到SPI Flash起始地址为0的区域
此时,MLO已经烧写到SPIFlash中,接下来要将u-boot.img烧写到SPIFlash中。
12、在“U-Boot# ”提示下依次输入:
U-Boot# mw.b 0x81000000 0xFF 0x1e0000
U-Boot# loadb 0x81000000
打开传输协议,选择:传送 → 发送文件 → Kermit
13、点击浏览,选择u-boot.img文件,然后选择发送,传输u-boot.img文件
14、传输完成后,在“U-Boot# ”提示下依次输入:
U-Boot# sfwrite 0x81000000 0x20000 ${filesize}//将DDR3中的MLO文件烧写到SPI Flash起始地址为 0x20000的区域
烧写完成后,重启开发板,系统从SPI Flash启动。