1、硬件特性:
(1)内存:内存有两种类型,SRAM(Static RAM)和DRAM(Dynamic RAM),分别称为静态内存和动态内存。
SRAM:静态内存,特点是容量小、价格高。优点是不需要软件初始化就可以直接上电使用,读取执行内部存储的信息。
DRAM:动态内存,特点是容量大,价格便宜。缺点是上电后不能直接使用,需要经过软件初始化后才可以使用。
(2)外存:外存很多类型,这里只简单的说两种,NandFlash和norFlash。
norFlash:特点是容量小,价格高。优点是可以和cpu直接总线相连,cpu上电后就可以直接读取存取在里面的代码,一般用作启动介质。
NandFlash:特点是容量大,价格便宜。缺点是不能直接总线式访问,即不能上电后直接读取里面的代码来执行,需要cpu进行软件初始化,然后通过时序接口的方式来读写执行。
2、S5PV210芯片的硬件特性:
上面的截图来自sumsung S5PV210的数据手册。
S5PV210微处理器是基于Cortex A8的,SoC内内置了一个64KB的IROM(norFlash类型),一个96KB的SRAM,还有各种类型的控制器,包含:SDRAM控制器、4位/8位的高速SD/MMC控制器、NandFlash控制器、OneNand控制器、eSSD控制器、UART/USB控制器。
S5PV210芯片内置了多种类型的控制器,所以S5PV210支持多种方式(以上内置控制器)的启动,只需将OM引脚的拨码开关调至相应的类型,即可以相应的方式启动。S5PV210支持的启动方式如下图:
3、OM引脚配置:
4、现在,我们来看看S5PV210的启动过程:
(1)cpu上电后,先从S5PV210内部的IROM中读取预先设置的代码(BL0)(这段代码是芯片出厂时就内置的,因为不知道将来外部设备接的是什么,所以只是对芯片内部进行简单的初始化),然后执行。这段代码BL0做了什么呢?如下图:
BL0首先关闭了看门口定时器,然后初始化指令cache(指令缓存)、初始化栈跟堆、初始化块设备复制函数和初始化系统时钟和锁相环。下一步,BL0根据我们在板子上OM引脚的跳线设置,使用块设备复制函数从相应的外部存储设备中复制一段代码(BL1,这段代码最大不能超过16KB)到SoC内部的SRAM中,然后检验其校验和,若是校验和正确,则跳转至BL1这段代码在SRAM中的起始地址去执行。若是检验和不正确,则跳转到第二启动方式启动,接步骤5。
(2)BL1这段代码继续从外部存储设备中读取剩余的启动配置代码BL2(这段代码最多不能超过80KB,因为SRAM最大96KB,BL1最大16KB),然后跳转到BL2这段代码去执行。
(3)BL2这段代码首先对内存DRAM进行初始化配置(DRAM上电后不能直接使用,需要经过初始化后才能),然后再将外部存储设备(外存)中存储的关于OS(操作系统)初始化的代码读至DRAM(内存)中去执行操作系统的初始化,初始化完成后,就可以在内存中启动操作系统并进行操作了。ps:内存说:终于轮到我上场了,哈哈。
(4)这里的外部存储设备(外存)也是要经过初始化才能使用的,这里应该是在BL0使用块设备函数从外存复制BL1时执行了初始化。不然就不可以从外存中读取信息。
(5)上面说的过程是在第一启动方式成功的情况下的流程,如果第一启动方式不成功,那么S5PV210就会跳转到第二启动方式去启动,第一启动方式是可以通过OM引脚来选择从哪个外存启动的,然而第二启动方式则是固定从SD卡的通道2启动。具体的实现方式与上面的第一启动方式差不多,只不过外存介质换了,依旧是从步骤2开始执行。如图:
(6)如果第二启动方式即SD卡通道2启动失败,则跳转至UART启动,UART失败,则跳转至USB方式启动,再不行,GG。很好,已经是一块砖头了。
5、疑惑:
(1)为啥要将BL1和BL2分开来在SRAM中执行?96KB不是刚好包含了BL1和BL2了吗?
我听一位老师说是因为BL0对于外存的初始化力度不够,因为本身IROM也就64KB,没办法做太多的事。只能初始化读取外存的BL1部分。然后通过BL1继续初始化外存,再读取BL2来执行。
(2)BL1固定的16KB?BL2固定的80KB?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。