在2440\src\inc\oemaddrtab_cfg.inc里面,有一个g_oalAddressTable,定义的是系统虚拟地址的使用分配,那么在config.bib里面,我们定义的虚拟地址所占用的地址段跟这个表的会不会冲突?如果不会冲突,那么该怎么理解这两个虚拟地址之间的相互覆盖和交叉呢? 这里的Bank0~Bank7有什么用途?是不是一条内存对应一个Bank?在使用的时候,我们应该根据什么来配置Memory Controller相关的寄存器呢?
;------------------------------------------------------------------------------
;
; TABLE FORMAT
; cached address, physical address, size
;------------------------------------------------------------------------------
g_oalAddressTable
DCD 0x80000000, 0x30000000, 64 ; 32 MB DRAM BANK 6
DCD 0x84000000, 0x10000000, 32 ; nGCS2: PCMCIA/PCCARD
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5
DCD 0x8C000000, 0x08000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1
DCD 0x90800000, 0x48000000, 1 ; Memory control register
DCD 0x90900000, 0x49000000, 1 ; USB Host register
DCD 0x90A00000, 0x4A000000, 1 ; Interrupt Control register
DCD 0x90B00000, 0x4B000000, 1 ; DMA control register
DCD 0x90C00000, 0x4C000000, 1 ; Clock & Power register
DCD 0x90D00000, 0x4D000000, 1 ; LCD control register
DCD 0x90E00000, 0x4E000000, 1 ; NAND flash control register
DCD 0x90F00000, 0x4F000000, 1 ; Camera control register
DCD 0x91000000, 0x50000000, 1 ; UART control register
DCD 0x91100000, 0x51000000, 1 ; PWM timer register
DCD 0x91200000, 0x52000000, 1 ; USB device register
DCD 0x91300000, 0x53000000, 1 ; Watchdog Timer register
DCD 0x91400000, 0x54000000, 1 ; IIC control register
DCD 0x91500000, 0x55000000, 1 ; IIS control register
DCD 0x91600000, 0x56000000, 1 ; I/O Port register
DCD 0x91700000, 0x57000000, 1 ; RTC control register
DCD 0x91800000, 0x58000000, 1 ; A/D convert register
DCD 0x91900000, 0x59000000, 1 ; SPI register
DCD 0x91A00000, 0x5A000000, 1 ; SD Interface register
DCD 0x92000000, 0x00000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
DCD 0x00000000, 0x00000000, 0 ; end of table
MEMORY
NK 80200000 01F00000 RAMIMAGE
RAM 82100000 01D00000 RAM
FLASH 92000000 00100000 RESERVED
DATA1 80002000 00000800 RESERVED
DATA2 80010000 00010000 RESERVED
DATA3 80020800 00000800 RESERVED
DATA4 80023000 00001000 RESERVED
DATA5 80024000 00002000 RESERVED
DATA6 80026000 00002000 RESERVED
DATA7 80028000 00002000 RESERVED
DATA8 80030000 00020000 RESERVED
DATA9 80100000 00100000 RESERVED
1.config.bib 中内存的定义应该和g_oalAddressTable 保持一致,不应该发生冲突,否则启动时的内存配置和CE中的是不同的,可能会引起启动问题
2、Bank0~Bank7 规划了CPU本身对内存地址的硬件寻址。一般情况下是一个内存(条/类型)对于一个槽,看说明。
3.Memory Controller 请根据CPU和 RAM时序要求进行配置,保障RAM可以正常工作。
感谢slyzhang的回复。那么这个该怎么解释呢?
比如说DCD 0x80000000, 0x30000000, 64 ; 32 MB DRAM BANK 6
那应该是说cpu的从0x3000_0000开始的64M物理地址空间 被映射到从0x8000_0000开始的64M的系统的虚拟地址空间,而我们在config.bib里面又是这样规定的
MEMORY
NK 80200000 01F00000 RAMIMAGE
RAM 82100000 01D00000 RAM
那么从0x8000_0000开始的一段地址空间到底是用于 cpu的实际io地址 还是用于物理内存 的地址空间呢?比如说0x8020_0000对应的是cpu的物理地址空间 还是 对应物理内存呢?
还是我的理解错误,物理内存所映射的地址空间跟cpu的物理地址空所映射的虚拟地址空间根本就不会冲突?
是不是说,按照这样的配置,我的内存就是相当于插在 Bank6上的,所以对Bank6的访问实际上就是对物理内存的访问?