本节的主要目的是对 u-boot 中 sdram 初始化部分的理解。
// 前边的代码设置时钟频率 200MHz,FCLK:HCLK:PCLK = 1:2:4 #define MEM_CTL_BASE 0x48000000 ldr r0, =MEM_CTL_BASE adr r1, sdram_config add r3, r0, #(13 * 4) 1: ldr r2, [r1], #4 str r2, [r0], #4 cmp r0, r3 bne 1b sdram_config: .long 0x22011110 //BWSCON (1) .long 0x00000700 //BANKCON0 (2) .long 0x00000700 //BANKCON1 (3) .long 0x00000700 //BANKCON2 (4) .long 0x00000700 //BANKCON3 (5) .long 0x00000700 //BANKCON4 (6) .long 0x00000700 //BANKCON5 (7) .long 0x00018005 //BANKCON6 (8) .long 0x00018005 //BANKCON7 (9) .long 0x008C04F4 //REFRESH (10) .long 0x000000B1 //BANKSIZE (11) .long 0x00000030 //MRSRB6 (12) .long 0x00000030 //MRSRB7 (13)
(1)对 BANK7 不使用 UB/LB : Bank 7 的WAIT 状态禁止:Bank7 数据总线宽度 32 位:对 BANK6 不使用 UB/LB :Bank 6 的WAIT 状态禁止:Bank6 数据总线宽度 32 位:对 BANK5 不使用 UB/LB :Bank 5 的WAIT 状态禁止:Bank5 数据总线宽度 8 位:对 BANK4 不使用 UB/LB :Bank4 的WAIT 状态禁止:Bank4 数据总线宽度 16 位:对 BANK3 不使用 UB/LB :Bank3 的WAIT 状态禁止:Bank3 数据总线宽度 16 位:对 BANK2 不使用 UB/LB :Bank2 的WAIT 状态禁止:Bank2 数据总线宽度 16 位:对 BANK1 不使用 UB/LB :Bank1 的WAIT 状态禁止:Bank1 数据总线宽度 16 位
(2)(3)(4)(5)(6)(7) nGCSn 前的地址建立时间 0 个时钟: nOE前的片选建立时间 0 个时钟: 访问周期 14个时钟: nOE后的片选保持时间 0 个时钟: nOE后的片选保持时间 0 个时钟: nGCSn 后的地址保持时间 0 个时钟: Page 模式下的 Page 模式访问周期 0 个时钟: Page 模式配置 1 个数据
(8)(9) BANK6,7 的存储器类型是 同步DRAM:nGCSn 前的地址建立时间 0 个周期:nOE 前的片选建立时间 0 个时钟:访问周期 1 个时钟:nOE 后的片选保持时间 0 个时钟:nGCSn 后的地址保持时间 0 个时钟:Page 模式下的page 的访问周期 3 个时钟:Page 模式配置 4个连续数据
(10) SDRAM 刷新使能:SDRAM RAS 的充电时间是2个时钟: SDRAM Semi Row cycle time ( SDRAM 半行周期时间 )7个时钟:刷新计数器是 0b100 1111 0100 = 1268 刷新周期 = (2^11 - 刷新计数 + 1) / HCLK = 781 / HCLK = 7.81us
(11) 使能突发模式,使能SDRAM 掉电模式,SCLK只在访问期间有效,Bank6/7 存储器映射 64MB/64MB
(12)(13) CAS等待时间是 3 个时钟周期,写突发长度固定,突发类型连续,突发长度 1.