S5PV210开发系列一_开发环境以及启动模式

S5PV210开发系列一

开发环境以及启动模式

象棋小子          1048272975

ARM核以其高性能、低功耗、低成本广泛应用在各个领域,包括ARM7、ARM9、ARM11、Cortex-M、Cortex-A等这几个系列。众多的半导体商如NXP、Freescale、Atmel、Samsung、TI等都设计了基于ARM核的自家通用处理器,ARM核从低成本控制处理器到高性能应用处理器,已经深入到我们生活的方方面面。笔者此处就Samsung的Cortex-A8处理器S5PV210作一个简单的介绍。

1.  S5PV210概述

S5PV210是一款低功耗、低成本、高性能的移动领域以及普通应用的微处理解决方案,集成于基于ARMv7架构的Cortex-A8内核,支持众多的外设。

S5PV210采用了64位内部总线架构,并包括了许多性能强大的加速硬件,例如,针对于图形、图像加速、显示、伸缩裁剪。集成的多媒体格式编码(MFC)支持编解码MPEG-1/2/4、H.263、H.264,同时还支持实时会议、模拟电视输出、高清视频、PAL等。

S5PV210的关键特性有如下几点:

  • ARM Cortex-A8内核,带有NEON信号处理扩展,32/32k 指令/数据缓存以及512k二级缓存,主频[email protected]
  • 64位多层总线架构
  • 先进的电源管理系统
  • 用于安全启动的片内64k ROM以及128k RAM
  • 8位ITU 601/656摄像头接口,横向最大支持4224像素(伸缩)或8192像素(未伸缩)
  • 多格式编解码单元支持MPEG-4/H.263/H.264的编解码,最高支持[email protected],支持MPEG2/VC1/DIVx的解码,最高支持[email protected]
  • JPEG编解码支持8000万像素每秒
  • 支持3D/2D多媒体加速
  • 1/2/4/8调色板或8/16/24位非调色板TFT控制器
  • 支持模拟电视信号输出以及高清视频接口
  • 支持MIPI-DSI以及MIPI-CSI
  • 1路AC97音频编解码接口以及3路PCM串口音频接口
  • 3通道24位I2S接口
  • 1路单输出S/PDIF数字音频接口
  • 3通道I2C接口
  • 2通道SPI接口
  • 4通道UART接口,支持蓝牙2.0
  • 1个USB 2.0 OTG控制器
  • 1个USB 2.0主机控制器
  • 支持异步调制解调器接口
  • 4通道SD/SDIO/HS-MMC接口
  • 支持ATA/ATAPI-6标准接口
  • 24通道DAM控制
  • 支持14x8矩阵键盘
  • 10通道12位复用ADC
  • 可配置的GPIO口
  • 实时时钟、PLL、定时器、看门狗等
  • 用于在掉电模式下精确计时的系统时钟
  • 支持可扩展的存储器接口

2.  S5PV210开发环境

2.1. 指令集

S5PV210是Cortex-A8内核,该内核为ARMv7-A架构,支持两个最主要的指令集:32位ARM指令集以及16/32位Thumb-2指令集。ARM指令集每条指令采用32位长度,具有最高的效率,但也需要更多的代码空间,ARM指令集是向后兼容的,即ARMv7-A的处理器几乎可以直接执行ARMv4架构的ARM指令集代码(如ARM7的应用代码)。Thumb-2是Thumb的扩展指令集,在ARMv6架构前,Thumb作为16位指令集,是作为ARM指令集的子集,它是为了减小代码量而提出的,并不完整,只支持通用功能,无法脱离ARM指令集。在ARMv7架构中,Thumb-2作为必备指令集,它支持16/32混合指令模式,几乎实现了所有的ARM指令集功能,并且效率接近ARM指令集,代码密度接近Thumb指令集。Thumb-2指令集的引入意味着程序存储器可以更小,在一些Cache应用中,相同容量的指令Cache可以缓存更多的指令,提高了指令Cache命中率,间接提升了内核性能。例如,对于Cortex-M内核,更是只支持Thumb-2指令集,因此一般无特殊情况,对于ARMv7内核,也可以直接采用Thumb-2指令集。

除此之外,Cortex-A8内核具有可加速多媒体和信号处理算法的NENO单元。NENO技术包括了单指令多数据SMID指令以及矢量浮点VFPv3指令,因此要想发挥出内核的最优性能,编译器还需支持SMID指令集以及VFPv3指令集。

2.2. 编译工具

ARM开发从编写源码到最终生成目标可执行二进制代码需要借助一系统的开发工具,如c编译器、汇编器、链接器、调试器、二进制转换工具等,一般均需成套使用。以下简单地介绍几种常用的ARM集成开发工具。

2.2.1. MDK

Keil因Keil C51而被国内广大工程师所熟知,而KeilMDK则是Keil针对ARM核开发的集成开发环境。Keil被ARM公司收购后,也采用了ARM RealView编译工具,使得Keil MDK编译效率、编译质量等都得到相应的提升,目前也是ARM官方编译器。Keil MDK支持ARM7、ARM9、Cortex-M0、Cortex-M3、Cortex-M4这几个中低端系列ARM核。其简单的操作使用,高度优化的微库、小封装实时操作系统、完善的GUI支持等使之能快速开发各种针对性应用,为小型嵌入式应用开发提供完备的解决方案。

2.2.2. IAR

IAR支持众多半导体公司的微处理器,支持20多种不同架构的8位、16位、32位内核。例如,IAR for 51用来开发经典的51单片机,IAR for avr用来开发atmel的AVR单片机,IAR for stm8用来开发STMicroelectronics的stm8单片机等等。而IAR for arm即为IAR针对ARM内核开发的工具集,其简洁的用户界面,众多功能强大的设置操作,如自动MISRA C规则检查,完善的C99支持等。ARM版本的IAR支持各个系列的ARM核,包括本章所述的Cortex-A8内核。IAR具有较好的代码优化性能,高质量的代码编译,是一款相当优秀的编译工具。

2.2.3. DS-5

DS-5是一款针对ARM支持的Linux和Android平台的全面的端到端软件开发工具套件。ARM自家的编译工具已经经过了几个版本的发展,从最初的ADT到ADS,再到RVDS,到现在的DS-5。其中ADT和ADS已经停止更新十多年了,远远不满足现今的ARM开发要求,不应再继续使用。目前的DS-5支持ARM最新的内核,可以针对具体的内核进行流水线指令等的优化,可对Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15等直接进行软件模拟仿真。没有人会比ARM更熟悉ARM内核了,有理由相信DS-5会比其它编译工具有更高的代码优化以及更高的代码质量。

2.2.4. GCC

GCC是一套由GNU开发的编译工具,已经被大多数的Unix操作系统(如Linux)采纳为官方编译工具。GCC也支持众多的处理器架构,如ARM、Alpha、MIPS、AVR等等。GNU计划开发出了大批自由免费的开源项目,这些开源项目绝大部分都是基于GCC开发,虽然免费,但丝毫不输相应的商业软件。如果在Linux操作系统下开发ARM,选择GCC也将拥有一大批的优秀开源项目,这也是Linux操作系统繁荣以及吸引人的地方。GCC功能强大灵活,但其绝大部分基于命令行,基于makefile,shell脚本,是习惯windows下开发的工程师所不适的,但使用像eclipse这样的集成开发环境,GCC也将变得容易使用。

软件开发与编译工具是无关的,完全可以根据自己的使用习惯选择一款编译工具。由于windows下使用IAR的用户较多,笔者此处也将基于IAR开发S5PV210。

2.3. 其它工具

2.3.1. dnw.exe

对于三星系列CPU,三星在windows下开发了dnw.exe工具用来辅助开发其门下芯片。dnw.exe支持两个最主要的功能串口通信以及USB通信,支持通过串口或USB下载PC端文件到目标板,在调试开发阶段将发挥重要的作用。

图2-1 dnw.exe工具

2.3.2. sd/mmc启动烧录工具

对于应用处理器,往往支持多种启动设备,S5PV210也不例如,支持sd/mmc启动、OneNand启动、Nand启动、eSSD启动等。多种启动方式,方便根据实际的应用需求,选择相应的固化存储器,降低BOM成本。尤其是sd/mmc启动方式,只需在PC端把代码烧录进sd/mmc卡,目标板即可执行sd/mmc卡里面的代码,无需复杂的操作以及昂贵的烧录器等。在调试开发阶段,代码往往可以直接烧录进sd/mmc卡运行调试,调试通过后,再通过sd/mmc卡里面的bootloader代码自动把sd/mmc卡里面的烧录bootloader、内核、文件系统等二进制代码烧录进板载Nand
flash等固化存储器之中,之后通过板载固化存储器启动即可。

SdBoot.exe为笔者在windows下针对三星S3C2416和S5PV210这两个平台开发的sd/mmc启动烧录工具。sd/mmc启动需要相应的代码格式以及需烧录进sd/mmc卡指定的位置,SdBoot.exe工具集代码格式转换以及sd/mmc卡烧录于一体,可以烧录S3C2416和S5PV210这两个平台下笔者编写的裸机bootloader,wince bootloader,uboot,工具简单易用。

图2-2 SdBoot.exe工具

3.  S5PV210启动模式

S5PV210支持多种启动模式,通过外部引脚OM[5:0]来选择相应的启动模式,引脚配置对应的启动模式见下图。一般设计中是不会用到Nor flash,因为Nor flash速度慢,不可能用来直接执行代码,都是要加载进RAM执行,代码存储可以根据实际情况选择eMMC、Nand flash等板载固化存储器。

图3-1 OM启动引脚描述

其中,sd/mmc channel 0、Nand、eSSD、OneNand作为第一启动设备,如果第一启动设备失败,则尝试第二启动设备(sd/mmc channel 2),如果再失败,则尝试UART启动,再失败,则是USB启动,若再失败,则停止启动流程。

为了支持外部设备的启动,S5PV210内置了64K ROM以及96K SRAM。其中64K ROM代码位于0x00000000,是三星固化进芯片的代码,称为BL0。在上电复位后,BL0代码最先执行,BL0首先关闭看门狗,初始化指令Cache、堆栈、功能函数、PLL及系统时钟后,拷贝用户代码(BL1)到内部SRAM 0xD0020000处,通过检验和检验BL1代码是否正确,如果失败,则尝试第二启动设备启动,检验成功,则跳转到用户的BL1代码执行。

用户的BL1代码最大16K,可以在BL1处初始化最基本的系统参数,如DRAM初始化,堆栈的重新设置、协处理器等的初始化,然后加载BL2(或者直接内核)到相应的RAM位置,最后跳转到BL2(或内核)执行。

由于BL0代码要检验BL1的代码,正确才能执行,因此BL1代码有特定的格式要求。BL1代码在最开头必须包含4个字的信息头,第0个字以及第2个字将会被BL0用来检验代码的正确性,因此这两个字必须如实反映BL1代码的情况。第0字为BL1代码的大小(Byte),最大16k,第2个字为BL1代码的检验和,BL0根据BL1代码的大小计算出相应的检验和,再与信息头的第2个字比较,若一致,则跳转到BL1执行,否则认为检验失败,尝试第二启动设备。

图3-2 Header Info

除此之外,对于OneNand/Nand启动设备,BL0除了检验BL1的检验和之外,还会检验Nand ECC数据,BL1在烧录进Nand设备时,还应生成相应的8/16位ECC数据,写入到Nand spare区的指定位置,不然ECC校验失败也将无法从Nand设备启动。

图3-3 Nand ECC检验

4.  附录

SdBoot.exe工具以及使用手册

http://pan.baidu.com/s/1i3CeAS9

时间: 2024-10-06 02:30:08

S5PV210开发系列一_开发环境以及启动模式的相关文章

C#程序员学习Android开发系列之搭建开发环境

接触Android好久了,记得09年刚在中国大陆有点苗头的时候,我就知道了google有个Android,它是智能机操作系统.后来在Android出1.5版本之后,我第一时间下载了eclipse开发工具.adt以及android sdk,体验了一把android开发,记得当时搭建开发环境相当麻烦.由于android开发是基于Java的,所以除了上述的工具之外,首先需要安装jdk,记得当时流行的是jdk1.5(后来是1.6,现在是1.7,未来是1.8),安装好之后需要设置环境变量. 时隔4年之后,

iOS开发系列--IOS程序开发概览ios基础

iOS开发系列--IOS程序开发概览 2014-08-04 19:42 by KenshinCui, 72273 阅读, 81 评论, 收藏,  编辑 概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的知识是你日后开发IOS的基础,没有那些知识你开发IOS会很痛苦,现在很多开发人员做开发都是一知半解,程序质量确实令人担忧,所以还是希望大家能够熟练掌

S5PV210开发系列三_简易Bootloader的实现

S5PV210开发系列三 简易Bootloader的实现 象棋小子          1048272975 Bootloader是嵌入式系统上电后第一段执行的代码.对于功能简单的处理器,可能并没有Bootloader的概念,但对于应用处理器,有不同的启动方式,不同的存储设备(Nand flash.sd/mmc.DDR2.SRAM等),不同的操作系统等,往往需要一个Bootloader先初始化CPU和相关的硬件,建立内存空间映射,把内核或应用程序加载到相应的内存执行位置,最后调用内核或应用程序,释

iOS开发系列--App扩展开发

概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更新也都是围绕扩展这一主题来进行了的,例如开发的Siri.iMessage Apps其实都是依靠扩展来工作的.在最新的Xcode 8 beta中也增加了众多的Extension 模板帮助开发者更快的实现不同类型的扩展.因此今天有必要介绍一下扩展相关的开发内容. 扩展的生命周期 iOS对于扩展的支持已经

测试开发系列之Python开发mock接口(一)

本次测试开发系列给大家分享一下怎么用python开发mock接口.本次介绍下什么是mock接口,以及咱们开发之前需要做的准备. 什么是mock接口呢,举个栗子,你在一家电商公司,有查看商品.购物.支付.发货.收获等等等一大堆功能,你是一个测试人员,测测测,测到支付功能的时候,你就要调用第三方支付接口了,真实支付,直接扣你支付宝/微信/银行卡里面的钱了,这下大事不好,测个试还得把自己钱搭进去(当然一般公司都会报销测试的支付费用,但是走报销麻烦),还有一些大额支付的的,可能你账户里面根本就没那么钱,

Android开发系列之搭建开发环境

接触Android好久了,记得09年刚在中国大陆有点苗头的时候,我就知道了google有个Android,它是智能机操作系统.后来在Android出1.5版本之后,我第一时间下载了eclipse开发工具.adt以及android sdk,体验了一把android开发,记得当时搭建开发环境相当麻烦.由于android开发是基于Java的,所以除了上述的工具之外,首先需要安装jdk,记得当时流行的是jdk1.5(后来是1.6,现在是1.7,未来是1.8),安装好之后需要设置环境变量. 时隔4年之后,

Python爬虫开发系列之一》开发IDE安装

中国有句古话说:工欲善其事,必先利其器! 在我最开始学 Python 的时候,因为没有去探索好用的工具,吃了很多苦头.磕磕绊绊走过来之后才知道,好的工具给效率带来的提升不是从 1 到 1.1 倍速,而是从 1 到 10 倍速. 所以说编写和运行程序之前我们必须要先把开发环境配置好,只有配置好了环境并且有了更方便的开发工具我们才能更加高效地用程序实现相应的功能达到事半工倍的效果,然而很多情况下我们可能在最开始就卡在环境配置上,如果这个过程花费了太多时间,想必学习的兴趣就下降了大半,所以本章专门开发

测试开发系列之Python开发mock接口(二)

上一篇咱们已经把开发前的环境准备好了,还需要再做一点准备,你的账户信息是存在哪的呢,当然是存在数据库里的,咱们在去支付,扣钱的时候,肯定是从数据库里面操作的,去更新账户表里面的数据,所以咱们先要把数据库准备好,建好账户表,初始化几条账户信息,这样才能完整的把这个mock接口给完成. 这篇咱们就学习一下python怎么操作数据库,怎么执行sql,数据库使用sqlite,sqlite是一个跨平台开源的轻量级关系型数据库,不需要配置和安装直接就可以使用,sql语句和mysql.sqlserver.or

**iOS开发系列--IOS程序开发概览

http://www.cnblogs.com/kenshincui/p/3890880.html 概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的知识是你日后开发IOS的基础,没有那些知识你开发IOS会很痛苦,现在很多开发人员做开发都是一知半解,程序质量确实令人担忧,所以还是希望大家能够熟练掌握前面的内容,开发过程中多思考,彻底理解程序运行的原理