1、S5PV210的地址映射
1.1、什么是地址映射
S5PV210属于ARM Cortex-A8架构,32位CPU,CPU设计时就有32根地址线&32根数据线。32根地址线决定了CPU的地址空间为4G,那么这4G空间如何分配使用?这个问题就是地址映射问题。
1.2、S5PV210的内存映射
要看数据手册
1.3、一些专业术语
ROM:read only memory只读存储器
RAM:random access memory随机访问存储器
IROM:internal ROM 内部ROM,指的是集成到SoC内部的ROM
IRAM:internal RAM 内部RAM,指的是集成到SoC内部的RAM
DRAM: dynamic RAM 动态RAM
SRAM:static RAM 静态RAM
SFR:special function register 特殊功能寄存器
2、CPU和外部存储器的接口
2.1、内存和外存
内存:内部存储器,用来运行程序的,RAM。例如DRAM、SRAM、DDR。
外存:外部存储器,用来存放东西的。ROM。例如硬盘、Flash(Nand、iNand 、、、U盘、SSD)、光盘。
CPU连接内存和外存的连接方式不同。内存需要直接地址访问,所以是通过地址总线6数据总线的总线式访问方式连接的(好处是直接访问,随机访问;坏处是占用CPU的地址空间,大小受限);外存是通过CPU的外存接口来连接的(好处是不占用CPU的地址空间,坏处是访问速度没有总线式快,访问时序较复杂)。
2.2、SoC常用外部存储器
NorFlash
NandFlash
eMMC/iNand/moviNand
oneNAND
SD卡/TF卡/MMC卡
essD
SATA硬盘
2.3、S5PV210支持的外部存储器
看数据手册
2.4、总结
(1)现代SoC支持多种外部存储器。
(2)外部存储器主要用来存储程序(可执行代码),相当于电脑的硬盘。
(3)各种不同外部存储器原理不同,大小、性价比不同,一般产品厂家根据需要选择适合自己产品的外存使用。
(4)外部存储器和CPU连接一般不是通过地址&数据总线直接相连,因为地址空间不够用。一般都是通过专门的接口来连接的。
3、S5PV210的启动过程
S5PV210使用的启动方式是:外接的大容量Nand +外接大容量DRAM+ SoC内置SRAM
第一步:CPU上电后先从内部IROM中读取预先设置的代码(BL0),执行。这一段IROM代码首先做了一些基本的初始化(CPU时钟、关看门狗...)(这一段IROM代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的DRAM,因此这一段IROM是不能负责初始化外接的DRAM的,因此这一段代码只能初始化SoC内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16KB)到内部SRAM。
第二步:从IRAM去运行刚上一步读取来的BL1(16KB),然后执行。BL1负责初始化NandFlash,然后将BL2取到IRAM(剩余的80KB)然后运行。
第三步:从IRAM运行BL2,BL2初始化DRAM,然后将OS读取到DRAM中,然后启动OS,启动过程结束。
思路:因为启动代码的大小是不定的,有些公司可能96kb就够了,有些公司可能1MB都不够。所以两步的启动方式不合适。三星的解决方案是:把启动代码分为两半 (BL1和BL2),这两部分协同工作来完成启动。
3.1、BL0做了什么
关看门狗
初始化指令cache
初始化栈
初始化堆
初始化块设备复制函数
设置SoC时钟系统
复制BL1到内部IRAM (16KB)
检查BL1的校验和
跳转到BL1去执行
4、如何在开发板上选择不同的启动方式
4.1、使用板载的eMMC启动(在SD卡的通道0上)
开发板收到默认就是从eMMC启动,内部预先烧录了Android。
4.2、从SD卡的通道2启动
可以使用外置SD卡从SD2通道启动,但这需要先破坏板载的eMMC中的android镜像。破坏方法见九鼎官方的裸机教程文档《x210v3开发板裸机教程.pdf》中2.5.2节(P19)。
OMpin设置和SD0启动一样。
4.3、USB调试模式