JZ2440的SDRAM配置
内存控制器
CPU把地址命令发送给内存控制器
然后内存控制器再根据 CPU 发过来的地址
1. 判断这个地址在什么范围 (发出nGCS6 片选信号6)SDRAM
2. 根据类型(SDRAM)拆分地址
a. BANK地址
b. 行地(RAS) Row Address
c. 列地址(CAS) Column address
?? 怎么拆分地址?
行地址几条RAS
列地址几条 CAS
: 这些要设置内存控制器的相关寄存器
3.读数据
2440 内存控制器的设置 因为这个只接了 nGCS6 所以 只去配置nGCS6
******************** 寄存器的配置 BWSCON ****************
Jz2440选择的是2个芯片拼接起来组成32位的数据总线
BWSCON-----BW6----- 10 (32-bit)
BWSCON-----WS6----- 0 (WAIT disable) 用不到
BWSCON-----ST6----- 0 (Not using UB/LB)
一般我们会把 BANK7设置成BANK6一样 虽然我们没有用到BANK7
:BWSCON = 0x22000000
*********************** BANKCONn ********************
BANKCON0--BANKCON5这些寄存器我们现在都不关心 因为没有用到 采取默认值就好 0x0700
因为我们要操作 SDRAM 对应的是BANKCON6管 所以去配置 BANKCON6
BANKCON6 -- MT -- 11(Sync.DRAM) 只有选择SDRAM的时候地址才会被拆分成 Row地址 Colu地址 如果不是的话 地址就会一次性发完出去
如果你设置成 SDRAM的话 你就只需要设置 Trcd SCAN (4-bit)
怎么看列地址应该设置成多少位 ---- 去看芯片手册
HY57V561620C(L)T(P)
4 Banks x 4M x 16Bit Synchronous DRAM
比较常用的内存芯片手册
然后去 搜索 columu 发现 Column Address :CA0--CA8 9位(9--bie)
然后去搜索 Trcd
如果我们的 2440 HCLK = 100HMZ 默认是12MHZ
T = 10 ns
说以我们 选择2个时钟周期就可以了
BANKCON6 = 0x00018001
BANKCON6 -- MT -- 11(Sync.DRAM)
BANKCON6 -- Tred -- 00
BANKCON6 -- SCAN -- 01
********************* REFRESH 刷新寄存器 ********************
REFRESH(32位,用于设定SDRAM的刷新):
23:是否开启SDRAM刷新,自然选1开启
22:SDRAM刷新模式,选0
21~20:取00或者10,RAS的change时间
19~18:行时间,取11
17~11:0
10~0:就是刷新频率了~~
Refresh period 看SDRAM的芯片手册 ---
HY那个手册上写到:8192个刷新周期用64ms,因此刷新周期=64000/8192=7.8125
时钟频率有好多种啊,先实验为100Mhz的吧。。
因此计算出来就是1267.75,四舍五入1268->0x04f4
因此这个REFRESH取值是 0x008c04f4,简单计算方法就是0x008c0000 + 04f4
***************** BANKSIZE *************
支持核突发,使用SCKE,仅在SDRAM期间发出SCLK,地址空间64Mb
因此BANKSIZE为 0x000000B1
MRSRB6~7(SDRAM模式设置)
3个时钟周期,0x3