AT91SAM9263 WinCE开机Logo eboot增大到512K

AT91SAM9263   WinCE6.0  PB Builder

上面是开发的硬件平台跟软件平台

 

ATmel公司官方提供的BSP中,默认设置eboot的大小为192K。在官方的评估套件中,所采用的LCD是3.5寸屏幕,320*240的尺寸。该BSP对于开机Logo的处理是把logo信息转化为一个数组,并将该数据编译进整个eboot。而公司自己做的9263评估套件LCD采用了800*480的屏幕,在处理开机logo的时候就出现了一些问题。800*480 ,一个像素用一个字节来表示的话,也得384000个字节,375K,仅仅是这个数据的大小便已经超过了原来eboot的大小。所以当前必须要做的就是增大eboot。下面简述把eboot增大到512所需要修改的地方。

《第一步》

C:/WINCE600/PLATFORM/AT91SAM9263EK/FILES目录下config.bib文件

内存空间必须重新分配
; Copyright (c) 2005 Adeneo.  All rights reserved.
;
;


; Memory Map
; ----------

; 8000.0000 -+
; -----------|
; -----------| RESERVED (used by the bootloader. This section can be regained by using pNKEnumExtensionDRAM)
; -----------|
; 8005.8000 -+
;            | Ethernet Buffer      (76KB)
; 8006.b000 -+
;            | drivers global                 (4KB)
; 8006.c000 -+
;            |
;            | OS (NK) Code (1MB)
;            |
; 8015.E000 -+   if (AUTOSIZE = ON) then this thresold will change depending of the image's content.
;            |
;            | OS (NK) RAM (13.6 MB)
;            |
; 80f0.0000 -+
;    | Video Memory (1 MB)
; 8100.0000 -+

 

;

MEMORY

;   Name     Start     Size      Type
;   -------  --------  --------  ----
    BLDR     80000000  00180000  RESERVED
    EMACBUF  80180000  00013000  RESERVED
    DRVGLOB  80193000  00001000  RESERVED
    NK       80194000  00200000  RAMIMAGE
    RAM      80394000  03A6C000  RAM
    VIDEOMEM 83e00000  00200000  RESERVED

CONFIG

    AUTOSIZE=ON
    KERNELFIXUPS=ON


; @CESYSGEN IF !NK_NKNOCOMP
   COMPRESSION=ON
; @CESYSGEN ENDIF !NK_NKNOCOMP
; @CESYSGEN IF NK_NKNOCOMP
   COMPRESSION=OFF
; @CESYSGEN ENDIF NK_NKNOCOMP

IF IMGPROFILER  
    PROFILE=ON
ELSE
    PROFILE=OFF
ENDIF

;
; ROMFLAGS is a bitmask of options for the kernel
;   ROMFLAGS    0x0001      Disallow Paging
;   ROMFLAGS    0x0002      Not all KMode
;   ROMFLAGS    0x0010      Trust Module only
;
IF IMGTRUSTROMONLY
    IF IMGNOTALLKMODE
       ROMFLAGS=12
    ELSE
       ROMFLAGS=10
    ENDIF
ELSE
    IF IMGNOTALLKMODE
       ROMFLAGS=02
    ELSE
       ROMFLAGS=00
    ENDIF
ENDIF


  
ROMSTART=80194000            ;ROMSTART项对应上面的  NK       80194000  00200000  RAMIMAGE 起始地址
ROMWIDTH=32
ROMSIZE=01C00000

《第二步》

C:/WINCE600/PLATFORM/AT91SAM9263EK/SRC/BOOTLOADER/EBOOT目录下eboot.bin

;
; Copyright (c) 2005 Adeneo.  All rights reserved.
;
;


; TITLE:        EBOOT.BIB
;
; Ethernet Boot Loader Source Module
;
; Memory Map
; ----------
;
; 8000.0000 -+
;            | Bootloader Code                (256KB)
; 8004.0000 -+
;            | Bootloader RAM (=data section) (64KB)
; 8005.0000 -+
;            | Bootloader pseudo-HEAP (custom code)  (32KB)
; 8005.8000 -+
;            | Ethernet Buffer      (76KB)
; 8006.b000 -+
;            | drivers global                 (4KB)
; 8006.c000 -+
; -----------|
; -----------|
; -----------|
; -----------|
; -----------| Reserved AREA                  (65180 KB = 63.65 MB)
; -----------|
; -----------|
; -----------|
; -----------|
; 8400.0000 -+
;
;
;******************************************************************************

MEMORY

;   Name     Start     Size      Type
;   -------  --------  --------  ----
   
EBOOT    80000000  00080000  RAMIMAGE       
    RAM      80080000  00080000  RAM
    PSHEAP   80100000  00080000  RESERVED
    EMACBUF  80180000  00013000  RESERVED
    DRVGLOB  80193000  00001000  RESERVED

CONFIG

    AUTOSIZE=OFF
 COMPRESSION=OFF
 PROFILE=OFF
 KERNELFIXUPS=ON
   
 ROMSTART=80000000
 ROMWIDTH=32
 ROMSIZE=00080000;190ko do not change ! 指定生成的eboot大小为512K字节
                 ;size of the generated eboot.nb0,eboot.nb1,...
                 ;size of the EBOOT section, limited by the internal SRAM. The size must be 80ko to be upadatable by FirstBoot


MODULES

;   Name    Path                                                    Memory Type
;   ------  ----------------------------------------------          -----------
    nk.exe  $(_TARGETPLATROOT)/target/$(_TGTCPU)/$(WINCEDEBUG)/eboot.exe  EBOOT

《第三步》

 C:/WINCE600/PLATFORM/AT91SAM9263EK/SRC/INC 目录下三个.h文件的修改

 at91sam9263EK.h修改的地方如下

 /#define VIDEOMEM_DEFAULT_IN_SDRAM
// Make sure this match up with the def in config.bib (except that here, we're using the physical address)
#define DRIVER_GLOBALS_PHYSICAL_MEMORY_START    0x20193000
#define DRIVER_GLOBALS_PHYSICAL_MEMORY_SIZE     0x1000  // 4K

 

/ Make sure this match up with the def in config.bib
#define AT91SAM9263EK_BASE_BLDRIMAGE            0x80000000
#define AT91SAM9263EK_BLDR_RESERVEDAREA_SIZE    0x00180000

 bsp_cfg.h

#define EBOOT_MAX_SIZE      0x00080000 //190ko

 bootloader_cfg.h

#define EBOOT_MAX_SIZE     0x00080000 

 

以上修改的主要是控制eboot生成的部分,还有一个重要的地方在

C:/WINCE600/PLATFORM/AT91SAM9263EK/SRC/BOOTLOADER/FirstBoot目录下main.c文件中

FIRSTBOOT_StartBoot函数内,有如下语句

//SizeToDownload = 258*1024;//EBOOT_MAX_SIZE;
 SizeToDownload = 600*1024;//EBOOT_MAX_SIZE;
 //DbgPrint("Load CE-BOOT from Flash to SDRAM/n/r");

 if (SizeToDownload == 0)
 {
  while(1);
 }

该处语句控制拷贝到内存的eboot的大小,现在eboot增大到512K了,所以所需要拷贝的部分自然而然的也要增大好多了。呵呵。

不要丢了这个地方。

!!!!!!!

{第一次编译完成以后,我就没有写文档,觉得这个过程没有想象的复杂,我都记住了,可是后来,我再一次去修改的时候,完全是按照记忆去做的,却忘记了上面的这一条,血一样的教训啊,三天,三天的时间来尝自己种的苦果子,⊙﹏⊙b汗}

 

重新编译,应该就可以了。

 

下面就是修改跟开机画面有关的代码了。在Atmel提供的官方BSP中,也包含了相关代码的支持。主要目录为

C:/WINCE600/PLATFORM/AT91SAM9263EK/SRC/BOOTLOADER/SplashScreen

主要文件为两个:

ScrConf.h

#define SCREEN_WIDTH 0x0320
#define SCREEN_HEIGHT 0x01E0
#define SCREEN_RES  0x08
#define FORCED_RGB  0x00
#define CACHED_VRAM  0x00
#define VRAM_WIDTH  0x00000320
#define VRAM_HEIGHT  0x000001E0
#define VRAM_ADDRESS 0x23E00000
#define MARGIN_UPPER 0x0016
#define MARGIN_LOWER 0x0084
#define MARGIN_LEFT  0x002D
#define MARGIN_RIGHT 0x00D2
#define VSYNC   0x01
#define HSYNC   0x01
#define PIXEL_CLOCK  0x500000

修改为自己lCD屏幕的参数设置

// Setting the Control signals
#define SCR_IO_VSYNC_CTRLR AT91C_BASE_PIOC
#define SCR_IO_VSYNC_PIN 0
#define SCR_IO_VSYNC_PERIPH PIO_PERIPH_A

不知道什么原因,BSP代码中上面的这个垂直同步信号脚 居然被配置为了输出模式,改过来,配置成外设A的功能既可

 

SplashScreen.c中,函数void IOConfig(PEBOOTSCREENDESC pScrDef)中
// Setting the Control signals
// gpio_set_gpio(SCR_IO_VSYNC_CTRLR, SCR_IO_VSYNC_PIN, 1, SCR_IO_VSYNC_PERIPH); // VSync
 gpio_set_periph(SCR_IO_VSYNC_CTRLR, SCR_IO_VSYNC_PIN, 0, SCR_IO_VSYNC_PERIPH); // VSync

 这个垂直信号的设置也存在问题,改过来

 

C:/WINCE600/PLATFORM/COMMON/SRC/SOC/ATMEL/AT91SAM9263/BOOTLOADER/SplashScreenEBOOT

该目录下没有需要修改的文件。看看即可

C:/WINCE600/PLATFORM/COMMON/SRC/SOC/ATMEL/COMMON/BOOTLOADER/SplashScreenEBOOT

该目录下主要修改的文件只有一个,BitMap.h

用GIMP 2工具可以将一个位图转化为 以数据进行索引的256色的数组。具体使用方法,随BSP安装包一起下载的文档AT91SAM9263EK CE6.0 TDD v1.3.0 A.pdf中有详细的介绍。仔细学习该文档,许多问题可以迎刃而解的。

 

按照上述步骤修改后,不出什么以为的话,开机Logo应该可以出现了。

 

另外一个问题:

仅仅是增大eboot的大小,把eboot增大到512K,不会发现什么问题,eboot下载NK也没有遇到什么问题。可是......................

 

增加开机Logo,改动相关设置以后,却出现问题了,

1: eboot下载NK的时候网络断断续续,经常出现

ng buffers, status = 60
bForceTX
Sent Frame error

这样的错误,严重的时候会一直卡着,知道看门狗动作,复位.郁闷。

2:跟严重的时候在eboot下发送

Sent BOOTME to 255.255.255.255
Sent BOOTME to 255.255.255.255

命令的时候就会出现网络问题。现象差不多同上,意思就是缓冲区溢出或者什么什么的

 一点一点的找问题。最终发现问题在一个地方

ScrConf.h文件中

#define PIXEL_CLOCK  0x500000

这个宏定义的定义。

一般情况下,对于800*480的屏幕,该宏定义一般为0x15f9000  (800*480*60)

但是如果这么大,Sent BOOTME to 255.255.255.255的时候就会出错。

 

把该值减小到0xA00000的时候Sent BOOTME to 255.255.255.255没错了,但是下载的时候有问题....

再把该值继续减小,到0x500000的时候,下载好想就比较顺畅了,一般出现的次数比较少,没有之前那么那么的频繁了。

 

同时配合下载选项的设置

Target--Connetivity Options---Download--Settings中 那个TFTP block size in bytes

默认为512K,把它减小 256 128 64 32都有不错的效果

 

why会出现如此的问题,至今还不了解。等待Ing

 

之后我又对这个现象做了测试,把问题进行了进一步的定位,跟上面所说的地方时一样的。

就是像素时钟这个宏定义的值。But  I dot know why?

转自:http://blog.163.com/qiu_zhi2008/blog/static/60140977201051763221811/

      出于某种原因,跟官方提供的BSP相比,我把eboot的大小从192K,增加到了512K。之前呢,也没有注意有什么问题,最近几日,应客户的要求在定制开机logo的时候,发现了一个问题。

      刚刚烧写玩eboot的时候,上电,logo非常干净,没有什么问题。在eboot下设置一些参数以后,保存,再次启动,却发现logo上多了一些黑色的点跟线条,疑惑ing.

 

      问题解决了,非常简单,是一个遗留问题。早在扩展eboot大小的时候就把问题埋下伏笔了。

 

     在bootloader_cfg.h 头文件中,有如下宏定义:

#define DATAFLASH_BOOTLOADER_SETTINGS_LOGICAL_OFFSET 0x00035000

如上宏定义定义了bootloader参数在DataFlash中存储的位置偏移。

如今我把eboot大小改变为512K ,所以从5000 --- 8500的区域都是eboot的区域。如果还是按照如上的定义去保存参数,那么参数刚好存在了eboot的区域,且恰好是logo的区域。


#define DATAFLASH_BOOTLOADER_CODE_LOGICAL_OFFSET  0x00005000
#define DATAFLASH_IMAGE_FLASH_OFFSET     0x00020000 

所以呢,解决方法比较简单,更改如下定义既可以了

#define DATAFLASH_BOOTLOADER_SETTINGS_LOGICAL_OFFSET 0x00085000
转自:http://blog.163.com/qiu_zhi2008/blog/static/60140977201061311253203/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值