飞思卡尔IMX515评估板系统烧录和启动
1. 搭建编译环境
下载WCE600_11.04.02_ER.msi安装,生成WINCE600文件夹,此文件下包含有OSDesigns、PLATFORM和SUPPORT。
(1) 工程文件
采用OSDesignsiMX51-EVK-Mobilit下的工程文件,去掉环境变量BSP_NOTOUCH=1和Bsp_ar6102_sdio=1
(2) BSP修改
iMX51-EVK.bat文件下增加
set IMGRAM256=1//因为我们去掉EVK板的256MB,只剩下256MB
set IMGSDMMC=1//因为我们要从SDMMC卡启动
2. 启动模式
参考《evk_imx51_Hardware_UG.pdf》和我之前写的一篇文章:
图1
3. 烧录镜像
我们采用EVK板的SDMMC启动,怎么烧录系统呢?看我之前写的博文:
http://blog.csdn.net/loongembedded/article/details/24795863
4. 烧录系统后启动
刚开始无法正常启动,需要做下面的配置:
图2
可是在启动过程中, eboot阶段显示的花屏,经过查找eboot阶段在OEMPreDownload()函数初始化显示屏,代码如下:
#ifdef IMGRAM256 KITLOutputDebugString("Splash screen is not supported for 256M ram. "); #else #ifdef IMGRAM128 KITLOutputDebugString("Splash screen is not supported for 128M ram. "); #else //Initialize panel display on eboot EbootDisplayInit(); #endif #endif
可见只在内存为512MB的之后才初始化显示器,但我们的EVK板是只有256MB的,所以改为不管内存多大都调用
EbootDisplayInit()
改完后启动直接卡死在EbootDisplayInit(),为什么呢?原来是用于显存的起始地址位于第2个256MB的RAM,见imag_cfg.h的定义:
#define IMAGE_BOOT_PICTURE_RAM_OFFSET (0x10000000) #define CSP_BASE_MEM_PA_CSD0 (0x90000000) #define IMAGE_BOOT_RAMDEV_RAM_PA_START CSP_BASE_MEM_PA_CSD0 #define IMAGE_BOOT_PICTURE_RAM_START (IMAGE_BOOT_RAMDEV_RAM_PA_START+IMAGE_BOOT_PICTURE_RAM_OFFSET)
这部分可以结合CPU手册来理解,那怎么修改offset的值呢?先来看config.bib文件相关部分:
; Obsolete region, free them for more Program Memory ; VPU 87700000 00080000 RESERVED ; IPU 87780000 00880000 RESERVED #if "$(IMGRAM256)" == "1" FEC 8FFFC000 00004000 RESERVED #else #if "$(IMGRAM128)" == "1" FEC 87FFC000 00004000 RESERVED #else FEC 9BFFC000 00004000 RESERVED #endif #endif
根据这个,我决定在8FFFC000之前预留2MB的用于显示开机画面,所以相应的修改如下:
#ifdef IMGRAM256 #define IMAGE_BOOT_PICTURE_RAM_OFFSET (0x0FDFC000) #else #ifdef IMGRAM128 #define IMAGE_BOOT_PICTURE_RAM_OFFSET (0x07DFC000) #else #define IMAGE_BOOT_PICTURE_RAM_OFFSET (0x10000000) #endif #endif
同时对eboot.bib做相应的修改
; SCREEN BUFFER
;PIC 90000000 00200000 RESERVED
PIC 8FDFC000 00200000 RESERVED ;kandiadd at 2015.02.02
修改之后测试,在启动进入系统的时候直接黑屏,串口提示信息如下:
ERROR:F:WINCE600PLATFORMiMX51-EVKSRCDRIVERSIPUV3DISPLAY.dvi.cpp line 463:I2CReadNBytes:I2C Write to DVI fail! - ERRORCode:-7
ERROR:F:WINCE600PLATFORMiMX51-EVKSRCDRIVERSIPUV3DISPLAY.dvi.cpp line 463:I2CReadNBytes:I2C Write to DVI fail! - ERRORCode:-7
提示往DVI写寄存器出错,但因为EVK评估板上暂时用不上DVI,所以去掉:
图3
到此系统可以正常启动和显示了。