MEMCFG是什么?在你的stepldr目录下你会找到它!他在它在startup文件一开始调用
OPT 2
INCLUDE kxarm.h
INCLUDE option.inc
INCLUDE s2440addr.inc
INCLUDE memcfg.inc
OPT 1
OPT 128
; Pre-d efined constants.
;
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
这里主要配置的就是内存
BANK1~BANK7的BWSCON
B1_BWSCON
B1_Tacs
B1_Tcos
B1_Tacc
B1_Tcoh
B1_Tah
B1_Tacp
B1_PMC
如果是SDRAM, 则还需设置REFRESH寄存器
ARM memory control知识补充:
a) Overview Feature
-Little/Big endian (selected by software)
-Address space: 128Mbytes per bank (total 1GB/8 banks)
-Programmable access size (8/16/32-bit) for all banks except bank0 (16/32-bit)
-Total 8 memory banks
Six memory banks for ROM, SRAM, etc.
Remaining two memory banks for ROM, SRAM, SDRAM, etc.
-Seven fixed memory bank start address (BANK0~BANK6)
- One flexible memory bank start address and programmable bank size (BANK7)
- Programmable access cycles for all memory banks
-External wait to extend the bus cycles
-Supporting self-refresh and power down mode in SDRAM
学过8051的都还有印象,片内有ROM和RAM的存储器,并且ROM和RAM 都是分别从0地址开始,还可以外接存储器,用movx命令读取数据。而ARM则不同了,ARM只是处理器,自身不带存储器,都是外接存储器,不管是ROM还是RAM, 统一编址,地址都是从连续的,从0地址开始,而不是分别从0地址开始,到0x40000_0000,分为8个bank,. 每个bank挂上一个存储器, 7个bank的起始地址是固定的。ARM开机后从地址0开始运行。
b) BWSCON register 分析
BWSCON 是一个32位的register, 对应了BANK0-BANK7, 每个BANK使用4位。这4 位分别表示:
STx: 启动/禁止SDRAM的数据掩码引脚,对于SDRAM, 此位为0;对于SRAM, 此位为1。
WSx: 是否使用存储器的WAIT信号,通常设为0
DWx: 设置存储器的BUSWIDTH, 00=8-bit, 01=16-bit, 10=32-bit, 11=reserved
BANK0 对应的4位,是由硬件跳线决定,read-only
c) SDRAM 知识补充
DRAM (Dynamic Random Access Memory) 需要不断Refresh才能保住数据,因此它是DRAM最终的要的操作。那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中的电容的数据有效保存期是64ms,也就说每一行刷新的循环周期是64ms。这样刷新的速度是:行数量/64 ms. 刷新操作分为两种:自动刷新(Auto Refresh, 简称AR)与自刷新(Self Refresh, 简称SR)。不论是何种刷新方式,都不需要外部提供地址信息,因为这是一个内部的自动操作。对于AR, SDRAM内部有一个行地址生成器(也称刷新计数器)用来自动的依次生成行地址。由于刷新涉及所有的L-BANK, 因此在刷新过程中,所有L-BANK都停止工作,而每次刷新所占用9个时钟周期, 之后就可进入正常的工作状态,也就是说在这9个时钟时期内,所有工作指令只能等待而无法执行。SR则主要用于休眠模式低功耗状态下的数据保存,这方面最著名的应用就是STR (Suspend to RAM, 休眠挂起于内存)。在发出AR命令时,将CKE置于无效状态,就进入SR模式,此时不再依靠系统时钟工作 ,而是根据内部的时钟进行刷新操作。
d) BANKCON0~BANKCON5 寄存器设置
Tacs: Address set-up time before nGCSn
Tcos: Chip selection set-up time before nOE
Tacc: Access cycle
Tcoh: Chip selection hold time after nOE
Tcah: Chip selection hold time after nOE
Tacp: Page mode access cycle @Page mode
PMC: Page mode configuration
注释:Tacs, Tcos, Tacc, Tcoh, Tcah, Tacp, PMC值是由存储器的datasheet决定的,里面有各时钟的极限值;顺便说说nWAIT引脚,WSn 是设定该管教是否起作用的,如果起作用必须将储存器(或者其他设备)相应的信号输入给nWAIT,如果年WAIT引脚没有用到时,必须接上,否则会将处理器琐死。
BANKCON6~BANKCON7 寄存器设置则不同,首先需要确定memory的type
MT: Determine the memory type
如果设置ROM或者 SRAM, 则设置Tacs, Tcos, Tacc, Tcoh, Tcah, Tacp, PMC
如果设置SDRAM, 则设置
Trcd: RAS to CAS delay
SCAN: Column address number
REFRESH寄存器,用于SDRAM refresh control register