本文讲解底层驱动工程师必备的硬件基础,给出了嵌入式系统硬件原理及分析方法的全景视图。
2.1 节讲解微控制器、微处理器、数字信号处理器以及应用于特定领域的处理器各自的特点。
2.2 节对嵌入式系统中所使用的各类存储器与 CPU 的接口、应用领域及特点进行了详细讲解。
2.3 节讲解常见的外设接口与总线的工作方式,包括串口、I2C、USB、以太网接口、ISA、PCI 和 cPCI 等。
2.4 节讲解了 CPLD 和 FPGA在电路中的作用。
2.5~2.6 节讲解实际项目开发过程中硬件分析的方法,包括如何进行原理图分析、时序分析以及如何快速地从芯片手册获取有效信息。
2.7 节讲解了调试过程中常用仪器、仪表的使用方法,涉及万用表、示波器和逻辑分析仪。
通用处理器(GPP)并不针对特定的应用领域进行体系结构和指令集的优化,它们具有一般化的通用体系结构和指令集,以支持复杂的运算并易于新开发功能的添加。一般而言,在嵌入式微控制器(MCU)和微处理器(MPU)中会包含一个通用处理器核。
MPU 通常代表一个 CPU(中央处理器),而 MCU 则强调把中央处理器、存储器和外围电路集成在一个芯片中。早期,微控制器被称为单片机,意思是把计算机集成在一个芯片内。嵌入式微控制器也常被称作片上系统(SoC),含义是在一个芯片上设计了整个系统。芯片厂商在推出 MCU 时,往往会有明确的市场定位,如定位于 PDA、 MP3、 ADSL 等。定位不同的产品可能包含共同的 CPU 核,但是集成的扩展电路则不一样。图 2.1 所示为一个典型的集成了外围电路的 MCU 的结构。
图 2.1 典型的 MCU 内部结构
举个例子, Intel 的 80386 属于微处理器,而内部集成了 80386 处理器、片选单元、中断控制、定时器、看门狗、定时器、串行 I/O、 DMA、总线仲裁、 DRAM 控制器等的 386EX 则是 80386 微处理器的微控制器版本。
嵌入式微控制器一般由一个 CPU 核和多个外围电路集成,目前主流的 CPU 核如下。
1. Advanced RISC Machines 公司的 ARM
ARM 内核的设计技术被授权给数百家半导体厂商,做成不同的 SoC 芯片。 ARM 的功耗很低,在当今最活跃的无线局域网、 3G、手机终端、手持设备、有线网络通信设备等中应用非常广泛。
2. Silicon Graphics 公司的 MIPS
两个最重要的 MIPS 芯片厂商为 PMC 和 IDT。 PMC-Sierra 公司的 MIPS 处理器被 CISCO 公司大量采用在高端路由器上。IDT 公司在 MIPS 核上集成 PCI 接口,广泛用于以太网交换,另外也尝试增加了 HDLC、Ethernet、串口、 SDRAM 控制器、片选、 DMA 控制器等外设接口,以用于低端通信产品。
3. IBM 和 Motorola 的 PowerPC
PowerPC 处理器是通信和工控领域应用最广泛的处理器,国内包括华为、中兴在内的通信公司都大量使用 PowerPC, MPC860 和 MPC8260 是其最经典的两款。
4. Motorola 公司独有的内核 68K/COLDFIRE
68K 内核是最早在嵌入式领域广泛应用的内核,其最著名的代表芯片是 68360。 Coldfire 则继承了 68K的特点并对其保持了兼容。 Coldfire 内核被用于 DSP 模块、 CAN 总线模块以及一般嵌入式处理器所集成的外设模块,在工业控制、机器人研究、家电控制等领域被广泛采用。(Motorola 的半导体部已经独立为飞思卡尔半导体公司(Freescale Semiconductor Inc.),因为历史原因,上文仍然使用 Motorola)
中央处理器的体系架构可以分为两类,一类为冯·诺伊曼结构,一类为哈佛结构。
冯·诺伊曼结构也称普林斯顿结构, 是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。而哈佛结构将程序指令和数据分开存储,指令和数据可以有不同的数据宽度。此外,哈佛结构还采用了独立的程序总线和数据总线,分别作为 CPU 与每个存储器之间的专用通信路径,具有较高的执行效率。图2.2 显示了冯·诺伊曼结构和哈佛结构的区别。
图 2.2 冯·诺伊曼结构与哈佛结构
从指令集的角度来讲,中央处理器也可以分为两类,即 RISC(精简指令集计算机)和 CISC(复杂指令集计算机)。 CSIC 强调增强指令的能力、减少目标代码的数量,但是指令复杂,指令周期长;而 RISC强调尽可能减少指令集、指令单周期执行,但是目标代码会更大。 ARM、 MIPS、 PowerPC 等 CPU 内核都采用了 RISC 指令集。目前, RISC 和 CSIC 的融合非常明显。
数字信号处理器(DSP)针对通信、图像、语音和视频处理等领域的算法而设计。它包含独立的硬件乘法器。 DSP 的乘法指令一般在单周期内完成,且优化了卷积、数字滤波、 FFT(快速傅立叶变换)、相关、矩阵运算等算法中的大量重复乘法。
DSP 一般采用如图 2.3 所示的改进的哈佛架构,它具有独立的地址总线和数据总线,两条总线由程序存储器和数据存储器分时共用。
图 2.3 改进的哈佛结构
DSP 分为两类,一类是定点 DSP,一类是浮点 DSP。浮点 DSP 的浮点运算用硬件来实现,可以在单周期内完成,因而其浮点运算处理速度高于定点 DSP。而定点 DSP 只能用定点运算模拟浮点运算。
德州仪器(TI)、美国模拟器件公司(ADI)是全球 DSP 的两大主要厂商。
TI 的 TMS320™DSP 平台包含了功能不同的多个系列: 2000 系列、 3000 系列、 4000 系列、 5000 系列、6000 系列,工程师也习惯称其为 2X、 3X、 4X、 5X、 6X。除了 2000 与 5000 系列是定点 DSP 外,其余的均为浮点 DSP。
ADI 主要有 16 位定点的 21xx 系列、 32 位浮点的 SHARC 系列、从 SHARC 系列发展而来的 TigerSHARC系列及高性能 16 位 DSP 信号处理能力与通用微控制器方便性相结合的 blackfin 系列等。
通用处理器和数字信号处理器也有相互融合以取长补短的趋势,如数字信号控制器(DSC)即为MCU+DSP, blackfin 系列属于 DSC。目前,芯片厂商推出了许多 ARM+DSP 的双核处理器。
除了上述的通用微控制器和数字信号处理器外,还有一些针对特定领域而设计的专用处理器(ASP),它们都是针对一些特定应用而设计的,如用于 HDTV、 ADSL、 Cable Modem 等的专用处理器。
网络处理器是一种可编程器件,它应用于电信领域的各种任务,如包处理、协议分析、路由查找、声音/数据的汇聚、防火墙、 QoS 等。网络处理器器件内部通常由若干微码处理器和若干硬件协处理器组成,多个微码处理器在网络处理器内部并行处理,通过预先编制的微码来控制处理流程。而对于一些复杂的标准操作(如内存操作、路由表查找算法、 QoS 的拥塞控制算法、流量调度算法等)则采用硬件协处理器来进一步提高处理性能,从而实现了业务灵活性和高性能的有机结合。
对于某些应用场合,使用 ASIC(专用集成电路)往往是低成本且高性能的方案。 ASIC 专门针对特定应用而设计,不具备也不需要灵活的编程能力。使用 ASIC 完成同样地功能往往比直接使用 CPU 资源或CPLD(复杂可编程逻辑器件) /FPGA(现场可编程门阵列)更廉价、高效。
在实际项目的硬件方案中,往往会根据应用的需求选择通用处理器、数字信号处理器、特定领域处理器、 CPLD/FPGA 或 ASIC 之一的解决方案,在复杂的系统中,这些芯片可能会同时存在,协同合作,各自发挥自己的长处。如在一款智能手机中,可使用 MCU 处理图形用户界面和用户的按键输入并运行多任务操作系统,使用 DSP 进行音视频编解码,而在射频方面则采用 ASIC。
综合 2.1 节的内容,我们可得出如图 2.4 所示的处理器分类。
图 2.4 处理器分类
存储器可分为只读储存器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光介质存储器和磁介质存储器。
ROM 还可再细分为不可编程 ROM、可编程 ROM(PROM)、可擦除可编程 ROM(EPROM)和电可擦除可编程 ROM(E2PROM), E2PROM 完全可以用软件来擦写,已经非常方便了。
目前 ROM 有被 Flash 替代的趋势, NOR(或非)和 NAND(与非)是市场上两种主要的 Flash 闪存技术。 Intel 公司于 1988 年首先开发出 NOR Flash,彻底改变了原先由 EPROM 和 E2PROM 一统天下的局面。紧接着, 1989 年,东芝公司开发出 NAND Flash,每比特的成本被大大降低。
NOR Flash 和 CPU 的接口属于典型的类 SRAM 接口(如图 2.5 所示),不需要增加额外的控制电路。NOR Flash 的特点是可芯片内执行(XIP, eXecute In Place),程序可以直接在 NOR 内运行。而 NAND Flash和 CPU 的接口必须由相应的控制电路进行转换,当然也可以通过地址线或 GPIO 产生 NAND Flash 接口的信号。 NAND Flash 以块方式进行访问,不支持芯片内执行。
图 2.5 典型的类 SRAM 接口
公共闪存接口(Common Flash Interface,简称 CFI)是一个公开的、标准的从 NOR Flash 器件中读取数据的接口。它可以使系统软件查询已安装的 Flash 器件的各种参数,包括器件阵列结构参数、电气和时间参数以及器件支持的功能等。利用 CFI,在不修改系统软件的情况下,就可以用新型的和改进的产品代替旧版本的产品。
一个 NAND Flash 的接口主要包含如下信号。
I/O 总线:地址、指令和数据通过这组总线传输,一般为 8 位或