ARM裸机开发bootloader内存初始化
内存由于其访问速度快,访问方式简单成为PC机与嵌入式设备不可缺少的部件。
1、内存的分类
内存分为DRAM和SRAM,其中DRAM又包含SDRAM、DDR、DDR2。
DRAM:它的基本部件是小电容,电容可以再两个极板上保留电荷,但是需要定期的充电(刷新),否则数据就好丢失。缺点:要进行不断的刷新才能保持数据,存取速度较慢。
SRAM:它是一种具有静止存取功能的内存,不需要定期刷新电路就能保持它们内部存储的数据。其优点:存取的速度快;但是缺点是:功耗大,成本高。常用于存储容量不高,但存取速度快的场合,比如stepping stone。
DRAM的分类:在嵌入式系统中,除了CPU内部的垫脚石采用SRAM外,板载内存一般会采用DRAM,而DRAM又可以分为SDRAM,DDR,DDR2等。
SDRAM(Synchronous Dynamic Random Access Memory):同步动态随机存储器。
同步:内存工作需要同步时钟,内部命令的发送与数据的传输都以该时钟为基准。
动态:存储阵列要不断保持刷新来保证数据不丢失。
随机:数据不是线性依次存储,而是自由指定地址进行数据读写。
2440使用的是SDRAM
DDR:(Double Data Rate SDRAM),即“双倍速率同步动态随机存储器”。与早起的SDRAM相比,DDR除了可以在时钟脉冲的上升沿传输数据,还可以在下降沿传输信号,这就意味着在相同的工作频率下,DDR的理论传输速度为SDRAM的两倍。DDR2则在DDR的基础上再次进行了改进,使得数据传输速率在DDR的基础上再次翻倍。
6410开发板通常采用DDR内存
210开发板通常采用DDR2内存
2、内存的内部结构
内存的内部结构包含三项内容:表结构、L-Bank、寻址信息
2.1内存的内部如同表格,数据就存放在每个单元格中。数据读写时,先指定行号(行地址),再指定列号(列地址),我们就可以准确地找到所需要的单元格。而这张表格称为:Logical Bank(L-Bank)。
由于技术、成本等原因,一块内存不可能把所有的单元格做到一个L-Bank,现在内存内部基本都会分割成4个L-Bank。
内存的寻址有三个重要因素:1、L-Bank选择信号 2、行地址 3、列地址
二、内存初始化
1、2440
对于这部分内容,接下来要从以下四个方面来阐述:1、地址空间2、内存芯片的硬件连接3、存储控制寄存器的设置4、编写代码进行内存初始化设置
1、S3c2440芯片对外提供的引脚上,只给出了27根地址线Addr[0:26]。单靠芯片上的27根引脚,它只能访问128M的外设空间。为了扩大外设的访问范围,S3c2440芯片又提供了8个片选信号nGCS0-nGCS7.当某个片选信号nGCSX有效时,则可以通过27根地址线去访问对应的片选的128MB空间。由于有8个片选,所以2440芯片能访问的外设空间总共为8*128MB=1GB。而1G(0x40000000)以上的空间,则安排给了2440内部的寄存器,访问这些内部寄存器,则是通过32位的处理器内部总线来完成的。
ARM9核不知道内存、NorFlash、网卡芯片寄存器地址,而是通过存储器控制器来进行解析,从而使得ARM核可以通过存储控制器寄存器来设置访问外设寄存器。
2、S3c2440有32根数据线引脚,两片32M的内存芯片并联在数据线的高、低位上。所以说2440的数据是32位的。
3、设置2440存储控制寄存器,参考2440的芯片手册进行设置。
BWSCON 0x22000000
BANK CON0-5 保持不变,为0x00000070.因为0-5不存放内存。只有6-7才存放了内存。
在计算机中,RAM一般用于内存。ROM用来存放一些硬件的驱动程序,也就是固件。
咱们平时用的U盘为Flash。它可以在相同的电压下读写,且容量大,成本低。而ROM一般读为5V,写12V。
BANK6-7 0x18001
REFRESH 定期充电
BANKSEZE
MRSRB6-7
对以上的所有寄存器进行完初始化后,内存控制器的所有寄存器就都进行了初始化。
4、代码编写:
由于数据和寄存器比较多,所以运用循环把相应的数据存入各个寄存器。
#define mem_contrl 0x48000000init_sdram:ldr r0, =mem_contrl add r3, r0, #4*13adrl r1, mem_data0:ldr r2, [r1], #4str r2, [r0], #4cmp r0, r3bne 0b /*表示向前跳转*/mov pc, lrmem_data:.long 0x22000000 .long 0x00000700.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00000700.long 0x00018001.long 0x00018001.long 0x008c04f5.long 0x000000b1.long 0x00000030.long 0x00000030介绍一下汇编语言中的访问存储器 [r1] 就是取出r1地址处的内容,实际就是指针操作。
6410:
1、地址空间:S3C6410处理器拥有32位地址总线,其寻址空间为4GB。其中高2G为保留区,低2G区域又可分为两部分:主存储区和外设存区。
2、主存储区又分为:
启动镜像
ARM裸机开发bootloader内存初始 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)