(一)s5pv210启动方式

来源:互联网 发布:centos supervisor 编辑:程序博客网 时间:2024/06/05 10:57

序:

        后悔自己当初买了友善的smart210,它的资料做的很不好,就像学校里头的博创实验箱,箱子可以可是做的资料却狗屁不是。如果之前买的是韦东山老师的jz2440估计现在学起来不用那么苦逼,我也看了很多人的博客关于smart210的技术说明,但我发现它们都是直接在友善的裸机实验的pdf中"ctrl+c" 然后"ctrl+v",这样就成为了自己的博客技术文章。虽说这样做没有错,自己没有总结过的知识点学起来能扎实?我买了苗凤娟的arm cortex a8的书,书的小错误倒不说,我在纠结DDR2 SDRAM的配置时,您也不能拿个norflash的配置代码来忽悠我啊苗大人(对作者的尊称),网上下载配套的光盘代码却是sdram的初始化代码,在书里就是随便忽悠,这样真的好吗?因此我从arm的裸机开始,把smart210的裸机驱动玩一遍。从最开始的点灯到最后面的LCD液晶驱动以及DM9000的移植,最后参照韦东山老师教的,自己尝试移植uboot,这就是我的裸机开发部分的学习计划。这里做简单的说明,smart210使用的是三星公司是s5pv210(cortex A8)芯片,友善做的superboot不开源,这也是我对友善不是很"友善"的原因。


芯片简介:

        s5pv210单片机是三星公司推出的一款基于cortex a8核的单片机(和s5pc100基本相同),s5pc100主要用于手机当中,它的体积比较小且功耗要求都比较低因此各方面做得都很精细,而s5pv210主要用于平板电脑中,它的性能和功耗都要比s85pc100高一点(其实也强不到多少)。s5pv210的内部ram为96K、rom为64K,一共有237个gpio端口(一共15组,QAQ),带有nor、nand、sdram接口,在中断方面和arm7的基本相同,且它有3组中断源,4个串口,4个LCD液晶接口(友善只引出2个),还有camera(摄像头)接口,系统最高频率是1GHz。此款单片机对多媒体的支持比较好,在音频数据传输上有独立的DMA,内部带有jpeg文件的编解码,支持视频文件的h.264的硬件编解码等。


启动方式:

         一般的,我们通过 jtag接口给我们的arm单片机烧写程序。虽然我们的s5pv210单片机也有jtag接口,友善在核心板上也引出这几个脚(就几个点点引了跟没引一个鸟样),但因s5pv210的启动方式多样且容易上手,因此在对s5pv210操作时候我们一般不用jtag。s5pv210的启动方式有6种,我们最常用的启动方式是nand、nor、sd(卡)方式进行启动。在芯片刚上电的时候,会自动执行内部irom的代码(我们称之为BL0 =》boot loader 0),它主要是关看门狗、初始化cache、设置堆栈指针以及根据我们选择的引导方式,从特定的设备中将它的前16K数据拷贝到sram中,然后再sram中执行代码(我们称之为BL1),BL1最主要就是用于初始化板子,以及加载BL2的代码(boot lodaer 的第2阶段),BL2主要是负责SDRAM的初始化,将内核拷贝到SDRAM中,引导内核。首先我先上一个图,这个图就是内部iROM代码所做的事情,如下图所示:

                                

      它的执行步骤也说的很清楚了,就是关看门狗,初始化cache、设置堆栈指针、初始化内部的块设备拷贝函数(用于快速从nand、nor、sd卡中把数据拷贝到ram中)、将引导设备的前16K拷贝到sram中、确认引导设备中的代码是否有效(检查校验字节)等,如果校验成功则跳到刚才拷贝的16K的部分开始执行。现在我们再次回顾它的启动过程:IROM根据芯片的boot引脚知道选择了哪个设备作为引导,然后拷贝对应设备的前16K内容到sram中并对其进行校验,如果校验成功则执行SRAM中的代码(BL1),这部分代码主要是初始化板子的各个部件、时钟等,然后加载BL2(用于初始化sdram、引导内核等),BL2主要的作用就是将内核拷贝到sdram中然后引导内核的运行。具体的我们可以看下面的这个图:


        我们可以从流程图知道,芯片上电时候执行其内部的初始化代码,然后根据OM引脚(boot 选择引脚)决定从哪个设备开始引导(我们称为1st boot,第一次引导),如果在第一次引导中,指定设置中的代码无效则这次的引导会不成功,这时候会对用于第二次引导的设备进行轮询校验(也就是图中左边的Go to 2nd boot)。对于secure boot我们一般不关心,它主要是与芯片加密相关的,我们既不做飞机大炮,又不做卫星导弹,这个功能用不到,且一般都配置它为非secure boot(默认就是非secure boot),然后就顺利跑到了BL1部分,BL1主要是初始化板子与加载BL2的代码,然后运行BL2的代码。BL2主要是初始化SDRAM然后引导内核。这就是整个boot的流程。对于之前没讲的go to 2nd部分,我现在补充,但是还要先上图:


         在第一个引导失败后,会进行第二次引导,例如sd卡有两个通道,通道0用于1st boot,通道2用于 2nd boot(s5pv210有多个SD卡控制接口,也就是所谓的通道),如果第二次引导都失败的话,就会尝试通过串口和USB进行引导,如果还是引导失败的话则终止引导过程(估计是板子要“假死”了)QAQ。这就是s5pv210的boot基本情况。对于使用MMC设备(SD卡)启动的的,要在特定位置设置MMC卡的数据信息,主要是三个全局变量,如下表所示(一般来说不设置也没有多大问题,不用rom内部的函数就是了):



初始化后的板子:

        板子在经过irom的初始化后,主频情况如下所示:


               今天只要对s5pv210的启动方式有所了解即可,到了后面会对这份手册进行详细的补充,手册:S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf

1 0