1、我的 ep9312开发板烧写流程随笔 (2009-08-02 16:12) 分类: ecos和 redboot开发 Attempt to read the “CRUS” or “SURC” HeaderID in ASCII in FLASHmemory at (FLASH Base + 0x1000), verifying the HeaderID. This is readin for each FLASH Chip select, and then do the following:所以在0x1000开始处存放了 0x53555243数据,即:CRUS,但是 Boot ROM读取 0x1
2、000数据为 CRUS之后,仍然将执行权交给 0偏移处的语句.如果 CRUS放到了 0x0偏移,那么 Code execution will start at address (FLASH base + 0x4). Processor will be in ARM SVC mode.和 0x1000不太一样的是,Boot ROM 此时会将执行权交给 0x04偏移处的语句.AtmelF1024为 1M的 SPI接口存储器arm-linux-objdump -DS -b binary -m arm redboot.bin/=默认的 download下载源程序,存在不等待数据发送完成就发送下一个的错
3、误,所以在 SendChar函数中加入 WaitTillEmpty()需要 7分钟烧 redboot或者usleep(1000)仅仅需要 3.5分钟都能够解决问题,不能操作 ttyUSB0串口,添加支持代码之后执行 make,即可正常使用 linux下的 download软件了.download设置为 9600,n,8,1之后发送 2048字节的启动 loader,即flasher.rom,当发送完 2048字节的 flasher.rom之后,boot rom 会将执行权交给 flasher.rom程序,之后 flasher.rom程序会先发送字符上来,然后就是和 download交互,完成
4、redboot.bin文件的下载和烧写了. /=1.将串口连接到 P1(就是最靠外边的那个串口);将 JP5跳到靠近 cpu的那边.2.9600,8,n,1配置之后,按开发板上的 reset键,就可以在串口上见到提示符,每按一次出现一个提示符.3.使用 cmd,下载通过串口程序,因为我使用的是 usb2serial,它生成出来的串口号为 4,所以下面使用download.exe -p4 -b115200 redboot.bin,回车之后提示:Waiting for the board to wakeup.然后按一下开发板上的复位键,数据就开始下载了.C:Documents and Settin
5、gsAdministratorE:开发板光盘EP9315-CD我的研究download.exe -p4 -b115200 E:开发板光盘EP9315-CD我的研究redboot.binProgramming the FLASH.( 10%)4.下载完成之后,将 JP5跳到远离 CPU的一端或者取下,串口波特率改为 57600,复位开关或者重新上电,即可看到 redboot的启动 log了.EDB9307的 RedBoot移植 硬件电路与启动方式EDB9307采用的是基于 ARM920T的 EP9307的芯片;SDRAM接在 nSDCE0上,两块 K4S561632E-UC75,总大小为 64M
6、;FLASH接在 nCS6上,一块 JS28F128-J3D75,总大小为 16M,128KB/Block。EDB9307采用的是 EP9307芯片的片内 Boot ROM启动,关于具体的启动方式可参见 EDB9307的Technical Reference Manual,我只简单描述 Boot ROM中的部分启动方式。UART Download模式:启动 Cirrus Logic提供的 download.exe程序,烧写 bin文件;例:download.exe -p 1 -7 9307 Redboot.binbin文件被下载,并被烧写到 Flash的零地址处;烧写完成后会有烧写成功的提示注
7、:关于 download程序,Cirrus 公司有提供源码,我没有分析过源码,但是从启动方式的描述中得知,这种模式只会从串口接受 2KB的数据并存储到 MAC的缓冲区启动,所以猜测这段 2KB的程序应该是个负责下载和烧写的程序,如果大家有兴趣的,可以自己去研究。另外,下载后再重新 Reset板子后,上电初始化 Flash时在超级终端会出现如下的信息:FLASH configuration checksum error or invalid key解决的方法可以参考http:/ flash并且对目标板的 IP进行设置,里面的两篇文章都分析得比较详细。FLASH启动模式:先检测 Flash的 0x
8、0地址处是否有 CRUS或 SURC的 ASCII码;如果有,从 Flash的 0x4地址处读取代码执行;如果没有,检测 Flash的 0x1000处是否有 CRUS或 SURC的 ASCII码;如果有,从 Flash的 0x0地址处读取代码执行;注:Boot ROM 中 Flash的启动方式为以上两种,Cirrus 提供的 Redboot采用的是后一种启动方式下面转载的是其他人对 U-Boot移植过程(转帖),暂时我还没有试过移植中首先参考了 EP9312的一个 Patch,在此 Patch的基础上进行了移植。移植过程修改 board/edb93xx目录下文件:修改 config.mk中的
9、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