5276|13

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教关于OEMaddressTable [复制链接]

请教大侠:
为了将nor flash从32M升级到64M,我修改了EBOOT中的flashWrite和flashErase 函数
并且修改了OEMaddressTable
其他都没修改
但是现在把boot烧写到FLASH中,不能从汇编进入到C文件中
以下是我以前的OEMAddressTable:

OEMAddressTable
        ;-----------------------------------------------------------------------------------
        ; Virtual(cached)                     Phys Addr                           #MB
        ;-----------------------------------------------------------------------------------

        IF SDRAM_SIZE_128_MB = "1"
        DCD SDRAM_BASE_C_VIRTUAL,                                SDRAM_BASE_PHYSICAL,                                128                ; (96C0 0000, A000 0000) everything SDRAM-related (eboot RAM, eboot RAMIMG, nk RAM, nk RAMIMAGE, nk MEMDEFS, ethdbg buffs)
        ELSE
        DCD SDRAM_BASE_C_VIRTUAL,                                SDRAM_BASE_PHYSICAL,                                64                ; (96C0 0000, A000 0000) everything SDRAM-related (eboot RAM, eboot RAMIMG, nk RAM, nk RAMIMAGE, nk MEMDEFS, ethdbg buffs)
        ENDIF

        DCD IM_STORAGE_BASE_C_VIRTUAL,                        IM_STORAGE_BASE_PHYSICAL,                        1                ; (8400 0000, 5C00 0000) Internal Memory-Storage
        DCD IM_CONTROL_BASE_C_VIRTUAL,                        IM_CONTROL_BASE_PHYSICAL,                        1                ; (8410 0000, 5800 0000) Internal Memory-Control
        DCD USBH_BASE_C_VIRTUAL,                                USBH_BASE_PHYSICAL,                                        1                ; (8420 0000, 4C00 0000) USB Host
        DCD MEMC_BASE_C_VIRTUAL,                                MEMC_BASE_PHYSICAL,                                        1                ; (8430 0000, 4800 0000) Memory Controller
        DCD LCD_BASE_C_VIRTUAL,                                        LCD_BASE_PHYSICAL,                                        1                ; (8440 0000, 4400 0000) LCDC
        DCD PERIF_BASE_C_VIRTUAL,                                PERIF_BASE_PHYSICAL,                                32                ; (8450 0000, 4000 0000) Mem-Mapped Registers (perifs)
        DCD PCMCIA_S1_CMN_C_VIRTUAL,                        PCMCIA_S1_CMN_PHYSICAL,                                64                ; (8650 0000, 3C00 0000) PCMCIA S1 COMMON MEM Space
        DCD PCMCIA_S1_ATTR_C_VIRTUAL,                        PCMCIA_S1_ATTR_PHYSICAL,                        32                ; (8A50 0000, 3800 0000) PCMCIA S1 ATTRIBUTE MEM Space
        DCD PCMCIA_S1_IO_C_VIRTUAL,                                PCMCIA_S1_IO_PHYSICAL,                                32                ; (8C50 0000, 3000 0000) PCMCIA S1 I/O Space
        DCD PCMCIA_S0_CMN_C_VIRTUAL,                        PCMCIA_S0_CMN_PHYSICAL,                                64                ; (8E50 0000, 2C00 0000) PCMCIA S0 COMMON MEM Space
        DCD PCMCIA_S0_ATTR_C_VIRTUAL,                        PCMCIA_S0_ATTR_PHYSICAL,                        32                ; (9250 0000, 2800 0000) PCMCIA S0 ATTRIBUTE MEM Space
        DCD PCMCIA_S0_IO_C_VIRTUAL,                                PCMCIA_S0_IO_PHYSICAL,                                32                ; (9450 0000, 2000 0000) PCMCIA S0 I/O Space
        DCD ZBANK_BASE_C_VIRTUAL,                                ZBANK_BASE_PHYSICAL,                                1                ; (9650 0000, E000 0000) Zero-Bank (in RSVD slot)- No Phy Mem needed to back up
        DCD CMRA_BASE_C_VIRTUAL,                                CMRA_BASE_PHYSICAL,                                        1                ; (9660 0000, 5000 0000) Camera Peripheral Interface

        ; Mainstone-Specific Mappings
        ;
        DCD BOOT_FLASH_BASE_C_VIRTUAL,                        BOOT_FLASH_BASE_PHYSICAL,                        32                ; (8000 0000, 0000 0000) nCS0: BOOT ROM
        DCD CS2_L_BASE_C_VIRTUAL,                                CS2_L_BASE_PHYSICAL,                                8                ; (8200 0000, 0800 0000) nCS2
        DCD CS2_H_BASE_C_VIRTUAL,                                CS2_H_BASE_PHYSICAL,                                8                ; (8280 0000, 0A00 0000) nCS2
        DCD CS3_L_BASE_C_VIRTUAL,                                CS3_L_BASE_PHYSICAL,                                8                ; (8300 0000, 0C00 0000) nCS3
        DCD CS3_H_BASE_C_VIRTUAL,                                CS3_H_BASE_PHYSICAL,                                8                ; (8380 0000, 0E00 0000) nCS3
        DCD CS4_L_BASE_C_VIRTUAL,                                CS4_L_BASE_PHYSICAL,                                1                ; (9670 0000, 1000 0000) nCS4
        DCD CS4_H_BASE_C_VIRTUAL,                                CS4_H_BASE_PHYSICAL,                                1                ; (9680 0000, 1200 0000) nCS4
        DCD CS5_L_BASE_C_VIRTUAL,                                CS5_L_BASE_PHYSICAL,                                1                ; (9690 0000, 1400 0000) nCS5
        DCD CS5_H_BASE_C_VIRTUAL,                                CS5_H_BASE_PHYSICAL,                                1                ; (96A0 0000, 1600 0000) nCS5

        DCD 0x00000000,                                                        0x00000000,                         0                ; End of Table (#MB MUST BE ZERO!)

; ------------------------------------------------------------------
以下是改后的OEMaddressTable:
OEMAddressTable
        ;-----------------------------------------------------------------------------------
        ; Virtual(cached)                     Phys Addr                           #MB
        ;-----------------------------------------------------------------------------------

        IF SDRAM_SIZE_128_MB = "1"
        DCD SDRAM_BASE_C_VIRTUAL,                                SDRAM_BASE_PHYSICAL,                                128                ; (98C0 0000, A000 0000) everything SDRAM-related (eboot RAM, eboot RAMIMG, nk RAM, nk RAMIMAGE, nk MEMDEFS, ethdbg buffs)
        ELSE
        DCD SDRAM_BASE_C_VIRTUAL,                                SDRAM_BASE_PHYSICAL,                                64                ; (98C0 0000, A000 0000) everything SDRAM-related (eboot RAM, eboot RAMIMG, nk RAM, nk RAMIMAGE, nk MEMDEFS, ethdbg buffs)
        ENDIF

        DCD IM_STORAGE_BASE_C_VIRTUAL,                        IM_STORAGE_BASE_PHYSICAL,                        1                ; (8600 0000, 5C00 0000) Internal Memory-Storage
        DCD IM_CONTROL_BASE_C_VIRTUAL,                        IM_CONTROL_BASE_PHYSICAL,                        1                ; (8610 0000, 5800 0000) Internal Memory-Control
        DCD USBH_BASE_C_VIRTUAL,                                USBH_BASE_PHYSICAL,                                        1                ; (8620 0000, 4C00 0000) USB Host
        DCD MEMC_BASE_C_VIRTUAL,                                MEMC_BASE_PHYSICAL,                                        1                ; (8630 0000, 4800 0000) Memory Controller
        DCD LCD_BASE_C_VIRTUAL,                                        LCD_BASE_PHYSICAL,                                        1                ; (8640 0000, 4400 0000) LCDC
        DCD PERIF_BASE_C_VIRTUAL,                                PERIF_BASE_PHYSICAL,                                32                ; (8650 0000, 4000 0000) Mem-Mapped Registers (perifs)
        DCD PCMCIA_S1_CMN_C_VIRTUAL,                        PCMCIA_S1_CMN_PHYSICAL,                                64                ; (8850 0000, 3C00 0000) PCMCIA S1 COMMON MEM Space
        DCD PCMCIA_S1_ATTR_C_VIRTUAL,                        PCMCIA_S1_ATTR_PHYSICAL,                        32                ; (8C50 0000, 3800 0000) PCMCIA S1 ATTRIBUTE MEM Space
        DCD PCMCIA_S1_IO_C_VIRTUAL,                                PCMCIA_S1_IO_PHYSICAL,                                32                ; (8E50 0000, 3000 0000) PCMCIA S1 I/O Space
        DCD PCMCIA_S0_CMN_C_VIRTUAL,                        PCMCIA_S0_CMN_PHYSICAL,                                64                ; (9050 0000, 2C00 0000) PCMCIA S0 COMMON MEM Space
        DCD PCMCIA_S0_ATTR_C_VIRTUAL,                        PCMCIA_S0_ATTR_PHYSICAL,                        32                ; (9450 0000, 2800 0000) PCMCIA S0 ATTRIBUTE MEM Space
        DCD PCMCIA_S0_IO_C_VIRTUAL,                                PCMCIA_S0_IO_PHYSICAL,                                32                ; (9650 0000, 2000 0000) PCMCIA S0 I/O Space
        DCD ZBANK_BASE_C_VIRTUAL,                                ZBANK_BASE_PHYSICAL,                                1                ; (9850 0000, E000 0000) Zero-Bank (in RSVD slot)- No Phy Mem needed to back up
        DCD CMRA_BASE_C_VIRTUAL,                                CMRA_BASE_PHYSICAL,                                        1                ; (9860 0000, 5000 0000) Camera Peripheral Interface

        ; Mainstone-Specific Mappings
        ;
        DCD BOOT_FLASH_BASE_C_VIRTUAL,                        BOOT_FLASH_BASE_PHYSICAL,                        64                ; (8000 0000, 0000 0000) nCS0: BOOT ROM
        DCD CS2_L_BASE_C_VIRTUAL,                                CS2_L_BASE_PHYSICAL,                                8                ; (8400 0000, 0800 0000) nCS2
        DCD CS2_H_BASE_C_VIRTUAL,                                CS2_H_BASE_PHYSICAL,                                8                ; (8480 0000, 0A00 0000) nCS2
        DCD CS3_L_BASE_C_VIRTUAL,                                CS3_L_BASE_PHYSICAL,                                8                ; (8500 0000, 0C00 0000) nCS3
        DCD CS3_H_BASE_C_VIRTUAL,                                CS3_H_BASE_PHYSICAL,                                8                ; (8580 0000, 0E00 0000) nCS3
        DCD CS4_L_BASE_C_VIRTUAL,                                CS4_L_BASE_PHYSICAL,                                1                ; (9870 0000, 1000 0000) nCS4
        DCD CS4_H_BASE_C_VIRTUAL,                                CS4_H_BASE_PHYSICAL,                                1                ; (9880 0000, 1200 0000) nCS4
        DCD CS5_L_BASE_C_VIRTUAL,                                CS5_L_BASE_PHYSICAL,                                1                ; (9890 0000, 1400 0000) nCS5
        DCD CS5_H_BASE_C_VIRTUAL,                                CS5_H_BASE_PHYSICAL,                                1                ; (98A0 0000, 1600 0000) nCS5

        DCD 0x00000000,                                                        0x00000000,                         0                ; End of Table (#MB MUST BE ZERO!)

; ------------------------------------------------------------------
其他地方都没有修改过,从打印信息看
Beginning SDRAM R/W verify...
SDRAM INIT OK
SDRAM已经通过了!
请问这个是什么原因!谢谢啦

最新回复

wangxin_801115  你的邮箱是多少?发到我信箱里。谢谢哦。sankye@163.com  详情 回复 发表于 2009-3-13 18:10
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我修改的内容就是因为
原来DCD BOOT_FLASH_BASE_C_VIRTUAL, BOOT_FLASH_BASE_PHYSICAL, 32 ; (8000 0000, 0000 0000) nCS0: BOOT ROM
后改成64所以虚拟地址都向后移动200 0000(即虚拟地址+200 0000)。

现在通过在BOOT中打印信息发现:在汇编文件中运行到                ;
                ; *Flip the MMU ON*
                ;
                mcr                p15, 0, r1, c1, c0, 0        ; MMU ON:  All mem accesses now ~Virtual~
这里停止了。
请高手指点一二!!
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
最好选一块没有使用的64M的地址空间给Flash用,这样就不会改到别的地址,也不太容易会引起问题
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
DCD CS2_L_BASE_C_VIRTUAL, CS2_L_BASE_PHYSICAL, 8 ; (8400 0000, 0800 0000) nCS2
这个“CS2_L_BASE_C_VIRTUAL”修改了吗?后面括号里的8200 0000改成8400 0000
是没用的,这只是个注释。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 shuiyan 的回复:
DCD CS2_L_BASE_C_VIRTUAL, CS2_L_BASE_PHYSICAL, 8 ; (8400 0000, 0800 0000) nCS2
这个“CS2_L_BASE_C_VIRTUAL”修改了吗?后面括号里的8200 0000改成8400 0000
是没用的,这只是个注释。


相关地址都修改了
这样注解只是为了看问题方便些
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 hzdysymbol 的回复:
最好选一块没有使用的64M的地址空间给Flash用,这样就不会改到别的地址,也不太容易会引起问题

非常感谢!好方法,周一试试!
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

8
 
两位大侠:
  我还有两个问题想请教一下:

1、请问造成现在这种在汇编语言中卡住,进不去C语言环境执行这种现象的根本问题所在是什么呢??

2、现在程序貌似卡死在这段中:
                ; *Flip the MMU ON*
                mcr                p15, 0, r1, c1, c0, 0        ; MMU ON:  All mem accesses now ~Virtual~
                IF Interworking :LOR: Thumbing
                        bx        r2
                ELSE
                        mov        pc, r2
                ENDIF
                nop
                ; **********************************
                ; MMU & caches now enabled.
                ;   (r9) = physcial=virtual (direct mapped) address of 1st level page table
                ALIGN
VirtualStart
                ;  Set up a SVC mode stack
                ;
                ldr                sp, =EBOOT_PARTITION_VIR_C_BASE                ; cached, virtual ram.  Set Stack Pointer
                add                sp, sp, #StackOffset                                ; Space reserved for stack in the BOOT.BIB file
        ;   Now that we have set up the MMU descriptors, are executing virtually, and
        ;     have set up a stack, it is time to launch EBOOT.
        ;
        IF :DEF: ETHBOOT
                bl                main                                ; **Jump to Main.c::main(), never to return.**
                nop
HANG
                b                HANG
        ENDIF                ; // if :DEF: ETHBOOT

但是我还不能确定是在这段中的哪句出现的问题。因为在此之间打印信息是通过直接操作物理寄存器打印
打印方法如下:
  ALIGN
test                DCB 0xA, 0xD, "test", 0xA, 0xD, 0
.......
add        r2,      pc,    #test-(.+8)
        ldr            r1, =BTUART_BASE_PHYSICAL
        PrintStr    r1, r2, r3
但是这句开始是进入虚拟地址,以前的物理寄存器操作在这里就不能用了
所以我想请问这段是怎么才能打印出信息呢????
我现在是调用C环境下的OEMWriteDebugByte这个函数
调用的方法如下::
bl OEMInitDebugSerial(因为在main()中首先是用这个函数做一下串口打印的初始化工作)
mov r1, #50
bl OEMWriteDebugByte
可是不能打印出来,不知道是不是程序死在那里还是我的打印方法不对???
请高手给我点指点!谢谢啦!
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

9
 
两位大侠:
  我还有两个问题想请教一下:

1、请问造成现在这种在汇编语言中卡住,进不去C语言环境执行这种现象的根本问题所在是什么呢??

2、现在程序貌似卡死在这段中:
                ; *Flip the MMU ON*
                mcr                p15, 0, r1, c1, c0, 0        ; MMU ON:  All mem accesses now ~Virtual~
                IF Interworking :LOR: Thumbing
                        bx        r2
                ELSE
                        mov        pc, r2
                ENDIF
                nop
                ; **********************************
                ; MMU & caches now enabled.
                ;   (r9) = physcial=virtual (direct mapped) address of 1st level page table
                ALIGN
VirtualStart
                ;  Set up a SVC mode stack
                ;
                ldr                sp, =EBOOT_PARTITION_VIR_C_BASE                ; cached, virtual ram.  Set Stack Pointer
                add                sp, sp, #StackOffset                                ; Space reserved for stack in the BOOT.BIB file
        ;   Now that we have set up the MMU descriptors, are executing virtually, and
        ;     have set up a stack, it is time to launch EBOOT.
        ;
        IF :DEF: ETHBOOT
                bl                main                                ; **Jump to Main.c::main(), never to return.**
                nop
HANG
                b                HANG
        ENDIF                ; // if :DEF: ETHBOOT

但是我还不能确定是在这段中的哪句出现的问题。因为在此之间打印信息是通过直接操作物理寄存器打印
打印方法如下:
  ALIGN
test                DCB 0xA, 0xD, "test", 0xA, 0xD, 0
.......
add        r2,      pc,    #test-(.+8)
        ldr            r1, =BTUART_BASE_PHYSICAL
        PrintStr    r1, r2, r3
但是这句开始是进入虚拟地址,以前的物理寄存器操作在这里就不能用了
所以我想请问这段是怎么才能打印出信息呢????
我现在是调用C环境下的OEMWriteDebugByte这个函数
调用的方法如下::
bl OEMInitDebugSerial(因为在main()中首先是用这个函数做一下串口打印的初始化工作)
mov r1, #50
bl OEMWriteDebugByte
可是不能打印出来,不知道是不是程序死在那里还是我的打印方法不对???
请高手给我点指点!谢谢啦!
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

10
 
像CS2_L_BASE_C_VIRTUAL这些值在哪定义的呢?是否都改了?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
BOOT_FLASH_BASE_C_VIRTUAL, BOOT_FLASH_BASE_PHYSICAL, 64 ; (8000 0000, 0000 0000) nCS0: BOOT ROM

很好奇,你的bsp中nCS0的虚拟地址竟然映射到0x8000 0000了?那SDRAM的虚拟地址映射到哪里了?
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

12
 
TO XIAOPI:
   "像CS2_L_BASE_C_VIRTUAL这些值在哪定义的呢?是否都改了?"对应的地方都改了
TO SHUIYAN:
  " 那SDRAM的虚拟地址映射到哪里了?"
    DCD SDRAM_BASE_C_VIRTUAL, SDRAM_BASE_PHYSICAL, 128 ; (98C0 0000, A000 0000)
    我的BSP是WINCE4的,我跟WINCE5带的MAINSTONEII这个BSP比较了一下,差别比较大,后面这个直接已经给FLASH留出64M的虚拟空间


我现在想试试hzdysymbol的方法:

但是我发现已经没有没定义的虚拟空间供我用了
所以我想把没用到的PCMCIA的这部分跟FLASH替换,修改方法:
原来:
DCD BOOT_FLASH_BASE_C_VIRTUAL, BOOT_FLASH_BASE_PHYSICAL, 32 ; (8000 0000, 0000 0000) nCS0: BOOT ROM
DCD CS2_L_BASE_C_VIRTUAL, CS2_L_BASE_PHYSICAL, 8 ; (8200 0000, 0800 0000) nCS2
....
DCD PCMCIA_S1_CMN_C_VIRTUAL, PCMCIA_S1_CMN_PHYSICAL, 64 ; (8650 0000, 3C00 0000) PCMCIA S1 COMMON MEM Space
DCD PCMCIA_S1_ATTR_C_VIRTUAL, PCMCIA_S1_ATTR_PHYSICAL, 32 ; (8A50 0000, 3800 0000) PCMCIA S1 ATTRIBUTE MEM Space
改成:
DCD PCMCIA_S1_CMN_C_VIRTUAL, PCMCIA_S1_CMN_PHYSICAL , 32 ; (8000 0000, 0000 0000) nCS0: BOOT ROM
DCD CS2_L_BASE_C_VIRTUAL, CS2_L_BASE_PHYSICAL, 8 ; (8200 0000, 0800 0000) nCS2

DCD BOOT_FLASH_BASE_C_VIRTUAL, BOOT_FLASH_BASE_PHYSICAL , 64 ; (8650 0000, 3C00 0000) PCMCIA S1 COMMON MEM Space
DCD PCMCIA_S1_ATTR_C_VIRTUAL, PCMCIA_S1_ATTR_PHYSICAL, 32 ; (8A50 0000, 3800 0000) PCMCIA S1 ATTRIBUTE MEM Space

不知这样修改是否有错误?
虚拟内存空间的分配是不是有规定,按顺序的???
谢谢各位高手啦
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(初级)

13
 
按照hzdysymbol的方法
目前这个问题已经解决
谢谢各位!
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

14
 
wangxin_801115  你的邮箱是多少?发到我信箱里。谢谢哦。sankye@163.com
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表