OMAP3530启动过程分析
- 格式:doc
- 大小:53.00 KB
- 文档页数:4
EPCS-9000www. ——————————————概述 EPCS-9000是广州致远电子有限公司采用TI 公司双核处理器OMAP3530设计的一款EPIC 标准尺寸工控机主板。
其资源丰富、接口齐全、功耗低,具有强大的多媒体处理能力。
预装正版Windows Embedded CE 6.0或Linux2.6.28并提供所有板载外设驱动库,可通过本地(SD/MMC 卡或U 盘)或Internet 远程升级Windows Embedded CE 操作系统。
EPCS-9000 提供了一路CAN-bus 现场总线接口和一个摄像头接口。
可以在工业温度范围(-40℃~85℃)内稳定工作,可以满足各种条件苛刻的工业应用,如:工业控制、现场通信、远程监控等领域;也可以满足一般的多媒体应用,如:视频监控、视频广告等领域。
——————————————产品特性 CPU :OMAP3530处理器;600MHz ARM Cortex ™-A8 Core ; 430MHz TMS320C64x+™ DSP Core ; 256MB 大容量NAND Flash 存储器; 128MB DDR 存储器; 1路带隔离CAN 总线接口; 1路摄像头接口;音频接口(支持音频输出与麦克风输入); 1路10/100M 以太网接口;5路串口(其中一个作为调试串口); 4路USB HOST 接口; 1路USB Device 接口;支持VGA 、TFT 液晶屏显示,最大分辨率可达1280 x 720 (720P); 1个SD 卡接口;8路缓冲数字输入和8路缓冲数字数出; 1个TVOUT 输出接口;————————————产品应用工业控制现场通信 信号处理 视频广告 远程监控视频监控 智能仪表————————————————————————————————典型应用OMAP3530采用双核处理器的嵌入式工控机主板—————————————订购信息操作系统 CANopen 型号 温度范围 EPCS-9000I-W -40°C ~ +85°C Windows CE --EPCS-9000I-L -40°C ~ +85°C Linux --EPCS-9000I-W-P -40°C ~ +85°C Windows CE 支持 EPCS-9000I-L-P -40°C ~ +85°C Linux 支持目录1. 功能简介及相关参数 (1)1.1 硬件参数 (1)1.2 软件参数 (3)1.3 电气参数 (4)2. 硬件接口 (6)2.1 功能框图 (6)2.2 跳线器说明 (7)2.3 接口说明 (9)2.4 其它说明 (18)3. 支持开发工具 (20)4. 可选配件及组装图示 (21)5. 机械尺寸 (25)6. 免责声明 (26)1. 功能简介及相关参数EPCS-9000是广州致远电子有限公司开发的基于OMAP3530双核处理器(ARM Cortex™-A8 Core + TMS320C64x+™ DSP Core)的EPIC标准尺寸工控机主板。
U-boot 启动流程(Linux 内核)的分析(三)U-boot 属于两阶段的Bootloader ,第一阶段的文件为cpu/arm920t/start.S 和board\samsung\smdk2410/lowlevel_init.S,前者是平台相关的,后者是开发板相关的。
1.U-Boot 第一阶段代码分析(1)硬件设备初始化依次完成如下设置:将CPU 的工作模式设为管理模式(SVC ),关闭WATCHDOG ,设置FCLK ,HCLK ,PCLK 的比例,关闭MMU ,CACHE 。
代码在cpu/arm920t/start.S 中,(2)为加载Bootloader 的第二阶段代码准备RAM 空间。
所谓准备RAM 空间,就是初始化内存芯片,使它可用,对于S3C24x0,通过在Start.S 中调用lowlevel_init 函数来设置存储控制器,使得外接 SDRAM 可用,lowlevel_init.S,文件是与开发板相关的,这表示如果外接的设备不一样,可以修改lowlevel_init.S 文件中的相关的宏。
(3)复制Bootloader 的第二阶段代码到RAM 空间中 这里将整个U-Boot 代码都复制到SDRAM 中,这在cpu/arm920t/start.s 中实现上面这段程序,在使用NANDFlash 启动时,需要修改。
(4)设置好栈 /*栈的设置灵活性很大,只要让sp 寄存器指向一段没有使用的内存即可*/.word TEXT_BASE //这里是获得代码段的起始地址,我的是0x33F80000(在board/xxx/config.mk中//可到找到“TEXT_BASE=0x33F80000”.globl lowlevel_init //这里相当于定义一个全局的lowlevel_init以方便调用lowlevel_init :/* memory control configuration *//* make r0 relative the current location so that it *//* reads SMRDATA out of FLASH rather than memory ! */ldr r0, =SMRDATA //SMDATA表示这 13个寄存器的值存放的开始地址,值为0x33F8xxxx,处于内//存中,这一句的作用是把其值加载到r0中ldr r1, _TEXT_BASE // 把代码的起始地址(0x33F80000)加载到r1中sub r0, r0, r1 //r0减去r1其结果存入r0,也即SMDATA中的起始地址0x33F8xxxx减去//0x33F80000,其结果就是13个寄存器的值在NOR Flash存放的开始地址ldr r1, =BWSCON /* Bus Width Status Controller */ //存储控制器的基地址add r2, r0, #13*4 //在计算出来的存放地址加上#13*4,然后其结果保存在r2中//13 个寄存器,每个寄存器占4个字节0:ldr r3, [r0], #4 //内存中r0的值加载到r3中,然后r0加4,即下一个寄存器的str r3, [r1], #4 //读出寄存器的值保存到r1中,然后r1也偏移4cmp r2, r0 //比较r0与r2的值,如果不等继续返回0:执行,也即13个寄存器的值// 是否读完bne 0b/* everything is fine now */mov pc , lr //程序跳转,返回到cpu_init_crit中.ltorg/* the literal pools origin */SMRDATA :...................relocate : /* 将U-Boot复制到RAM中 */adr r0, _start /* r0:当前代码的开始地址 */ldr r1, _TEXT_BASE /* r1:代码段的连接地址*/cmp r0, r1 /* 测试现在是在FLash中,还在是RAM中,如果要从NandFlash启动的话,这里要根据需要修改 */beq stack_setup /*如果已经在RAM中,则不需要复制*/ldr r2, _armboot_start /*_armboot_start在前面定义,是第一条指令的运行地址*/ldr r3, _bss_start /*在连接脚本U-Boot.lds中定义,是代码段的结束地址*/sub r2, r3, r2 /* r2 <- 代码段长度 */add r2, r0, r2 /* r2 <-代码段的结束地址 */copy_loop :ldmia {r3-r10} /* 从地址[r0]处获得数据 */stmia {r3-r10} /* 复制到地址[r1]处 */cmp r0, r2 /* 判断是否复制完毕 */ble copy_loop /*没有复制完,则继续*/#endif /* CONFIG_SKIP_RELOCATE_UBOOT */ldr r0, _TEXT_BASE /* _TEXT_BASE 为代码段的开始地址,值为0x33F80000 */sub r0, r0, #CONFIG_SYS_MALLOC_LEN /* 代码段下面,留出一段内存以实现malloc */sub r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* 再留出一段内存,存一些全局参数 */#ifdef CONFIG_USE_IRQsub r0, r0, #(CONFIG_STACKSIZE_IRQ +CONFIG_STACKSIZE_FIQ )#endifsub sp , r0, #12 /* 最后,留出12字节的内存给abort异常 */clear_bss :(5)跳转到第二阶段代码的C 入口点 在跳转之前,还要清除BSS 段(初始值0,无初始值的全局变量,静态变量放在BSS 段。
基于3G多媒体传输控制系统的设计摘要:本文以OMAP3530为平台,介绍了一种基于CDMA2000的3G网络视频播放系统的设计方案,利用嵌入式系统实现了视频文件的远程传输和播放,并通过对mplayer软件及算法的优化,提高了系统的性能,经过测试,达到了较好的效果。
关键词:OMAP3530 CDMA2000 Mplayer 3G 嵌入式系统目前,市场上的流媒体播放设备大部分分为2种类型,一种仍是单片机流媒体播放设备,这种设备仅仅只能靠自身的存储设备来自动循环播放流媒体文件;另一种是嵌入式流媒体播放设备,不过其流媒体更新还局限于局域网内部传输或者GPRS传输,前者传输速度较快但是受地域的局限性影响,而后者属于第二代通信系统,视频文件的传输速率受到很大影响。
随着第三代移动通信技术的普及和嵌入式技术的成熟以及高性能嵌入式处理器的飞速发展,我们完全可以利用3G无线网络传输速率的优势,搭载ARM系利嵌入式平台,使流媒体传输不受地域限制,能快速有效的传输。
同时,由TI公司生产的OMAP3530高性能处理器,能够完全很好的处理音视频播放以及读写大容量SD卡。
本文设计了一种基于先进微处理器(ARM)的3G移动多媒体播放器,结合了3G无线传输技术的传输距离远、成本低、接入方便等优点和嵌入式多媒体播放系统的体积小,功耗小等特点,能够快速、高效和大容量存储传输流媒体文件并实现实时播放功能。
1 系统的基本结构本系统采用中央服务器/客户机模式,由智能无线多媒体终端和一个发送流媒体文件的服务器组成,采用以太网(TCP/IP)实现信息传播,可以实现一点对多点及集中方式对终端进行控制播放。
系统由中央控制器(视频播放服务器)、播放控制软件、网络平台、网络型播放终端机构成。
1.1 系统的基本框架该系统具备的功能为:(1)无线通信功能:终端启动后自动连接上DynDNS服务器,方便服务器通过3G网络无线更新并存储流媒体文件内容;(2)信息管理:既可以通过3G网络对成百上千个终端播放情况进行集中统一的管理,也可以分级分区进行分布式管理。
U-Boot启动流程(Linux内核)的分析(一)前面一段时间一直在移植U-Boot,Linux内核和构建根文件系统,其中有些地方还不是很明白,现在回过头来,理解一下U-boot的启动流程,以及u-Boot是如何加载引导内核启动的。
这里的分析也都是以U-Boot-2009.08版本为基础的,可能会和以前的版本有所不同。
在这里也不打算一句句分析U-Boot的源码,只是想把U-Boot一步一步怎么最终能够加载Linux内核的过程,分析一下。
首先,我们应该理解Bootloader是什么?它有什么作用?其实它就是系统上电后运行的和小段程序。
1 BootLoader的概念在系统上电后,需要一段程序来进行初始化:关闭WATCHDOG,改变系统时钟,初始化存储控制器,将更多的代码复制到内存中。
并将操作系统内核复制到内存中运行,这就段程序代码就叫做Bootloader。
没有一个Bootloader完全支持所有CPU,所以我们要想使用Bootloaser 一般情况下要自己进行修改,我们可以增强Bootloader的功能,让它具有网络功能,可以通过NFS远程下载Linux内核和根文件系统,可以烧写Linux内核和根文件系统到NandFlash中,而这些功能对于最终的用户来说是没有什么意义的,它们看到的只是Bootloader引导Linux内核启动这一个功能,而其余的功能只对开发人员很有用处。
也就是说在开发期间这些功能是必不可少的。
(1)启动加载模式:这种模式也称为“自主”模式。
也就是Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入,这种模式是在嵌入式产品发布里的通用模式。
(2)下载模式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件,例如:下载内核映像和根文件系统映像等。
从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader写到目标上的Flash类的固态存储设备中,Bootloader的这种模式是在在开发时使用的工作于这种模式的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。
先看board/smsk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。
OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")/*OUTPUT_FORMAT("elf32-arm","elf32-arm","elf32-arm")*/ OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{.= 0x00000000; /*指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。
必须使编译器知道这个地址,通常都是修改此处来完成*/.=ALIGN(4);.text :{cpu/arm920t/start.o (.text)*(.text)}.=ALIGN(4);.rodata : { *(.rodata) }.=ALIGN(4);第一个要链接的是cpu/arm920t/start.o,那么U-Boot的入口指令一定位于这个程序中。
下面详细分析一下程序跳转和函数的调用关系以及函数实现。
1.Stage1:cpu/arm920t/start.S这个汇编程序是U-Boot的入口程序,开头就是复位向量的代码。
U-Boot启动代码流程图/* the actual reset code */reset: //复位启动子程序/*设置CPU为SVC32模式*/mrs r0,cpsrbic r0,r0,#0x1f ;;位清除,将某些位的值置0:r0 = r0 AND(!0x1f) orr r0,r0,#0xd3 ;;逻辑或,将r0与立即数进行逻辑或,放在r0中(第一个)msr cpsr,r0/*关闭看门狗*//* turn off the watchdog */#if defined(CONFIG_S3C2400)# define pWTCON 0x15300000# define INTMSK 0x14400008 /* Interupt-Controller base addresses */# define CLKDIVN 0x14800014 /* clock divisor register */#elif defined(CONFIG_S3C2410)# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */#endif#if defined(CONFIG_S3C2400)|| defined(CONFIG_S3C2410)ldr r0,=pWTCONmov r1, #0x0str r1,[r0]/*禁止所有中断和设置CPU频率*//**mask all IRQs by setting all bits in the INTMR - default*/mov r1, #0xffffffffldr r0,=INTMSKstr r1,[r0]# if defined(CONFIG_S3C2410)ldr r1,=0x3ffldr r0,=INTSUBMSKstr r1,[r0]# endif/* FCLK:HCLK:PCLK = 1:2:4 */;;FCLK用于CPU,HCLK用于AHB,PCLK用于APB/* default FCLK is 120 MHz !*/ldr r0,=CLKDIVN ;;根据硬件手册来设置CLKDIVN寄存器mov r1, #3 ;;用户手册的推荐值str r1,[r0]#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 *//*这些初始化代码在系统重起的时候执行,运行时热复位从RAM中启动不执行*//** we do sys-critical inits only at reboot,*not when booting from*/#ifndef CONFIG_SKIP_LOWLEVEL_INITbl cpu_init_crit ;;跳转去初始化CPU#endif;;#ifdef CONFIG_INIT_CRITICAL 原文中的,估计是1.1.16版本的;;bl cpu_init_crit;;#endif/* CPU和RAM两个关键的初始化子程序*//*初始化CPU */cpu_init_crit:/** flush v4 I/D caches 设置CP15*/mov r0, #0mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */;;使I/D cache失效:将寄存器r0的数据传送到协处理器p15的c7中。
1. OMAP3530的7个用于设置启动的外部引脚
OMAP3530支持很多种方式的启动,并且可以像PC一样的设置启动顺序,它是通过7
个引脚(boot0~boot6)电平来控制的。其中boot6用于选择时钟,当boot6接通过上拉电阻
接高电平时,使用TPS659xx提供的方波作为系统的时钟源;如果boot6接低电平,就使用
外部晶振作为时钟源。因为我的板子是有TPS65930的,因此boot6=0。boot0~boot5用于选
择通过哪些方式启动,并且这些启动方式的顺序,具体参考表25-3(3363页)以及表25-4
(3364页)。由于我的板子上只有NandFlash和SD卡,因此,使用boot5~0 = 0b001111这
种方式,检测顺序是NANDFLASH> USB > UART3 > MMC1或boot5~0=0b101111,检测顺
序是USB>UART3>MMC1>NANDFLASH。值得说明的是,USB和UART3的方式是属于外
设启动的方式,只有当这些接口接有可用于启动的设备时才会有效,相关内容可以参考
《OMAP35xTRM》的“25.4.5PeripheralBooting”,但是目前还用不到。
2.NandFlash启动
NandFlash属于Non-XIP(eXecuteInPlace)类的Flash,即不可直接在片内运行程
序,因此需要由OMAP3530的内部固件——ROMCode把Nand Flash内的程序读取出来,
然后再运行(“1.4OMAP3530的内存映射”中提到的内部80KB的ROM就是用来存储这个
ROMCode的)。完整的信息在《OMAP35xTRM》的3391页,25.4.7.4节
2.1关于美光的Nand+LPDRAM
美光的这个芯片上不会印有型号信息,只是有一个“FBGA Code”,去美光的网站
http://www.micron.com/support/fbga.html输入这个代码可以查到芯片的型号,然后根据
这个型号可以搜索到数据手册,但是要下载数据手册还得签署一个什么保密协议,通过审查
后才会用电子邮件的方式通知下载,真够麻烦的!
2.2NandFlash的连接要求
(1)NandFlash必须接在GPMC的CS0;
(2)GPMC_Wait0引脚要接在NandFlash的BUSY输出引脚,即R/#B引脚;
2.3NandFlash启动过程
(1)ROMCode先将GPMC设定为8位,非同步模式,用于读取NandFlash的ID信息,
根据读出的“DeviceID”(Byte1)与《OMAP35xTRM》表25-32(3392页)对照,确定容
量(注意表中的单位是bit不是Byte)、数据线宽度、和页大小(单位是KByte)。例如,我
的板子上的NandFlash的Device ID是0xBA,因此,查表得到数据线宽度是16位,页大
小是2048KB;
(2)当Nand的厂家不同,可能查表得到的“页大小”参数是错误的,因此ROMCode
会通过读出的第四字节(Byte3)确认页大小并取得块大小(表25-33,3393页)。但是这个
过程仅仅发生在NandFlash容量大于等于2Gbit时,对于小于2Gbit的NandFlash,当页为
512Byte,块为32KB;当页为2KB时,块为128KB。我板子的请款是块大小:128KB,页
大小:2KB;
(3)上述过程的流程图在3395页图25-16,之后会读取ID2来确定更详细的NandFlash
参数,流程图在3396页图25-17,获得的参数在表25-34(3397页);
(4)读取第一页和第二页的sparesectors来确定NandFlash坏块,流程图在3398页图
25-18;
(5)之后ROMCode从NandFlash最开始读取启动镜像文件,当然对镜像的格式有特
殊要求,将在“2.4启动镜像文件的格式”说明。
3. SD卡启动
和NandFlash类似,程序也不可以在SD卡上直接运行,必须读出来才能运行。ROMCode
可以读取MMC/SD卡上的启动文件,但是对MMC/SD卡片上的分区、文件系统等有特殊要
求。具体过程的详细描述在《OMAP35xTRM》的“25.4.7.6MMC/SDCards”。
3.1 ROMCode操作SD卡的参数
(1)初始化卡片的频率:400kHz;
(2)数据传送频率:20MHz;
(3)支持大容量(>2GB)的SDHC卡。
3.2 SD卡启动的过程
SD卡启动的流程图在《OMAP35xTRM》的图25-24(3405页),其中每一步的流程在
后面都有详细介绍。下面简单总结下流程:
(1)ROMCode先通过I2C配置TPS659X0为MMC1配电,MMC1单元需要两个电压,
一个是模块工作需要电源电压VDDS_VMMC1,另外一个是各信号线工作电平的参考电压
VDDS_VSIM(这两个引脚如何与TPS65930连接,请看《PoweringOMAP™
3WithTPS65930/20:Design-InGuide》(文档号:SWCU059)的第8页的图2;如果使用
TPS65950,请看《采用TPS65950为OMAP™3供电:应用设计指南》(文档号:ZHCU013)
第9页的图2),ROMCode先将他们配置成3.0V。
(2)通过一系列命令初始化SD卡,流程图为图25-27(3408页):
先发送CMD1,对于MMC卡,将返回应答,对于SD卡将超时;
如果上一步超时,发送CMD55和ACMD41;
如果上一步还是超时,将判断为“没有卡片插入”。
以上几部也回答了上一章留下的一个问题:“在SD卡启动过程中,会不会通过TPS659xx
来检查卡片是否插入呢?如果是这样,那使用小型的microSD卡槽(只有8个引脚)又该
如何处理?”SD卡启动过程中,并不使用CD引脚来检查卡片是否插入,而是通过图25-27
的步骤,因此心使用小型的microSD不会有什么问题。
(3)之后是读取启动镜像文件,这里又可以使用两种模式来进行操作,其中“Raw模
式”不使用,具体介绍在《OMAP35xTRM》3408页。对于“文件系统模式”,ROMCode
对SD卡内的文件系统是有特殊要求的:首先,SD卡要有MBR(MasterBootRecordStructure)。
对于小于等于2GB的SD卡,直接格式化后通常没有MBR,0扇区直接就为BootSector,
这样是不能用于启动的。其次,SD卡的一个主分区必须为FAT文件系统,通常把第一主分
区格式化成FAT32就可以了。最后,启动文件一定要放在上述FAT文件系统的根目录下,
并且名字一定要为MLO。
4. 启动镜像文件的格式
OMAP3530要求启动镜像文件有文件头,文件头数据结构又分为多种,具体参考
《OMAP35xTRM》的“25.4.8ImageFormat”(3415页)。这里只用到最简单的一种
(25.4.8.3ImageFormaforGPDevices),即在镜像文件的最前面增加8个字节,前4个字节表
示整个文件的大小(不包括文件头),个人猜测这个信息用来告诉ROMCode需要读取多少
字节;后4个字节表示镜像文件要加载的地址,这里需要注意,这个地址需要放在OMAP3530
的内部SRAM内,ROMCode把启动镜像文件加载到这个地址后会跳转到这个地址开始执
行。