一、S3C2440地址空间的分配
1.s3c2440A的存储器操控器有以下特性:
l巨细端(经过软件挑选)
l地址空间:每个bank有128M的字节(一共1G字节/8个banks)
l可编程的拜访位宽,bank0(16/32位),其他bank(8/16/32位)
l共8个存储器banks
l6个是ROM,SRAM等类型存储器bank
l2个是能够作为ROM、SRAM、SDRAM等存储器bank
l7个固定的存储器bank开端地址
l最终一个bank的开端地址可调整
l最终两个bank巨细可编程
l一切存储器bank的拜访周期可编程
l总线拜访周期可经过刺进外部wait来延伸
l支撑SDRAM的自刷新和掉电形式
2.寻址空间
s3c2440是32位的,所以理论上能够寻址4GB空间,内存(SDRAM)和端口(特别寄存器),还有ROM都映射到同一个4G空间里。可是,芯片引脚上只给出了27根地址(ADDR[26:0]),单靠芯片上的27根引脚,它只能操控128M的空间,剩余的在哪里?
在cpu芯片手册上,查它的内部寄存器的地址,咱们能够找到一部分答案。比方这次总结笔记要讲的存储器操控寄存器,13个寄存器,每个寄存器的地址,都大于0X4000 0000的地址。而0x4000 0000(1G)是1G空间的分界线,也便是说,1G~3G之间的空间,实践上都是被芯片自己占用了。实践上,给用户的运用的空间,只需1G。
咱们方才说了,咱们运用了128M,用了27根地址线。而1G空间,需求30根地址线。剩余的3根用在什么地方?查了材料,忽然理解了。这三根被三星公司偷偷地用在了3-8译码器的输入端去了。而这个3-8译码器的输出端,便是对应这nGCS0~7,对应着8个bank。很明显了,三星的2440留给用户运用的这1G空间,27根线用于芯片引脚来操控详细的bank了,剩余的三根,用于挑选当时处于哪个bank。
二、S3C2440体系发动
手册里说,2440发动方法决定于bank0,以及OM[1:0]。
Arm的发动都是从0地址开端,所不同的是地址的映射不一样。在arm开电的时分,要想让arm知道以某种方法(地址映射方法)运转,不可能经过你写的某段程序操控,由于这时分你的程序还没发动,这时分arm会经过引脚的电平来判别。
S3C2440支撑两种发动方法:NandFlash和非NandFlash(例NorFlash)发动。
从NorFlash发动时,与nGCS0相连的NorFlash就被映射到nGCS0片选的Bank0空间,其地址被映射为0x0000 0000;
从NandFlash发动时,S3C2440芯片内部自带的一块容量为4K的被称为“Steppingstone”(起步石)的BootRAM被映射到nGCS0片选的Bank0空间,其地址被映射为0x0000 0000。当体系上电或复位时,程序会从0x0地址处开端履行,因而咱们编写的发动代码要确保存储在0地址处。在实践的开发中,一般能够把bootloader烧入到Norflash,程序运转能够经过串口交互,进行必定的操作,比方下载,调试。这样就很能够很便利的调试你的一些代码。Norflash中的Bootloader还能够烧录内核到Norflash等等功用。
NorFlash发动时,没有额定需求考虑的问题,由于这种情况下程序在体系发动前就存储在NorFlash中,咱们只需确保将发动代码保存在NorFlash开端的方位即可,体系上电或复位时,0地址处的发动代码就会被履行。
NandFlash发动时,体系发动前一切的程序存储在NandFlash中,体系的发动进程略微有点杂乱:体系上电或复位时,0地址处为S3C2440内部自带的BootSRAM,发动前里边没有任何存储内容,发动后S3C2440先经过硬件机制将NandFlash前4k的内容复制到BootSRAM中,然后再运转里边的程序(从0地址处开端)。这种情况下咱们需求确保将发动代码保存在NandFlash开端的方位,而且发动代码的巨细要小于4K。
假如体系的一切程序在编译链接后的巨细小于4K,那在体系的发动代码中无需考虑将程序从NandFlash转移到SDRAM这个问题,由于一切的程序在发动时即悉数由NandFlash复制至BootSRAM,程序在BootSRAM中运转即可;假如体系的一切程序在编译链接后的巨细大于4K,那在体系的发动代码中就需求包括一段将体系的悉数程序从NandFlash转移到SDRAM的代码,由于体系发动时只将NandFlash的前4K复制到了BootSRAM中,还有部分程序在NandFlash中,而程序在NandFlash中是无法运转的,需求将一切程序复制至SDRAM并在其间运转,所以体系的发动代码中要包括这段有关程序复制的代码,并在一切程序复制完成后使程序跳转到SDRAM中运转。也便是说NandFlash发动时需求考虑到触及的两次搬移,第一次转移是S3C2440硬件机制主动完成的,无需干涉,第2次转移需求程序员来完成,转移程序量巨细是体系的一切程序。