ARM基础扫盲
一:ARM型号:
注意:
1、ARM内核版本号和SoC版本号是由ARM确定的,而SoC型号是由半导体公司确定的。
2、Cortex系列后ARM产品线分割成3个系列,这个是市场细分的需要和选择。
ARM已经发布了一些64位架构如A53等,主要面向高性能服务器类应用。
3、ARM下一步重点发展方向是Cortex-M7,特点是低功耗,主要面向物联网终端。
二:CPU和SoC的关系
CPU分为运算器和控制器:运算器进行计算,控制器进行判断
SoC:System on Chip(在一个芯片中做一个系统)
1、芯片的发展方向:从CPU到SoC
2、现在已经没有纯粹的CPU了,都是SoC
3、ARM出卖的内核其实就是CPU(当然还需要总线),各种外设是半导体厂商自己添加的。
上图中:
1、在PCB版中,除了CPU外,UART、Nand控制器、LCD控制器都叫外设。
2、在芯片中,SoC包括CPU和其他的外设。
外设
1、SoC中外设大部分都跑进去了
2、网卡、音频编解码等个别还经常在外面
3、芯片设计的趋势是更大集成度,近年甚至将音视频编解码、DDR都集成进SoC内做成所谓单芯片解决方案。如海思Hi3518E
4、裸机学习其实就是学习SoC的内核(CPU,表现为汇编指令集)和各种外设(如串口)
Flash内存叫闪存,也叫做硬盘,而ddr内存就是我们通常所说的内存条。在手机中,我们一直说的内存相当于PC中的硬盘,而运存说的是PC中的内存条。
三:本课程的平台
SoC:三星S5PV210
开发板:九鼎科技X210
裸机实验方法:USB启动下载+SD卡启动
bootloader支持:uboot、xboot
操作系统支持:linux2.6.35、linux3.0.8、android2.3、android4.0.4
半导体厂商:三星
其他半导体厂商:
- Freescale i.MX5系列(主要用于工业,比如工控机等)
- TI Omap系列(一般都是双核,内置ARM和DSP双核)
- Qualcomm 骁龙系列(手机,高通骁龙)
- 全志科技A10 A20 A31 A33等(底层)
- 行业专用型SoC如华为海思HI3518系列
四:嵌入式与单片机的区别
1、芯片平台:
主流的单片机平台:51、PIC、STM32、AVR、MSP430等
主流的嵌入式平台:ARM、PPC、MIPS(一般用于路由器)
2、资源、价格、应用领域
单片机片上资源有限、价格低、应用领域多为小家电、终端设备等。
嵌入式系统片上资源丰富、价格较高、应用领域宽广,譬如智能手机、平板电脑、游戏机、路由器、摄像机、智能电视机、广告机、智能手表、收银机等。
3、开发模式
单片机开发多为裸机,程序规模小,多为单个程序员独立开发。有些复杂的产品也会使用高端单片机如STM32之类,并使用RTOS(Ucos、freeRTOS等)。
嵌入式开发几乎全部基于嵌入式操作系统,目前使用最多的是Linux和Android。行业共识:如果产品为纯后台运行,比如路由器,一般用Linux,如果和客户需要进行界面交流,使用Android。
4、技术特征
编程语言方面:
单片机主要使用C语言(少量使用汇编语言),和标准C略有不同,很少使用结构体、函数指针等C语言高级特征。
嵌入式开发比较复杂,一般分为底层和应用层。底层语言使用C语言,应用层使用C、C++、Java等语言均有。嵌入式C语言对结构体、数据结构、算法、函数指针(用来面向对象)等高级特性使用比较多。
软硬件组件方面:
单片机多涉及到一些简单外设,比如串口、I2C、ADC、LCD(小屏幕和分辨率);
嵌入式系统则涉及到更多的复杂外设,比如网络(有线网卡、wifi、蓝牙等)、USB、音视频编解码等。
职业发展:
单片机学习路线短,职业平缓,薪资发展很早达到瓶颈,一般瓶颈薪资6~8k;
嵌入式学习路线长,职业生涯久,薪资发展多年才会达到瓶颈,一般瓶颈薪资12~15k。
五:嵌入式系统的组成和分层
1、嵌入式系统的组成
硬件
-
- 微处理器
- 存储器
- I/O接口、输入输出设备等等
软件:
-
- 嵌入式操作系统:中层
- BSP (board support package板级支持包):底层,关于硬件的一些驱动等。
- 应用软件:上层(如暴风等)
工作过程:
比如:暴风需要用到屏幕、喇叭等硬件,是通过BSP中的驱动来控制的。应用软件通过给操作系统发命令,操作系统控制BSP中的驱动来控制硬件工作的。
2、嵌入式系统的分层
硬件由硬件工程师来做。
0—1—2—4—5—3—6,驱动程序最后再学习。
3、嵌入式系统的发展过程
- 以单芯片为核心、可编程控制器存在形式(老式单片机)
- 没有操作系统支持
- 软件以汇编为主
- 功能单一、处理效率低、存储容器小、没有对外接口
- 使用简单、价格低
- 以嵌入式CPU为基础、简单操作系统为核心(单片机,如RTOS,STM32)
- CPU种类多,通用性弱
- 系统开销小,效率高
- 达到一定兼容性,拓展性
- 用户体验度不高,交互界面不够友好
- 以嵌入式操作系统为标志(软件Linux、安卓,硬件A8、A9)
- 兼容性好,适用于不同平台
- 系统开销小,效率高,具有高度模块化及拓展性
- 图形化界面,用户界面友好(安卓)
- 丰富的外部接口
- 以物联网为标志
- 将传感器技术、互联网技术及传统嵌入式技术综合联系
- 小型化、智能化、网络化及可视化
- 低功耗、绿色环保
- 多核技术SWP、云计算技术及虚拟化技术
4、多核处理器分为两种:
1:对称多核处理器(多个核心型号一样,不分主次)
2:非对称多核处理器(DSP+ARM,DSP主运算,ARM主控制)
六、交叉编译
1、两种开发模式:
- 非嵌入式开发(桌面电脑上运行的程序,比如QQ、),A(类)机编写(源代码)、编译得到可执行程序,发布给A(类)机运行。
- 嵌入式开发(交叉编译),A(类)机编写(源代码)、编译得到可执行程序,发布给B(类)机运行。
2、为何使用交叉编译
- 嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至操作系统都没有。
- 交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和应用级软件)
3、交叉编译的特点
- 必须使用专用的交叉编译工具链(我们一般称之为编译器)。
交叉链文件在toolchain文件夹中,其中有:
gcc C语言编译器
g++ C++语言编译器
ar 打包工具
gdb 调试工具
ld 链接器
objcopy 制作烧录文件
objdump 反编译
- 由于可执行程序不能本地运行调试,因此必须配合一定手段(专用调试器、JTAG调试器、USB下载、串口下载、SD启动、网络共享等)将可执行程序加载到目标嵌入式设备上运行及调试。
七、CPU的设计原理、地址总线和数据总线
1、CPU和总线示意图
图中总线接口就是硬盘、内存和CPU的连线,在SoC外部,而内部总线是集成在CPU中的。
运算器:进行数学运算,+、-、*、/、取与、左移等
控制器:用来控制CPU运行,比如读取代码,解码,运行等
寄存器:CPU内部的临时内存
过程:程序(数据)在Flash中(硬盘)存储,运行时在内存DDR中。当需要运行程序(数据)时,Flash中的程序(数据)通过Flash数据总线读取到CPU中的寄存器中,然后将程序(数据)通过数据总线放入到内存DDR中。
2、数据总线和地址总线
总线接口包含两部分:地址总线和数据总线。
- CPU通过地址总线寻址,然后通过数据总线与外部设备互换信息。
- 地址总线的位数决定CPU寻址范围;数据总线的位数决定CPU单次通信能交换的信息数量;
- 总线的速度决定CPU和外设互换信息的速度。
注意:
- CPU的地址总线位数和数据总线可以不同(典型代表就是51单片机),但是一般都相同。
- CPU的位数指的是数据总线的位数。
- 32位CPU寻址的范围是4G,所以最多支持4G内存;
- 数据总线是32位的,所以内存是32位的好,所以编程最好用int···
大小计算:2exp10=K,2exp20=M,2exp30=G。2exp32=4G。
八、为何需要Jlink、SD卡等辅助设备
1、嵌入式开发特点
- 交叉编译,不便于本机运行调试程序。
- 嵌入式系统需要bootloader来启动,而bootloader必须首先存在于可启动介质中,这个过程需要专用工具。
- 嵌入式系统无法通过纯软件实现单步调试,因此必须借助专用的调试器。
基于上述特点,嵌入式调试时需要用到调试器,如Jlink。
2、Jlink的作用:
- 下载可执行程序到目标机。
- 在目标机上实现单步调试,便于开发bootloader。
3、SD卡的作用:
- 作为启动介质。工作方式是:事先用读卡器将SD卡连接到开发机(一般是Windows电脑),通过写卡软件将交叉编译得到的可执行程序镜像烧录到SD卡,然后将SD卡插入 嵌入式目标机卡槽,设置正确的启动方式启动,则系统可以从SD卡中烧录的镜像处启动。
4、USB转串口线的作用:
- 串口本身用来做嵌入式目标机的调试输出,主要目的是用来监视及调试软件。
- 因为现在大部分个人电脑(大部分台式机和几乎全部的笔记本电脑)都未配置DB9串口,因此工作中一般直接使用USB转串口线来连接PC和开发板。
其他开发辅助工具:
- USB OTG线
- DB9串口线
- 交叉网线