初识 存储控制器

来源:互联网 发布:淘宝开店经验总结 编辑:程序博客网 时间:2024/06/07 13:15

存储控制器提供了访问外部设备的所有信息(统一编址)。

s3c2440存储控制器的特性:

1、s3c2440A的存储控制器提供了访问外部存储的所有控制信号。27个地址信号,32为数据信号,8个片选信号,还有读写控制信号。

2、总共有8个存储器bank0,bank2,....bank7

3、bank0到bank5为固定128M,bank6和bank7的容量可编程改变(2/4/8/16/32/64/128M,最大可1G)。

4、bank0可以作为引导ROM,其数据线宽只能是16和32位,其他存储器的数据线宽可以是8位,16位,32位。

5、7个固定存储器bank(0-6)起始地址,bank7的开始地址和bank6结束地址相连接,但二者的容量必须相等。

6、所有存储器bank的访问周期是可编程的。

7、支持SDRAM的自刷新和掉电模式。

注意:8个128M的bank,一共只有1G,剩余3G,有一部分是寄存器的地址,还有一部分没有使用,系统上电后从bank0执行bootloader程序。


要访问一个地址需要的条件:

1、地址线

2、数据线

3、时钟/频率

4、所访问的芯片特性


比如要访问SDRAM则需要知道:行地址,列地址,bank,数据位宽,刷新周期

步骤如下:

1、CPU发出片选信号nSCS0有效,他选中SDRAM芯片。

2、SDRAM中有4个L-Bank,需要2个地址线来确定是哪一个

3、对被选中的芯片进行统一的行/列(存储单元)寻址。

4、找到存储单元后,被选中的芯片就要进行统一的数据传输了。


存储控制器共有13个寄存器,BANK0-BANK5只需要设置BWSCON和BANKCONx两个寄存器,BANK6、BANK7外接SDRAM时,还要设置REFRESH,BANKSIZE,MRSRB6,MRSRB7,等4个寄存器,具体如何设置则要参照手册,从而获得相应功能。


.equ  MEM_CTL_BASE,0x48000000;存储控制器的13个寄存器起始地址.equ  SDRAM_BASE,0x30000000;SDRAM的绝对起始地址.text.gloabl _start_start:bldisable_watch_dog;关看门狗blmemsetup;配置存储控制器blcopy_to_sdram;把Nand Flash开始的4KB复制到SDRAM中ldrpc,=on_sdram;跳转到SDRAM中继续执行on_sdram:ldr sp,=0x34000000bl  main;进入main函数halt_loop:bhalt_loopdisable_watch_dog:mov r1,#0x53000000;看门狗控制寄存器mov r2,#0x00000000str r2,[r1];写入0关闭看门狗mov pc,lr;lr连接寄存器,调回memsetup:mov r1,#MEM_CTL_BASE;13个存储控制寄存器的起始地址adr1r2,mem_cfg_val;把配置信息放入r2add r3,r1,#52;r1放入r3然后r1+52 放入r11:ldr r4,[r2],#4;把配置信息放入r2的地方,然后r2=r2+4str r4,[r1],#4;把r4的内容放到r1(存储控制寄存器)代表的地方,然后r1=r1+4cmp r1,r3;对比看配置信息是否存入寄存器bne 1b;若没有,则跳回1标记处mov pc,lr;回到lr所知的地方运行copy_to_sdram:mov r1,#0;0地址ldr r2,=SDRAM_BASE;SDRAM起始地址放入r2mov r3,#4*1024;r3=4KB1:ldr r4,[r1],#4;Nand Flash的起始地址内容放入r4,然后r1=r1+4str r4,[r2],#4;把r4内容放入SDRAM的起始地址,然后r2=r2+4cmp r1,r3;比较r1和r3,看是否复制完bne 1b;若没完,则跳到标记处继续mov pc,lr;程序计数器回到lr所指的地址继续运行mem_cfg_val:.long0x22011110.long0x00000700.long0x00000700.long0x00000700.long0x00000700.long0x00000700.long0x00000700.long0x00018005.long0x00018005.long0x008c07A3.long0x000000B1.long0x00000030.long0x00000030

·


原创粉丝点击