基于IMX515 EVK+WINCE6.0---DDR2由512MB改为256MB

 

1.      DDR2由512MB改为256MB的硬件修改

DDR2采用的是EDE1116AEBG,它的存储单元组织是8Mwords × 16 bits × 8 banks (EDE1116AEBG),它的方框图如下:


图1

8banks指一片EDE1116AEBG有8个bank,每个bank有8M(8192)个存储单元(这里为word),每个存储单元有16 bits,所以这里的1 word=16 bits=2Bytes。

 

EDE1116AEBG地址引脚表如下图:

基于IMX515 EVK+WINCE6.0---DDR2由512MB改为256MB_第1张图片

图2

由此可知需要CPU引出13个地址线用于选择行地址和列地址(分时复用)。

 

EVK采用4片EDE1116AEBG,原理图如下:

基于IMX515 EVK+WINCE6.0---DDR2由512MB改为256MB_第2张图片

图3

因为每片EDE1116AEBG都有8个bank,所以需要3个bank选择引脚,这里是DRAM_SDBA[2:0],IMX515最多也只有3个bank选择引脚。

 

Bank-1Lower_Half和Bank-1Upper_Half标识的这两片DDR2和CPU的连接引脚差别,在于Lower和Upper的DQ[15:0]连接的分别是内存接口DRAM_D[31:16](数据引脚高地址)和DRAM_D[15:0](数据引脚低地址)。

 

Bank-1和Bank-2主要是分别通过不同的DRAM_CS0和DRAM_CS1片选信号来选中,相应地Bank-1和Bank-2也需要不同的时钟信号DRAM_SDCLK0和DRAM_SDCLK1,这样CPU就可以识别到512MB的DDR2。我们的平台因为值支持256MB,且用的也是EDE1116AEBG,所以原理图上只保留了图3的左边。

 

2.      DDR2有512MB改为256MB的软件修改

对于IMX51+WINCE6.0平台,EVK已经做了大小为128、256和512MB的兼容,如果需要分别支持这几种大小,只需要在系统工程文件中定义环境变量IMGRAM128=1、IMGRAM256=1和不定义这两个环境变量。

 

那不同DDR2大小,需要的设置有哪些不同?查找整个BSP包,相关的文件有SRC\INC下的image_cfg.h、image_cfg.inc和oemaddrtable_cfg.inc文件,FILES\config.bib和\sources.cmn。

 

⑴sources.cmn文件相关内容

!IF "$(IMGRAM256)" !=""

CDEFINES=$(CDEFINES) -DIMGRAM256

ADEFINES=$(ADEFINES) -pd "IMGRAM256SETL {TRUE}"

!ELSE

!IF "$(IMGRAM128)" !=""

CDEFINES=$(CDEFINES) -DIMGRAM128

ADEFINES=$(ADEFINES) -pd "IMGRAM128SETL {TRUE}"

!ELSE

CDEFINES=$(CDEFINES) -DIMGRAM512

ADEFINES=$(ADEFINES) -pd "IMGRAM512SETL {TRUE}"

!ENDIF

!ENDIF

 

表示如果系统工程文件定义了环境变量IMGRAM256且不为0,那么就定义IMGRAM256供BSP使用,且设置IMGRAM256=TRUE,其他类似。

 

此文件中尽量将驱动中用到的宏,放到\sources.cmn里面来定义,这样有一个好处,就是宏定义直观,方便查看,修改快捷

 

⑵oemaddrtable_cfg.inc文件

g_oalAddressTable

 

   IF :DEF: IMGRAM256

   DCD 0x80000000, CSP_BASE_MEM_PA_CSD0, 256           ; RAM image mapping

   ELSE   

   IF :DEF: IMGRAM128

   DCD 0x80000000, CSP_BASE_MEM_PA_CSD0, 128           ; RAM image mapping

   ELSE   

   DCD 0x80000000, CSP_BASE_MEM_PA_CSD0, 256           ; RAM image mapping

   DCD 0x90000000, CSP_BASE_MEM_PA_CSD1, 192           ; Remaining 64M are reserved for IPU

ENDIF 

对于128和256MB的支持,差别只在于大小;512MB是在256MB的增加:

DCD 0x90000000, CSP_BASE_MEM_PA_CSD1,192 

CSP_BASE_MEM_PA_CSD0=0x90000000,CSP_BASE_MEM_PA_CSD1=0xA0000000,为什么是这两个值,这有CPU的内存映射决定的,如下图:


图4

由图4可知,IMX515最大也只支持512MB的DDR2,这恰好也是WINCE6.0支持的最大值。

 

⑶config.bib文件

; Obsolete region, free them for moreProgram Memory

;                   VPU         87700000    00080000   RESERVED

;                   IPU         87780000    00880000   RESERVED

为了释放更多的编程内存,把为IPU(图像处理单元)和VPU(视频处理单元)预留的内存释放掉。

#if "$(IMGRAM256)" =="1"

                    FEC         8FFFC000    00004000   RESERVED

#else

#if "$(IMGRAM128)" =="1"

                    FEC         87FFC000    00004000   RESERVED

#else

                    FEC         9BFFC000    00004000   RESERVED

#endif

#endif

为FEC(Fast Ethernet Controller)预留16KB的内存。

基于IMX515 EVK+WINCE6.0---DDR2由512MB改为256MB_第3张图片

图5

; --------------------------- RAM image(Windows CE) -------------------

;  Start Addr      End Addr        Mem Type    Region Name     Size

;  0x80000000      0x801FFFFF      SDRAM       reserved         2 MB

;  0x80200000      0x85FFFFFF      SDRAM       NK              94 MB

;  0x86000000      0x9BFFBFFF      SDRAM       RAM            352 MB - 16KB

;  0x9BFFC000      0x9BFFFFFF      SDRAM       reserved        16 KB                    

; ----------------------------------------------------------------------

#if "$(IMGRAM256)" =="1"

IF IMGSMALLNK !

   #define RAM_SIZE     09FFC000

ENDIF

IF IMGSMALLNK

   #define RAM_SIZE     0CEFC000

ENDIF

#else

#if "$(IMGRAM128)" =="1"

IF IMGSMALLNK !

   #define RAM_SIZE     01FFC000

ENDIF

IF IMGSMALLNK

   #define RAM_SIZE     04EFC000

ENDIF

#else

IF IMGSMALLNK !

   #define RAM_SIZE     15FFC000

ENDIF

IF IMGSMALLNK

   #define RAM_SIZE     18EFC000

ENDIF

#endif

#endif

ENDIF

⑷image_cfg.h

// FEC DMA buffer

#ifdef IMGRAM256

#define IMAGE_SHARE_FEC_RAM_OFFSET           (0xFFFC000)

#else

#ifdef IMGRAM128

#define IMAGE_SHARE_FEC_RAM_OFFSET           (0x7FFC000)

#else

#define IMAGE_SHARE_FEC_RAM_OFFSET           (0x1BFFC000)

#endif

#endif

#define IMAGE_SHARE_FEC_RAM_PA_START         (CSP_BASE_MEM_PA_CSD0+IMAGE_SHARE_FEC_RAM_OFFSET)

#define IMAGE_SHARE_FEC_RAM_SIZE             (16*1024)

根据condig.bib的配置来定义,在内存中预留16KB用于FEC的DMAbuffer

 

//Reserved video memory 64M

#ifdef IMGRAM256

#else

#ifdef IMGRAM128

#else

#define IMAGE_WINCE_VIDEO_RAM_OFFSET         (0x1C000000)//64MB

#define IMAGE_WINCE_VIDEO_RAM_PA_START      (CSP_BASE_MEM_PA_CSD0+IMAGE_WINCE_VIDEO_RAM_OFFSET)

#define IMAGE_WINCE_VIDEO_RAM_SIZE           (64*1024*1024)

#endif

#endif

这里从512MB 的DDR2预留64MB用于视频内存。

⑸image_cfg.inc

;; FEC DMA buffer

   IF :DEF: IMGRAM256

IMAGE_SHARE_FEC_RAM_OFFSET          EQU      (0xFFFC000)

   ELSE

   IF :DEF: IMGRAM128

IMAGE_SHARE_FEC_RAM_OFFSET          EQU      (0x7FFC000)

   ELSE

IMAGE_SHARE_FEC_RAM_OFFSET          EQU      (0x1BFFC000)

   ENDIF

   ENDIF

IMAGE_SHARE_FEC_RAM_PA_START        EQU     (CSP_BASE_MEM_PA_CSD0+IMAGE_SHARE_FEC_RAM_OFFSET)

IMAGE_SHARE_FEC_RAM_SIZE            EQU      (16*1024)

 

;Reserved video memory 64M

   IF :DEF: IMGRAM256

   ELSE

   IF :DEF: IMGRAM128

   ELSE

IMAGE_WINCE_VIDEO_RAM_OFFSET        EQU     (0x1C000000)

IMAGE_WINCE_VIDEO_RAM_PA_START      EQU     (CSP_BASE_MEM_PA_CSD0+IMAGE_WINCE_VIDEO_RAM_OFFSET)

IMAGE_WINCE_VIDEO_RAM_SIZE          EQU      (64*1024*1024)

   ENDIF

   ENDIF

 

之前用过三星的2440、2443、2451和6410,内存方面的修改涉及文件更多,飞思卡尔这方面做的比较规范,通过定义不同的环境变量既可以实现。

 

你可能感兴趣的:(基于IMX515 EVK+WINCE6.0---DDR2由512MB改为256MB)