zoukankan      html  css  js  c++  java
  • 【原创】回答网友关于ARM9 S3C2440 wince6.0 内存 128M的使用问题

     

           S3C2440 原先的时候接两块32MSDRAM 片选都连接到nGCS6上。现在改成两块64MSDRAM片选也是nGCS6上。

           软件的修改分为四个大块:

           1 Stepldr:

               1startup.s中主要是

                   ldr  r0,=0x30000000   ; Start address (physical 0x3000.0000).
                   [ SDRAMTYPE = 128 
                    ldr  r9,=0x08000000   ; 128MB of RAM.
                    |
                    ldr  r9,=0x04000000   ; 64MB of RAM.
                   ]

                   一目了然,不再解释 

                2option.h                      

                     #ifdef BSP_SDRAM_128M
                         #define _ISR_STARTADDRESS  0x37ffff00
                         #define _MMUTT_STARTADDRESS 0x37ff8000
                         #define _STACK_BASEADDRESS  0x37ff8000
                         #define HEAPEND      0x37ff0000

                     #else
                         #define _ISR_STARTADDRESS  0x33ffff00    
                         #define _MMUTT_STARTADDRESS 0x33ff8000
                         #define _STACK_BASEADDRESS  0x33ff8000
                         #define HEAPEND      0x33ff0000
                     #endif

                  此时相应的改掉其他文件中与此宏们相关的,不再赘述

                3memcfg.inc

                      [ SDRAMTYPE = 128 
                      B6_SCAN  EQU 0x2 ;10bit
                      |
                      B6_SCAN  EQU 0x1 ;9bit
                      ]

                    原因是列地址线的位数不同。
            2EBOOT: startup.s

                     B6_SCAN     EQU     (0x1)    ; 9bit

                     改为:

                     B6_SCAN     EQU     (0x2)    ; 10bit

               原因是列地址线的位数不同。

               BANKSIZE寄存器的修改,原先的时候BANK大小是64M,因为两边都挂在BANK6,而现在变成了128M。看三星手册这里只修改一下即可

                DCD 0x32        ; BANKSIZE

    未变

          3config.bib文件的修改:

                   RAM     82400000  01c00000  RAM

    改为:

        RAM     82400000  05c00000  RAM

         4oemaddrtab_cfg.inc的修改:

               g_oalAddressTable

    DCD     0x80000000, 0x30000000, 64      ; 64 MB DRAM BANK 6

    改为

            DCD     0x80000000, 0x30000000, 128      ; 128 MB DRAM BANK 6(暂时改回去)

    并在最后加上:

    DCD     0x94D00000, 0x34000000, 64      ; 64 MB SDRAM BANK 6 具体如何加

          如果按照以上步骤操作了,你还是不能启动,那你就需要在你的BSP中把所有用到静态虚拟地址的地方,挨个对比,看看是不是跟你在oemaddrtab_cfg.inc中设置的一一对应。

     

    5、修改C:/WINCE600/PLATFORM/COMMON/SRC/COMMON/OTHER/memory.cOEMGetExtensionDRAM函数,或者在OAL里面加入OEMGetExtensionDRAM函数(推荐后者,因为不用编译非BSP部分,容易移植维护)修改如下:

     

    BOOL
    OEMGetExtensionDRAM(
        LPDWORD lpMemStart,
        LPDWORD lpMemLen
        )
    {
        *lpMemStart = 0x94D00000;
        *lpMemLen   = 0x4000000;//64M
        return TRUE;

     //return FALSE;
    }

     

     系统起不来;串口打印如下消息:

     

    Microsoft Windows CE Bootloader for UESTC2440 Version 6.0 Built Sep  8 2011

    Press [ENTER] to launch image stored on boot media, or [SPACE] to enter boot monitor.

    Initiating image launch in 0 seconds.

    Launching image from boot media ...

    OEMPlatformInit: IMAGE_TYPE_RAMIMAGE

    +=OEMVerifyMemory+ dwStartAddr:0x80200000  dwLength:0x4

    RAM image 0xa 0x80200003

    +=OEMVerifyMemory+ dwStartAddr:0x80201000  dwLength:0x4

    RAM image 0xa 0x80201003

    System ready!

    Preparing for download...

    waitforconnect

    INFO: OEMLaunch: Jumping to Physical Address 0x30201000h (Virtual Address 0x80201000h)...

     

     

    ------------------------上面是网友给我的邮箱的提问,我发到博客来回答,希望有更多的人来一起学习讨论。

     

    回复:

    你测试一下是否128M空间是否可以读写,你现在要么是内存 64M没用起来,要么不是内存,不过很像是内存没用起来,

    BOOL
    OEMGetExtensionDRAM(
        LPDWORD lpMemStart,
        LPDWORD lpMemLen
        )
    {
        *lpMemStart = 0x94D00000;
        *lpMemLen   = 0x4000000;//64M
        return TRUE;

     //return FALSE;
    }

    改成

    BOOL
    OEMGetExtensionDRAM(
        LPDWORD lpMemStart,
        LPDWORD lpMemLen
        )
    {
        
    return FALSE;
    }

    试试,看看是否是内存问题,如果改成这样能够启动,那么说明你另外一块64M内存没有用起来,就是在bootloader 这块内存都没工作。

     

    这是我写的一篇扩展成功的文章。我在wince5.0 和wince6.0 都成功使用的了。有参考价值的。

     

     

     

     

  • 相关阅读:
    TCP/IP网络编程之优于select的epoll(一)
    TCP/IP网络编程之I/O流分离
    TCP/IP网络编程之套接字与标准I/O
    TCP/IP网络编程之多播与广播
    TCP/IP网络编程之多种I/O函数
    TCP/IP网络编程之I/O复用
    TCP/IP网络编程之进程间通信
    TCP/IP网络编程之多进程服务端(二)
    服务器被入侵了怎么办?
    sentos7为例添加python3和python2共存
  • 原文地址:https://www.cnblogs.com/gooogleman/p/2172152.html
Copyright © 2011-2022 走看看