S5pv210是一个32位精简指令集、低功耗、高性能的cortex-a8处理器,它属于armv7架构。
上边的这张图,显示了S5PV210处理器的整体框图。从这张图中我们可以了解到210的主要功能,这些小的模块共同构成了210处理器。
首先说一说CPU核心部分,CPU的主频可以达到800M或1GHz,我们可以通过配置U-Boot源码中对应控制主频的宏来进行主频的选择。U-boot默认的主频是1GHz。CPU的核心部分还有512KB的高速缓存。还有NEON,NEON它是ARM内部集成的可以实现复杂算法的模块,比如说图像的智能分析,数学上的运算等都是通过NEON来实现的。
左上角是系统外设,这一部分主要是一些低速设备。其中:
RTC是实时时钟,负责系统时间的控制;
PLL是锁相环,主要起倍频作用;
timer with PWM是定时器模块;
Watching Timer是看门狗,看门狗主要是在应用程序跑飞或者系统死机一段时间之后,将系统重启。看门狗在实际的项目中是要打开的。
DMA(24ch)是24通道的DMA控制器。如果没有DMA的话,数据是通过CPU传给内存,再由内存传给系统外设的;有了DMA之后,数据可以不通过CPU。比如音频数据通过DMA控制通道直接传到内存中。DMA可以控制外设数据与外设数据、外设数据与内存数据、内存数据与内存数据之间的传输,这样可以有效的提升系统的工作效率。6410中也有DMA,只是没有210的多;
Keypad(14x8):14x8的键盘接口;
TS-ADC(12Bit/10ch):12位的数模转换,有些电阻屏的触摸功能就是由他来实现的;
左下角是外部总线模块。从这个模块可以看到210支持IIS、AC97和PCM这样的音频标准接口;
HSMMC/SDx4:4路MMC总线,可以接SD卡、TF卡和SDIO接口;
USB Host2.0/OTG2.0:210支持USB Host 2.0,和师傅实际测试了一下,USB Host2.0的传输速度大概是12~16M/s;
UARTx4:4路串口;
IICx3:3路IIC总线,一些常用的电容屏的触摸芯片,重力传感器就是接在了IIC总线上;
HS-SPIx2:2路SPI总线;
GPIO:GPIO接口;
下边中间的是
电源管路模块,如果在做
手机或者平板电脑类的产品的话,一般会用到,他的作用是通过软件动态调节CPU功耗,一般是通过升高或降低,打开或者关闭电压的方式来调节功耗的;
右下角是存储接口模块,以前听到Memory总会幼稚的认为是内存的意思,其实并不是这样,Memory其实是存储的意思;
S5PV210的NAND支持SLC和MLC两种,SLC的稳定性由于MLC,同等容量的SLC价格高于MLC;
它还支持16位硬件ECC。由于nand flash的工艺问题,在数据读取的过程中可能会出现位错误,这时就需要Ecc来检查和纠正了;
210 常用的芯片是LPDDR2和DDR2,这里的LP就是low power的意思,就是低功耗~
右上角部分就是210强大的多媒体功能模块了;
首先是摄像头接口;
MFC多媒体格式转换模块,主要的任务就是视频文件的编解码;具有30帧/s的处理能力,支持H.263/H.264/MPEG4编码和解码;
支持2D/3D图形引擎;
HDMI,高清数字多媒体接口;
JPEG主要用于图片文件的硬件编码,原始数据通过JPEG编码生成jpg格式文件;
最后是LCD控制器;
中间的Multi layer AHB/AXI Bus是高速总线,CPU内部各个模块与CPU就是通过这个高速总线来实现通讯的。
--------------------------------------第二部分---------------------------------------
简单的了解了210处理器之后呢,就开始进行U-Boot的移植了。说到U-Boot,肯定会有不少朋友产生疑问,什么是U-Boot?U-Boot的功能是什么呢?其实啊,这个U-Boot它就是universal bootloader,也就是通用的bootloader。它存在于nandflash或者SD卡中,它是在开机上点之后,操作系统起来之前用来引导的一个程序。U-boot 的主要作用是进行内存的初始化、CPU的初始化、串口初始化等一系列的初始化工作,完成这些之后,再将操作系统加载到内存中,从而运行起来。
U-Boot 源码文件下包括一些目录文件和文本文件,这些文件可分为”与平台相关的文件”和”与平台无关的文件”,其中common文件夹下的文件就是与平台无关的文件;与平台相关的文件又分为CPU级相关的文件和与板级相关的文件:arch目录下的文件就是与CPU级相关的文件,而board、drivers、include等文件夹下的文件都是与板级相关的文件。我们在移植的过程中,需要修改的文件也就是这些与平台相关的文件。
U-Boot 的移植过程主要包括以下四个步骤:
1.下载U-Boot源码
2.修改相应的文件代码
3.编译U-Boot
4.烧写到
开发板上,运行
下面是移植2011.06版本到210处理器上时修改(或添加)的文件:
以下文件均为与CPU级相关的文件
uboot2011.06/arch/arm/cpu/armv7/start.s
uboot2011.06/arch/arm/cpu/armv7/Makefile
uboot2011.06/arch/arm/include/asm/arch-s5pc1xx/hardware.h
uboot2011.06/arch/arm/lib/board.c
uboot2011.06/arch/arm/lib/Makefile
uboot2011.06/arch/arm/config.mk
以下文件均为与板级相关的文件
uboot2011.06/board/samsung/OK210/tools/mkv210_image.c
uboot2011.06/board/samsung/OK210/lowlevel_init.S
uboot2011.06/board/samsung/OK210/mem_setup.S
uboot2011.06/board/samsung/OK210/OK210.c
uboot2011.06/board/samsung/OK210/OK210_val.h
uboot2011.06/board/samsung/OK210/mmc_boot.c
uboot2011.06/board/samsung/OK210/Makefile
uboot2011.06/drivers/mtd/nand/s5pc1xx_nand.c
uboot2011.06/drivers/mtd/nand/Makefile
uboot2011.06/include/configs/OK210.h
uboot2011.06/include/s5pc110.h
uboot2011.06/include/s5pc11x.h
uboot2011.06/spl/Makefile
uboot2011.06/boards.cfg
uboot2011.06/config.mk
uboot2011.06/Makefile
在这里简单的说明一下我选择2011.06版本的uboot 进行移植的原因,在自己平时在各个
william hill官网
、贴吧中的了解,发现大家对2011.06版本的讨论相对来说多一些,所以选择的这个版本。在这里我想自己试一下U-Boot移植的过程也希望能给大家有一些帮助。
另外呢,附件提供的移植参考目录是在原始U-boot-2011.06版本基础上进行的修改,把修改的文件单独拿出来,方便大家使用对比工具查看我修改了哪些内容,当然移植参考目录里面,并不是所有的文件都是从U-boot-2011.06拷贝出来的,有些文件是从U-boot-1.3.4拷贝的:目录board/samsung/OK210下面的mmcboot.c 文件,从SD启动U-Boot必须含有该文件,三星官方提供的U-boot-1.3.4源码包含有该文件,我们直接拷贝过来就可以了。
下面的内容是我在移植uboot的时候师傅给我总结的移植思路(贴出来和大家一起分享一下~~):
移植过程就是在新的U-Boot代码中增加CPU级和Board级代码,使之能够在开发板上面运行。
1.看一下源代码里面是否有CPU级相关代码,比如S5PV210是ARMV7架构,看一下CPU目录下面是否有ARMV7的目录,因为U-Boot已经是嵌入式平台里面应用很广泛的Bootloader了,所以基本上都已经有了CPU级相关代码。
2.下一步就是查看板级相关代码了。一款主流CPU发布的时候,厂商一般都会提供官方开发板,比如S5PV210发布的时候三星公司提供了官方开发板,使用的U-Boot是1.3.4版本,三星在U-Boot官方提供的1.3.4基础上面进行了改进,比如增加SD卡启动和NandFlash启动相关代码 等等。在移植新版本的U-Boot到开发板的时候,我们需要看一下U-Boot代码里面是否已经含有了板级代码,如果已经有了,就不需要自己改动了,编译以后就可以使用,而有的时候在较新的U-Boot代码里面,是不含有这些板级支持包的,这个时候就需要增加自己的板级包了。
3.板级包的增加需要参考CPU官方提供的U-Boot代码,因为我们移植的是最小功能的U-Boot,让U-Boot能够运行起来即可,所以只需要抓最关键的代码,比如系统时钟的配置,DDR2内存的初始化代码,调试串口的初始化等,这些代码是需要参考U-Boot1.3.4的,不需要我们自己去写每一行,但是需要我们知道U-Boot 能够在S5PV210上面运行起来,必须做的工作。