本来想在写篇关于裸机开发编译环境的,看来前两篇文章反馈的效果不佳,白白了浪费了一周的时间,大家的水平都远远超过这个阶段了,编辑对这个也没什么兴趣,不写了。费力不讨好的事情,干他作甚! 在此特地感谢aven等先行研究的大侠们,向他们致敬! 这次想研究一下,pi2的心脏是如何配置才能让这颗四核心的心脏跳动起来,没错,就是它,S5P4418. Pi2拥有一颗强大的心脏,估计这也是这次试用竞争如此激烈的原因吧!4核心的cpu,主频1.4Ghz,最大内存可以支持到2GB,跑什么OS都绰绰有余了。 当然你要是硬抬杠,拿大型机的系统来说事,我也没辙。 那么问题来了,有些场合,比如,工控、机器人、飞控等实时性要求较高的场合,上OS系统会影响系统响应速度,怎么办? 上实时操作系统啊!聪明,这是个好办法。 那么问题又来了,实时Os是怎么引导的?cpu怎么就开始干活了呢? 小孩没娘,说来话长啊! 在很久很久以前,国外有个牛x的大户人家,叫做三星的,他野心勃勃,老想研究出一种智能的大脑,以取代人类的大脑,为此,他们雇了一大批劳工,并且花重金购买了英国一个叫 ARM的技术来助力,苦心竭力的研究后,终于搞出了一个系列的智能的大脑,比如:2440、6410、210、4412都是这个系列的产品。他们也因此发了一大笔横财。而我们要研究的4418则是三星最近再放出来的产品。它的前辈们都被人们从里到外的研究的差不多了, 那么这些前辈也有同样的问题,怎么就开始工作了呢? 面对我们五花八门的的引导设备,nor flash、nand flash、emmc、ide、sd、net,cpu该怎么去面对! 劳动人民的智慧是无穷的,聪明的劳工们想到了一个决定聪明的方法: 让承载cpu的板子,在上电后,可以选择自己从哪里引导,对,就是,你爱从哪里引导就从哪里引导,随便! 这个功能就是OM[0:6],通过配置这几个引脚来决定cpu从哪里起身。方便多了吧! 前辈门是方便了,到了4418这里,麻烦又来了。怎么回事,启动变复杂了!这次不知道三星这个土财主又在憋什么大招! S5p4418芯片配制可以支持更多种启动方式:外部静态存储、内部rom(,NAND 、SD/MMC/eMMC、SPI、UART、USB).口说无凭,来看看三星的4418圣经吧。 翻开圣经第三章,system boot
没错吧!白纸黑字,写得清清楚楚。 具体这些东西该怎么配置到底从哪个引导呢? 下面来看第二张图: 第二节 功能描述。
第一列pins是芯片管脚名,有时间可以自己和第二章的pin逐一对照。 第二列RST_CFG 暂时没搞清什么意思。看名字像是寄存器,芯脚别名?留待后面验证。 第三列 到第九列 分别是各种引导方式所需要的配置参数。 好了,接着分析下一话题,不同的启动模式需要配置哪些些引脚。
接着来看第三张表,启动顺序的配置,
这三张表看完了,大概了解一下就可以了。 等会我们分析完pi2的启动后,就应该更能加深了解这三张表了。
注意看MCU_SD[0:2]的值, MCU_SD[1]接地,被拉低。 MCU_SD[0]和MCU_SD[2]接3.3v,高电平。 SD[3:5],接地,低电平。 SD[6],接3.3v,高电平。 因此MCU_SD[0:2]=101。 回头再看我们的第一张图。
眼尖的直接看到了,初步确定是从SD MMC 启动。 那又有点晕?到底是SD 还是MMC,怎么你越说我越糊涂啊? 别急哈,咱们不是还有好几个引脚没看呢吗?SD[4:6]还没用上呢? 哈哈,看第二个圈圈,刚好他们决定了什么时候由eMMC引导的。 接着看图,
看到了吧,对照上面的分析,SD[4]=0,再看红圈圈,看到了吧,0:NormalSD Boot。 Ok,至此,我们的小pi2启动分析明白了吧! 小pi2从SD卡,常规引导。 顺便分析一下, SD[5],他的电平高低,决定了你选择eMMC启动时从eMMC的那个分区引导系统。 SD[6],电平的高低决定了,是否支持交互式引导。 好像至此分析完了啊!那原理图上的这个图是什么鬼啊!
既然放上去,肯定是有用的。 干什么用的呢?其实他是为了4418能像前辈们一样,支持启动顺序,比如,先启动SD,不行,在从eMMC启动。。。。。。 好像挺酷的功能,怎么实现呢? 好了,又要看第三张图了
从前面的分析知道,这个图中nexttry,use_fs,nextport,port sel1,port sel0,bootmode等参数决定了我们小pi2的启动顺序。 Ok, 再看看,这些脚在哪里? Nexttry= VID1[0] use_fs= VID1[4] nextport= VID1[2] port sel1= VID1[3] port sel0= SD[3] 回到第一张图,
奥,原来对应的是VIDI[7:0], 再回到我们小pi2的原理图,找到
VID1[0]->MCU_CAM1_D[0] VID1[1]->MCU_CAM1_D[1] VID1[2]->MCU_CAM1_D[2] VID1[3]->MCU_CAM1_D[3] VID1[4]->MCU_CAM1_D[4] VID1[5]-> VID1[6]-> VID1[7]->MCU_CAM1_D[7] 在回到pi2原理图,在看看他们的值是多少?
MCU_CAM1_D[0]=0 对应Nexttry=0 MCU_CAM1_D[1]=1 MCU_CAM1_D[2]=0 对应nextport=0 MCU_CAM1_D[3]=0 对应port sel1=0 SD[3]=0 对应port sel0=0 MCU_CAM1_D[4]=0 对应 use_fs=0 MCU_CAM1_D[7]=1 值得注意的是和portsel1对应的就是第一个图中的port num1. 好了 nexttry,use_fs,nextport,portsel1,port sel0对应的序列是 0 0 0 0 0 再回到第三个图
根据00000这个序列,能查到 三种启动顺序,晕了。 到底还是哪种呢? 别急,还有个boot mode参数没用呢? 怎么查这个参数,ok,再回到第一个图
SD[2:0]是什么内容呢?还记得我们前面的分析吗?SD[2:0]的值,确定是5,SDMMC启动。 再看第三个图:
Ok,在加上这个条件,可得出结论: 我们的小pi2 的启动顺序是:sd0->u***. 终于分析完了。
|