1.硬件电路与启动方式
EDB9315A开发板采用的是基于ARM920T的EP9315的芯片;
SDRAM接在nSDCE0上,两块K4S561632E-UC75,总大小为64M;
FLASH接在nCS6上,一块JS28F128-J3D75,总大小为16M,128KB/Block。
EDB9315A采用的是EP9315芯片的片内Boot ROM启动,关于具体的启动方式可参见EDB9315A的《Technical Reference Manual》,我只简单描述Boot ROM中的部分启动方式。
UART Download模式:
启动Cirrus Logic提供的download.exe程序,烧写bin文件;
例:download u-boot.bin
按下S1进入串口下载模式;
接着按下S3,当红灯灭的时候放开S1;
bin文件被下载,并被烧写到Flash的零地址处;
烧写完成后释放S3。
注:关于download程序,Cirrus公司有提供源码,我没有分析过源码,但是从启动方式的描述中得知,这种模式只会从串口接受2KB的数据并存储到MAC的缓冲区启动,所以猜测这段2KB的程序应该是个负责下载和烧写的程序,如果各位有兴趣的,可以自己去研究。
FLASH启动模式:
先检测Flash的0x0地址处是否有CRUS或SURC的ASCII码;
如果有,从Flash的0x4地址处读取代码执行;
如果没有,检测Flash的0x1000处是否有CRUS或SURC的ASCII码;
如果有,从Flash的0x0地址处读取代码执行;
注:Boot ROM中Flash的启动方式为以上两种,Cirrus提供的Redboot采用的是后一种启动方式,在U-Boot中用了前一种启动方式。
2.U-Boot移植过程
移植中首先参考了EP9312的一个Patch,在此Patch的基础上进行了移植。
移植过程
修改board/edb93xx目录下文件:
修改config.mk中的TEXT_BASE地址为0xc3f00000;
修改SDRAM初始化过程,相关代码在memsetup.S和sdramcfg.S两个汇编文件里;
修改edb93xx.c文件中对0x80080018的赋值,Flash在EDB9315A中的位宽为16位;
修改flash.c文件,在EP9312的patch中,此程序是对位宽位32位的Flash(电路上应该是两块16位宽的Flash并联)进行操作,所以并不适用于EDB9315A的开发板,修要对代码进行修改,参考Intel的28F128J3的Datasheet,可了解Flash的一些基本操作过程;
EP9312的Patch对网卡和串口的初始化及操作都没有问题,所以不用修改。
注:修改U-Boot代码的过程中参考了Cirrus Logic提供的Redboot代码,从中得到了许多帮助。
使用方法
1.
EP9312 Patch(本地下载)
原下载地址:http://www.dave-tech.it/download/misc/sw/edb93xx/u-boot-edb93xx-3
2.
EDB9315A Patch
3.
u-boot.bin(EDB9315A)
补:此uboot引导内核要跑飞,具体原因没有时间找,但可以将uboot引导中效验代码段去掉,直接引导zImage文件,可正常运行。
EDB9315A开发板采用的是基于ARM920T的EP9315的芯片;
SDRAM接在nSDCE0上,两块K4S561632E-UC75,总大小为64M;
FLASH接在nCS6上,一块JS28F128-J3D75,总大小为16M,128KB/Block。
EDB9315A采用的是EP9315芯片的片内Boot ROM启动,关于具体的启动方式可参见EDB9315A的《Technical Reference Manual》,我只简单描述Boot ROM中的部分启动方式。
UART Download模式:
启动Cirrus Logic提供的download.exe程序,烧写bin文件;
例:download u-boot.bin
按下S1进入串口下载模式;
接着按下S3,当红灯灭的时候放开S1;
bin文件被下载,并被烧写到Flash的零地址处;
烧写完成后释放S3。
注:关于download程序,Cirrus公司有提供源码,我没有分析过源码,但是从启动方式的描述中得知,这种模式只会从串口接受2KB的数据并存储到MAC的缓冲区启动,所以猜测这段2KB的程序应该是个负责下载和烧写的程序,如果各位有兴趣的,可以自己去研究。
FLASH启动模式:
先检测Flash的0x0地址处是否有CRUS或SURC的ASCII码;
如果有,从Flash的0x4地址处读取代码执行;
如果没有,检测Flash的0x1000处是否有CRUS或SURC的ASCII码;
如果有,从Flash的0x0地址处读取代码执行;
注:Boot ROM中Flash的启动方式为以上两种,Cirrus提供的Redboot采用的是后一种启动方式,在U-Boot中用了前一种启动方式。
2.U-Boot移植过程
移植中首先参考了EP9312的一个Patch,在此Patch的基础上进行了移植。
移植过程
修改board/edb93xx目录下文件:
修改config.mk中的TEXT_BASE地址为0xc3f00000;
修改SDRAM初始化过程,相关代码在memsetup.S和sdramcfg.S两个汇编文件里;
修改edb93xx.c文件中对0x80080018的赋值,Flash在EDB9315A中的位宽为16位;
修改flash.c文件,在EP9312的patch中,此程序是对位宽位32位的Flash(电路上应该是两块16位宽的Flash并联)进行操作,所以并不适用于EDB9315A的开发板,修要对代码进行修改,参考Intel的28F128J3的Datasheet,可了解Flash的一些基本操作过程;
EP9312的Patch对网卡和串口的初始化及操作都没有问题,所以不用修改。
注:修改U-Boot代码的过程中参考了Cirrus Logic提供的Redboot代码,从中得到了许多帮助。
使用方法
#tar -zxf patchfile.tar.gz
#cp patchfile u-boot-1.1.2/
#cd u-boot-1.1.2
#patch -p1 < patchfile
#make edb9315_config
#make
附:#cp patchfile u-boot-1.1.2/
#cd u-boot-1.1.2
#patch -p1 < patchfile
#make edb9315_config
#make
1.

原下载地址:http://www.dave-tech.it/download/misc/sw/edb93xx/u-boot-edb93xx-3
2.

3.

补:此uboot引导内核要跑飞,具体原因没有时间找,但可以将uboot引导中效验代码段去掉,直接引导zImage文件,可正常运行。