ARM裸机
一、ARM那些你得知道的事
1、ARM的成长史
—ARM发展的里程碑
    ARM的前身为艾康电脑(Acon),于1978年在英国剑桥成立在1980年代晚期,苹果电脑开始与艾康电脑合作开发新版的ARM核心。
    1985年开发出全球第一款商用RISC处理器,即ARM1。
    1990年艾康电脑财务危机,受苹果和VLSL的投资,分割出独立子公司Advanced RISC Machines(ARM),ARM公司正式成立。
    1991年,ARM推出第一款嵌入式RISC处理器,即ARM6。
    1993年,发布ARM7。
    1997年,发布ARM9TDMI。
    1999年,发布ARM9E。
    2001年,发布ARMV6架构。
    2002年,发布ARM11架构。
    2004年,发布ARMV7架构的Cortex系列处理器,同时推出Cortex-M3。
    2005年,发布Cortex-A8处理器。
    2007年,发布Cortex-M1和Cortex-A9。
    2009年,实现Cortex-A9、发布Cortex-M0。
    2010年,推出Cortex-M4、成立Linaro,推出Cortex-A15 MPcore高性能处理器。
    2011年,推出Cortex-A7、ARMv8发布。
    2012年,开始64位处理器进程。
2、ARM的商业模式和生态系统
—ARM之前的半导体圈
    Intel、AMD、Motorola、Zilog、VIA等自己设计IC、自己生产芯片、自己销售。
—ARM的商业模式
    ARM只负责设计IC,并且出卖自己的设计IP(版权)。
    ARM自己不生产芯片,而是把设计IP授权给其他半导体厂商来生产芯片。严格说,ARM并不是一家半导体厂商。
—ARM的合作伙伴
    国际大厂商:SAMSUNG、TI、ST、NXP、VLSI、Digital Semiconductor、 Sony、Qualcomm、HP、IBM······
    中国授权厂商:华为海思、全志、瑞芯微、MTK(中国台湾)
3、为什么是三星
—为什么选择三星的CPU来讲
    本身使用广泛、有很好的企业应用基础
    资料多、积累好、便于学习
    开发板和方案商多,软硬件平台好找
    体系很典型,适合用来学习
—三星主要的ARM CPU有哪些
    ARM7 44B0
    ARM9 2440 2410
    ARM11 6410
    A8 S5PV210(平板) S5PC100(手机)
    A9 4412 4418
4、先搞清楚各种版本号
—ARM的型号命名问题
    ARM7和ARMv7不是一回事。
    Cortex-A9比Cortex-A7(性能不错,功耗降低)更先出来(最早的是Cortex-A8),Cortex-A15(性能强劲,功耗增加)。
—ARM的几种版本号
    ARM内核版本号       ARMv7    (v表示的version)
    ARMSoC版本号        Cortex-A8
    芯片型号             S5PV210
—ARM型号的发展历程
    m    microcontroller微控制器 就是单片机STM32(32位单片机)。
    a    application应用级处理器 就是手机、平板、电脑CPU。
    r    realtime实时处理器 就是工业、航天等领域。
    Cortex-A9平行多核处理器。
    Cortex-A8单核处理器。
注:ARM内核版本号和SoC版本号是由ARM确定的,而SoC型号是由半导体公司确定的。
    Cortex系列后ARM产品线分割出3个系列
    ARM已经发布一些64位架构如A53等,主要是面向高性能服务器类应用。。
    ARM下一步重点发展方向是Cortex-M7,特点是低功耗,主要面向物联网终端。
5、SoC和CPU的区别&外设概念的引入
—SoC = System on chip
    芯片的发展方向:从CPU到SoC。
    现在已经没有纯粹的CPU,均是SoC。
    ARM出卖的内核其实就是CPU(当然还需要总线),各种外设是半导体厂商自己添加。
    UART: Universal Asynchronous Receiver/Transmitter(异步串行接口)
    LCD: Liquid Crystal Display(液晶显示器)
    NAND:NAND是一种闪存
    PCB(Board):印刷电路板
    Chip:芯片
    外设(peripheral):外部设备
    SoC中外设大部分均集成进去了,网卡、音频编解码等个别还在外面。
    芯片设计的趋势是更大集成度,近年甚至将音视频编解码、DDR都集成进SoC内做成所谓芯片解决方案。如华为海思。
6、主流学习型主芯片介绍
—三星:
    S3C44B0
    S3C2440、S3C2410
    S3C6410
    S5PV210
    Exynos4412 S5P4418
—半导体厂商
    Freescale i.MX5系列
    TI Omap系列
    Qualcomm 骁龙系列
    全志科技A10 A20 A31 A33等
    行业专用型SoC如华为海思HI3518?(网络摄像机)系列
—本课程的平台
    SoC:三星S5PV210
    开发板:九鼎科技X210
    裸机实验方法:USB启动下载+SD卡启动(为主)
    bootloader支持:uboot(为主)、xboot
    作系统支持:linux2.6.35android2.3、linux3.0.8android4.0.4
7、嵌入式和单片机的区别
—芯片平台
    主流的单片机平台:51、PIC、STM32、AVR、MSP430等
    主流的嵌入式平台:ARM、PPC、MIPS
—资源、价格、应用领域
    单片机片上资源有限、价格低、应用领域多为小家电、终端设备等嵌入式系统片上资源丰富、价格较高、应用领域宽广,譬如只能手机、平板电脑、游戏机、路由器、摄像机、只能电视机、***、只能手表、收银机等。
—开发模式
    单片机开发多为裸机,程序规模小,多为单个程序员独立开发。有些复杂产品也会使用高端单片机如STM32之类,并使用RTOS(uCOS、freeRTOS等)嵌入式开发几乎全部基于嵌入式操作系统,目前使用最多的是linux和Andriod。
注:linux多基于后台,Andriod多基于图形用户界面
—技术特征1
    编程语言方面:单片机主要使用C语言(少量使用汇编),和标准C略有不同,很少使用结构体、函数指针等C语言高级特性。而嵌入式开发较复杂,一般分底层和应用层。底层使用C语言,应用层使用C、C++、Java等语言均有。嵌入式C语言对结构体、数据结构、算法、函数指针(用来实现面向对象)等高级特性使用比较多。
—技术特征2
    软硬件组件方面:单片机多涉及一些简单外设,譬如串口、I2C、ADC、LCD(小屏幕和分辨率);而嵌入式系统则涉及更多复杂外设,譬如网络(有线网卡、wifi、蓝牙等)、USB、音视频解码等。
—职业发展:单片机学习路线短,职业平缓,薪资发展很早达到瓶颈,一般瓶颈薪资为6—8K。嵌入式学习路线长,职业生涯久,薪资发展多年才会达到瓶颈,一般薪资瓶颈12—15K。
8、嵌入式学习和编程语言、英语水平的关系
—嵌入式和编程语言
    嵌入式开发主要使用C语言,辅助为汇编语言,中间层开发层用C++多一些,应用层开发用C++、Java、python、tcl/tk、pel等。
—嵌入式学习和英语
    首先,编程都是用英语写,关键的就是关键字,看数据手册可以借助桌面词典,嵌入式学习和数电模电,嵌入式分软件和硬件,嵌入式软件主要还是软件,硬件为辅助,数电模电会有帮助,但不是必须
嵌入式学习和专业。
—最适合专业:电子、自动化、通信、测控或其他名字类似的专业。
—可以选择的专业:所有大学会开语言或者类似编程课的理工科专业。
—找工作和专业的关系:应届生会有影响。
9、嵌入式系统的构成特点和演进方向
—嵌入式系统的特点
    专用、软硬件可裁剪可配置
    低功耗、高可靠性、高稳定性
    软件代码短小精悍
    代码可固化
    实时性
    弱交互性
    专业开发工具及开发环境
    专业开发人员
—嵌入式系统的组成
    硬件
    微处理器
    存储器
    I/O接口、输入输出设备
    软件
    嵌入式操作系统
    BSP(board support package板级支持包)
    应用软件
—嵌入式系统的发展演进
    以单芯片为核心、可编程控制器存在形式,没有操作系统支持,软件以汇编为主,功能单一、处理效率低、存储容器小、没有对外接口,使用简单、价格低,以嵌入式CPU为基础、简单操作系统为核心,CPU种类多,通用性弱,系统开销小,效率高,达到一定兼容性,拓展性,用户体验度不高,交互界面不够友好。
    以嵌入式操作系统为标志,兼容性好,适用于不同平台,系统开销小,效率高,具有高度模块化及拓展性,图形化界面,用户界面友好,丰富的外部接口。
    以物联网为标志,将传感器技术、互联网技术及传统嵌入式技术综合联系,小型化、智能化、网络化及可视化,低功耗、绿色环保
多核技术、云计算技术及虚拟化技术。
10、何为交叉编译
—两种开发模式
    非嵌入式开发,A(类)机编写(源代码)、编译得到可执行程序,发布给A(类)机执行。
实例:QQ的开发,在win系统上开发,在win系统上运行
    嵌入式开发,A(类)机编 写(源代码)、编译得到可执行程序,发布给B(类)机运行。
实例:路由器的开发,在win系统上开发,在路由器中运行
—交叉编译有什么特点
    必须使用专用的交叉编译工具链(通俗的编译器指的是gcc,而交叉编译工具链指的是一个工具包,包含gcc、gdb、nm等) 。
    由于可执行程序不能本地运行调试,因此必须配合一定手段(专用调试器、JTAG调试器、USB下载、串口下载、SD卡启动、网络共享等)将可执行程序加载到目标嵌入式设备上运行及调试。
11、CPU的设计原理、数据总线和地址总线
—CPU和总线示意图
    硬盘(flash)通过总线接口接入到CPU中的寄存器中,寄存器将数据转到内存(DDR)中进行运行。
—地址总线和数据总线
    CPU通过地址总线寻址,然后通过数据总线与外部设备交换信息。
地址总线的位数(总线的数量,即根数)决定CPU寻址范围;数据总线的位数决定CPU单次通信能交换的信息数量。
    总线的速度决定CPU和外设互换信息的速度。
注:CPU的地址总线位数和数据总线位数可以不同(典型代表是51单片机,其数据总线8位,地址总线16位),但是一般的CPU都相同。
    CPU的位数指的是数据总线的位数。
    32位CPU寻址的范围是4G,所以最多支持4G内存。
    数据总线是32位的,所以内存是32位的好,故编程最好用int……
注:在C和java中因编译环境的不同,故同一个数据类型在不同的编译环境中其占据的位数不同(int在java中占4个字节,在C中占2个字节)。
12、为何需要Jlink、SD卡等辅助设备
—嵌入式开发特点
    交叉编译,不便于本机运行调试程序。
    嵌入式系统需要bootloader来启动,而bootloader必须首先存在于可启动介质中,这个过程需要专用工具。
    嵌入式系统无法通过纯软件实现单步调试,因此必须借助专用的调试器。
—Jlink的作用
    下载可执行程序到目标机。
    在目标机上实现单步调试,便于开发bootloader。
—SD卡的作用
    作为启动介质。工作方式:事先用读卡器将SD卡连接到开发机(windows),通过写卡软件将交叉编译得到的可执行程序镜像烧录到SD卡,然后将SD卡插入嵌入式目标机卡槽,设置正确的启动方式启动,则系统可以从SD卡中烧录的镜像处启动。
—USB转串口线的作用
    串口本身用来做嵌入式目标机的调试输出,主要目的是用来监视及调试软件。
—其它开发辅助工具
    USB OTG线
    DB9串口线
    交叉网线