内核版本号和soc版本号由ARM决定。
芯片型号由各个半导体公司决定。
SoC包括CPU和一些基本的内部器件。(通常将CPU简称为SoC,但实际上CPU只是SoC的一部分)。
RISC 与 CISC
RISC复杂指令集:指令多,但效率高。Intel等台式机都采用此指令集。功耗较大。
CISC精简指令集:指令较少,但效率稍低。优点是功耗低,适合嵌入式设备。
统一寻址&独立寻址
内存是通过CPU地址总线寻址的,然后通过CPU数据总线进行读写。CPU地址总线的位数是在CPU设计的时候就确定的,所以一个CPU的可寻址范围是一定的,而内存需要占用CPU的寻址空间。这种内存和CPU之间的总线连接是直接连接,优点是效率高,访问快,但缺点是资源受限,扩展性差。
CPU 访问各种外设有两种方式:一种是类似访问内存的方式,即将外设的寄存器作为内存地址进行读写,这样就以访问内存的方式操作外设,称为 IO 和内存统一寻址方式;另一种是使用专用的 CPU 指令来访问特定的外设,称为 IO 和内存独立寻址。
由于内存访问频率较高,因此采用总线连接和直接地址访问可以获得最高效率。
IO和内存统一寻址方式,优点是IO可以像内存一样访问,简化了编程,缺点是IO也需要占用一定的CPU地址空间,而CPU地址空间是有限的资源。
将IO和内存独立织入,优点是不占用CPU地址空间,缺点是CPU设计变得比较复杂。
哈佛架构和冯·诺依曼架构
程序和数据都放在内存中,相互不分离的结构叫冯·诺依曼结构,比如Intel的CPU都是采用冯·诺依曼结构。
程序和数据放在不同的存储块中,相互完全分离的结构称为哈佛结构。例如大多数单片机(MCS51、ARM9等)都采用哈佛结构。
在冯诺依曼结构中,程序和数据不加区分地放在一起,因此安全性和稳定性是个问题,但优点是处理简单。
哈佛结构中,程序(通常放在ROM、flash中)与数据(通常放在RAM中)分开存放,因此优点是安全性、稳定性高,缺点是软件处理比较复杂(需统一规划链接地址等)
ARM系统概要
常用的ARM汇编指令只有20到30条
ARM 是一款低功耗 CPU
ARM的架构非常适合微控制器、嵌入式系统,特别是物联网;而服务器等高性能领域目前则被英特尔所主导。
大多数 ARM(M3 M4 M7 M0 ARM9 ARM11 A8 A9 等)都是 32 位架构
32位ARM CPU支持小于4G的内存,通过CPU地址总线进行访问。
SoC中各种内部外设都是通过各自的SFR编程来访问的,这些SFR的访问方式和访问普通内存类似,称之为IO与内存统一寻址。
常见的ARM(ARM7除外)都是哈佛结构
哈佛结构保证了ARM CPU运行的稳定性和安全性,因此ARM适合用于嵌入式领域。
哈佛架构也决定了ARM裸机程序(使用真实地址,即物理地址)的链接更加复杂,必须使用复杂的链接脚本来告诉链接器应该如何组织程序;而对于OS上的应用程序(工作在虚拟地址中),则不需要考虑那么多。
CPU和外部存储器接口
内存 内部存储器 用于运行程序的 RAM 示例 (DRAM SRAM DDR)
外部存储器用于存储ROM(硬盘、Flash(Nand、iNand···、U盘、SSD)、CD-ROM)等
CPU连接内存和外部内存的方式不同,内存需要直接地址访问,所以通过地址总线&数据总线的总线访问方式连接(优点是直接访问,随机访问;缺点是占用CPU地址空间,大小受限);外部内存通过CPU的外部内存接口连接(优点是不占用CPU的地址空间,缺点是访问速度没有总线访问快,访问时序比较复杂)
SoC常用的外部存储器:
NorFlash总线访问,连接到SROM bank,优点是可以直接通过总线访问,一般用于开机启动。//容量较小
NandFlash:分为SLC和MLC//
eMMC/iNand/moviNandeMMC(嵌入式MMC)iNand是SanDisk生产的eMMC,moviNand是三星生产的eMMC //手机内部
oneNANDoneNand 是三星生产的Nand
SD卡/TF卡/MMC卡
固态硬盘
SATA硬盘(机械存取,磁性存储原理,SATA是一种接口)
外部总线接口 (EBI) 用作 S5PV210 上的外设。它依靠内存控制器在外部内存控制器请求其空闲时释放外部内存总线,因为它不知道内存访问何时开始或结束。它使 SROM 控制器、OneNAND 控制器和闪存控制器能够共享外部内存总线、内存端口 0。
启动过程详解
记忆:
SRAM静态存储器的特点是容量小,价格昂贵,优点是上电后可直接使用,无须软件初始化。
DRAM动态存储器的特点是容量大、价格便宜,缺点是通电后不能直接使用,需要经过软件初始化后才能使用。
在单片机中:对内存要求较小,且开发期望尽可能简单,所以适合全部使用SRAM
嵌入式系统:需要大量内存,且没有 NorFlash 等可启动介质
PC:内存要求大,软件复杂,不关心DRAM初始化开销,适用于所有DRAM
外置储存:
NorFlash:其特点是容量小,价格较高,其优点是可以通过总线直接与CPU相连,CPU上电后可直接读取,所以一般作为启动介质使用。
NandFlash(同硬盘):特点是容量大,价格便宜,但是不能通过总线访问,也就是上电时不能被CPU直接读取,需要CPU先运行一些初始化软件,然后通过时序接口进行读写。
所以一般PC都是:小容量BIOS(NorFlash)+大容量硬盘(类似NandFlash)+大容量DRAM
通用MCU:小容量NorFlash+小容量SRAM
嵌入式系统:由于NorFlash非常昂贵,所以现在很多嵌入式系统倾向于不使用NorFlash。
直接使用:外部大容量Nand+外部大容量DRAM+SoC内置SRAM
S5PV210采用的启动方式为:外部大容量Nand+外部大容量DRAM+SoC内置SRAM
其实210的启动过程更有意思,210内置了96KB的SRAM(称为iRAM),内置了64KB的NorFlash(称为iROM),210的启动过程大致如下:
步骤1:CPU上电之后,会从内部IROM中读取预设的代码(BL0)并执行。这个IROM代码首先会做一些基本的初始化(CPU时钟,关闭看门狗。。。)(这个IROM代码是三星在出厂前就设定好的,而三星并不知道以后我们的板子上会接什么样的DRAM,所以这个IROM无法负责初始化外部DRAM,所以这个代码只能初始化SoC内部的东西);然后这个代码会判断我们选择的启动模式(我们可以通过硬件跳线来改变板子的启动模式),然后把启动代码的第一部分(BL1,大小为16KB)从对应的外部存储器读取到内部SRAM中。
第二步:运行刚刚从IRAM中读取的BL1(16KB)然后执行。BL1负责初始化NandFlash,然后把BL2读到IRAM中(剩下的80KB)然后运行
步骤3:从IRAM运行BL2,BL2初始化DRAM,然后把OS读到DRAM中,然后启动OS,启动过程结束。
思路:因为启动代码的大小不固定,有的公司可能只需要96kb,有的公司甚至不需要1MB。所以上面说的两步启动方法并不适合。三星的解决方案是将启动代码分成两半(BL1和BL2),这两部分共同完成启动。
关键词:arm架构 架构