S3C2440的内存管理

来源:互联网 发布:用友u8软件 编辑:程序博客网 时间:2024/06/16 16:55
1、
1.1 、SRAM:

读取速度快,直接输入地址就可以读取或者写入数据,价格贵以及行地址还有列地址,为防止数据丢失还有不断地刷新。价格便宜。本实验SDRAM的CL时间是3clocks

寄存器:在SC2440存储管理寄存器中UB/LB指的是数据掩码信号,在本书的编程当中不使用

网卡以及NAND FLASH 是RAM LIKE芯片,这是由于网卡以及FLASH的接口是SRAM的。

在本实验板中只有BANK6和BANK7可以另接SDRAM的接口,当然这个接口也可以接ROM与SRAM芯片。

编程实验:arm-linux-ld -Ttext 0x30000000 asm.o source.o -o name_elf
其中asm.o与source.o不可以交换位置,编译的时候是按照所排列的顺序进行代码段的排列的。另外,在复制代码到客户区的时候如果把0地址内存4K填充为0 的时候会出现代码无法运行的情况。

由于存储芯片位宽为16位,一次可以进行两个字节的读取。但是,通常操作系统里最小寻址单位是1字节,因此内存控制器必须要保证可以访问内存里每一个字节。UDQM ,LDQM分别代表16位数据的高,低字节读取信号,当读取数据时,LDQM /UDQM分别用来控制16位数据中高低字节能否被读取,当LDQM /UDQM为低电平时,对应的高/低字节就可以被读取,如果LDQM /UDQM为高电平时,对应的高/低字节就不能被读取。当向内存里写入数据时,LDQM /UDQM控制数据能否被写入,当LDQM /UDQM为低电平时,对应的高/低字节就可以被写入,如果LDQM /UDQM为高电平时,对应的高/低字节就不能被写入。通过对LDQM /UDQM信号的控制可以控制对两个存储芯片存储数据,由于两个存储单元的地址线是通用的,他们都能接收到CPU发出的地址信号,但是,发给两个存储单元的LDQM /UDQM信号是不同的,以此来区分一个字的高低字节。

1.2 MMU

使用方法:
1.2.1: 写一级页表段描述符,段描述符按规定写,地址参照《嵌入式ARM完全开发手册》进行设置,指向编写的段的物理地址,指定所属域,权限
1.2.2: 清除整个cache的区块以及写缓冲区和预取缓冲区,因为在更新时候虚拟地址与物理地址不照应,所以要先清理,以免造成使用错误
1.2.3:CP15 C3指定段所属域的访问权限为管理员 administrator
1.2.4: 清除ICache,Dcache,TLB,writebuff
1.2.5: CP15 C2指定写入的那个位置为一级页表
1.2.6: CP15 C1设置启动MMU(小端,LOW or HIGH address, fault checking(对齐检查))
MMU代码:http://download.csdn.net/detail/u013904227/9252201

拷贝数据的时候不能使用数组由大到小的方法,比如从内存到SDRAM的时候需要按照地址增长的顺序进行代码的拷贝,否则代码运行失败。
在MMU初始化之后再进行的地址访问都是以虚拟地址的方式进行访问的,如果在使用物理地址,那么访问到的内存就不一定是原来的物理内存了。
指令格式: MCR P15,0,rd,Cn,Cm,n
基本知识: 所有的汇编指令都是这样的格式,只不过有的指令省略了中间的部分位,32位系统指令都是32位的,选取其中某些位作为指令选项,可以
猜测,机器码就是汇编指令32位译制过去的,若看机器码可以找寻到不同指令的固定不变的某些位

2、S3C2440的地址分布
2.1、S3C2440的硬件管脚
addr脚范围:addr0~addr26,共27位,由于S3C2440的外设地址直接寻址范围为0x00000000~0x08000000,加上头部的片选即可达到寻址地址为0x00000000~0x40000000,所以不需要addr27以及以后的引脚即可达到寻址外设的要求,并不是S3C2440中只有27位地址线

2.2、程序加载过程

在系统上电时,若选择NAND Flash启动,则把NAND Flash的片内数据拷贝4K到S3C2440的芯片内SRAM中,并将NAND Flash的0地址映射到芯片内0地址,之后的如4096地址索引到的数据是NAND Flash中4096地址处的数据。由此可以推及,由NOR Flash启动的时候,由于NOR Flash的起始地址本来就是0,也由此可以得出代码实际上就是从NOR Flash中开始运行的,在4096之后的地址实际上也是NOR Flash中的地址,索引数据的时候也是索引到NOR Flash中的数据。综合来看,由于NAND Flash没有地址线,所以不存在所谓的相对于S3C2440来说的物理地址,NAND Flash启动时将NOR Flash的0x00000000~0x08000000地址映射为NAND Flash的地址,也即此时NAND Flash相当于NOR Flash启动时的NOR Flash。并且由于NAND Flash不存在地址线,所以也就不能够在NAND Flash中直接运行程序,而是通过将NAND Flash中的数据加载到其他可以运行成的内存单元中去运行

PS:片内SRAM的地址为0x40000000~0x48000000,NAND Flash启动的时候代码运行实际上是从物理地址为0x40000000处开始运行的,而NOR Flash启动的时候片内SRAM的地址还是0x40000000,此时片内SRAM地址没有被映射

0 0