none
Add 128MB SDRAM support to i.MX25 WinCE 6.0 image RRS feed

  • Question

  • Hello,

    I am working with i.MX25 and WinCE 6.0. We use a self made i.MX25 Core Module. This core module provides 64MB and 128MB SDRAM. The 64MB version is working well with our WinCE BSP. But now I have problems to use the second SDRAM Bank in WinCE.

    To our hardware: On the fisrt SDRAM Chip Select (phy. address 0x80000000) we have 64MB and on the second SDRAM Chip Select (phy. address 0x90000000) we have 64MB. The two banks are going to be initialized from the Bootloader.

    In WinCE I have made the following changes for 128MB support:

    oemaddrtab_cfg.inc:

    g_oalAddressTable
    
      IF :DEF: SDRAM_SIZE_128_MB
        DCD 	0x80000000,     CSP_BASE_MEM_PA_CSD0,   64           ; RAM image mapping  
        DCD     0x84000000,     CSP_BASE_MEM_PA_CSD1,   64
      ELSE
        DCD 	0x80000000,     CSP_BASE_MEM_PA_CSD0,   64           ; RAM image mapping  
      ENDIF    

    config.bib:

      IF SDRAM_SIZE_128_MB
        #define NKRAM_SIZE  04F00000    ; 79MB SDRAM
      ELSE
        #define NKRAM_SIZE  00F00000    ; 15MB SDRAM
      ENDIF
    
    ;**************************** MEMORY SECTION ***************************
    MEMORY
    
    ; --------------------------- RAM image --------------------------------
    ;   Start Addr      End Addr        Mem Type    Region Name     Size
    ;   0x80000000      0x80100000      SDRAM       reserved         1 MB
    ;   0x80100000      0x81100000      SDRAM       NK              16 MB
    ;   0x81100000      0x84000000      SDRAM       RAM             47 MB
    ; ----------------------------------------------------------------------
    ;   Name            Address        Size        T  ype
        BOOT_AND_OTHER  80000000       000FF000       RESERVED
        ARGS            800FF000       00001000       RESERVED
        NK              $(NK_START)    $(NK_SIZE)     RAMIMAGE
        RAM             $(NKRAM_START) $(NKRAM_SIZE)  RAM

    If I try to start WinCE the system hangs after the following debug messages:

    ...

    Setting up softlog at 0x87ffc000 for 0x800 entries
    Booting Windows CE version 6.00 for (ARM)
    &pTOC = 820bbc1c, pTOC = 820ac564, pTOC->ulRamFree = 820c0000, MemForPT = 00001000
    Configuring: Primary pages: 24366, Secondary pages: 0, Filesystem pages = 1522

    Booting kernel with clean memory configuration:
    Memory Sections:
    [0] : start: 820c2000, extension: 0000c000, length: 05f2e000
    NKStartup done, starting up kernel.
    Windows CE KernelInit

    I hope somebody could help.

    Best regards,

    Andreas

    Thursday, September 29, 2011 7:37 AM

Answers

All replies

  •  Hi Andreas,

    We had a similar problem and it was caused by disabling the second Bank SDRAM controller on the OALPowerInit. You maybe could have a look if that is the case.

    I also think that Windows CE only allows continuous physical memory for RAM and that you need to use OEMEnumExtensionDRAM  in your OAL for the second memory bank.

    Best regards

    Mike

    Thursday, September 29, 2011 8:33 AM
  • Hi Mike,

    I can't find the function OALPowerInit in my BSP. In my case it looks like the second SDRAM bank isn't disabled, because I can access the bank after the system hangs on WinCE start with my JTAG debugger.

    Where could I find a implementation example for OEMEnumExtensionDRAM? I think the reason for my problem is the non continuous physical memory, like you mentioned.

    Best regards,

    Andreas

    Thursday, September 29, 2011 8:50 AM
  • Hi Andreas,

    maybe this can help you.

    http://technet.microsoft.com/en-us/query/aa447007

    Best regards,

    Mike

    • Marked as answer by Andreas_1981 Thursday, September 29, 2011 9:13 AM
    Thursday, September 29, 2011 8:56 AM
  • Hi Mike,

    thanks for your help. I searched for OEMEnumExtensionDRAM() and found this on Bruce Eitmans bolg:

    http://geekswithblogs.net/BruceEitman/archive/2008/12/21/platform-builder-handling-noncontiguous-ram.aspx

    I implement OEMGetExtensionDRAM() and now it is working.

    Best regards,

    Andreas

    • Marked as answer by Andreas_1981 Thursday, September 29, 2011 9:13 AM
    Thursday, September 29, 2011 9:12 AM