一、内存
内存控制器地址与片选信号关系
CPU发出相应的地址指令,相应的片选打开(低电平有效),这样也使得内存,nor,网卡互不干扰
Boot kernel地址,Nand flash和Nor 也是不一样的,Nor启动的时候,CPU认为的0地址是nor flash。Nand 启动CPU认为的0地址是片内内存(SRAM)。
假如CPU执行如下指令
mov r0,#3 //读取地址3上一个字节的数据
ldrb r1,[r0]
假如CPU执行如下指令:
mov r0,#4 //读取地址4上四个字节的数据
ldr r1,[r0]
时序图分析:
CPU时序
NOR FLASH时序:
AC特性:
为简单让片选,读和addr信号同时发出,保持70ns
SDRAM寄存器设置:
SDRAM参考手册:高手进阶,终极内存技术指南-完整/进阶版
刷新寄存器设置:
banksize 寄存器:
内存控制器读SDRAM的时候,需要发处BANK地址,行地址和列地址
代码:
#include "s3c2440_soc.h"
void sdram_init(void)
{
BWSCON = 0x22000000;
BANKCON6 = 0x18001;
BANKCON7 = 0x18001;
REFRESH = 0x8404f5;
BANKSIZE = 0xb1;
MRSRB6 = 0x20;
MRSRB7 = 0x20;
}
int sdram_test(void)
{
volatile unsigned char *p = (volatile unsigned char *)0x30000000;
int i;
// write sdram
for (i = 0; i < 1000; i++)
p[i] = 0x55;
// read sdram
for (i = 0; i < 1000; i++)
if (p[i] != 0x55)
return -1;
return 0;
}