驱动设计的硬件基础

本篇内容讲述底层驱动工程师必备的硬件基础,给出了嵌入式系统硬件原理及分析方法的一个完整而简洁的全景视图。

第一节描述了微控制器、微处理器、数字信号处理器以及应用于特定领域的处理器各自的特点,分析了处理器的体系结构和指令集。

第二节对嵌入系统中使用的各类存储器与CPU的接口、应用领域及特点进行了归纳整理。

第三节分析了常见的外设接口与总线的工作方式,包括串口、I2C、SPI、USB、以太网接口、PCI和PCI-E、SD和SDIO等。

嵌入式系统硬件电路中经常会使用CPLD和FPGA,作为驱动工程师,我们不需要掌握CPLD和FPGA的开发方法,但是需要知道他们在电路中能够完成什么工作,第四节讲述了这项内容。

第五-七节给出了在实际项目开发过程中硬件分析的方法,包括如何进行原理图分析、实现分析、及如何快速地从芯片数据手册中获取有效的信息。

第八节讲解了调试过程中常用仪器仪表的使用方法,涉及万用表、示波器和逻辑分析仪(LA)。

2 处理器

2.1 通用处理器

目前主流的通用处理器(GPP)多采用SoC(片上系统)的芯片涉及方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,然后再SoC内有电路实现。在SoC中,每一个模块不是一个已经设计成熟的SoC器件,而是利用芯片的一部分资源去实现某种传统的功能,讲各种组件采用类似搭积木的方式组合在一起。

ARM内核的设计技术被授权给数百家半导体厂商,做成不同的SoC芯片。 ARM的功耗很低,在当今最活跃的无限局域网、3G、手机终端、手持设备、优先网络通讯设备等应用非常广泛。 目前市面上大部分智能手机、平板电脑都适用ARM SoC作为主控芯片。很多ARM主控芯片的集成度非常高,除了集成多核ARM以外,还可能集成图像处理器、视屏编解码器、浮点协处理器、GPS、WiFi、蓝牙、基带、Camera等一系列功能。比如,高通的Snapdragon810就集成各种模块

主流的ARM移动处理芯片供应商包括 高通(Qualcomm)、三星(Samsung)、英伟达(Nvidia)、美满(Marvell)、联发科(MTK)、海思(Hisilicon)、展讯(Spreadtrum)等。 德州仪器(TI)、博通(Broadcom)则已经退出手机芯片业务。

中央处理器的体系结构可以分为两类,一类为冯-诺依曼结构, 另一类是哈佛结构。 Intel公司的中央处理器、ARM的ARM7、MIPS公司的MIPS处理器采用了冯-诺依曼结构;而AVR、ARM9、ARM10、ARM11以及CortexA系列等则采用了哈佛结构。

冯-诺依曼结构也称普林斯顿结构,是一种讲程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储结构和数据存储地址指向同一个存储器的不同物理位置, 因此程序指令和数据的宽度相同。 而哈佛结构将程序指令和数据分开存储,指令和数据可以有不同的数据宽度。 此外,哈佛结构还采用了独立的程序总线和数据总线,分别作为CPU与每个存储器之间的专用通信路径,具有较高的执行效率。下图描述了冯-诺依曼结构和哈佛结构的区别。

许多芯片采用的是如下图的改进的哈佛架构, 它具有独立的地址总线和数据总线,两条总线由程序存储器和数据存储器分时共用。因此,改进的哈佛结构针对程序和数据,其实没有独立的总线,而是使用公用的数据总线来完成程序存储模块或者数据存储模块与CPU之间的数据传输,公用的地址总线来寻找程序和数据。

从指令集的角度来讲,中央处理器也可以分为两类,即RISC(精简指令集计算机)和CISC(复制指令集计算机)。CSIC强调增强指令的能力、减少目标代码的数量,但是指令复杂,指令周期长;而RISC强调尽量减少指令集、指令单周期执行,但是目标代码会更大。ARM、MIPS、PowerPC等CPU内核都采用了RISC指令集。目前,RISC和CSIC两者的融合非常明显。

1.2 数字信号处理器

数字信号处理器(DSP)针对通信、图像、语音和视频处理等领域的算法而设计。它包含独立的硬件乘法器。DSP的乘法指令一般在单周期内完成,且优化了卷积、数字滤波、FFT(快速傅里叶变换)、相关矩阵运算等算法中的大量重复乘法。

DSP分为两类,一类是定点DSP,另一类是浮点DSP。浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而启浮点运算处理速度高于定点DSP。而定点DSP只能用定点运算模拟浮点运算。

德州仪器(TI)、美国模拟器件公司(ADI)是全球DSP的两大主要厂商。

TI的TMS320 DSP平台包含了功能不同的多个系列,如2000系列、3000系列、4000系列、5000系列、6000系列。2010年5月,TI已经宣布未其C64x系列数字信号处理器与多核片上系统提供Linux内核支持, 以充分满足通信与关键任务基础设施、医疗诊断以及高性能测量测试等应用需求。TI也推出了软件可编程多核ARM+DSP SoC,即KeyStone多核ARM+DSP处理器,以满足医疗成像应用、任务关键应用、测试和自动化应用的需求。

ADI主要由16位定点的21xx系列、32位浮点的SHARC系列、从SHARC系列发展而来的TigerSHARC系列,以及高性能16位DSP信号处理能力与通用微控制器方便性相结合的blackfin系列等。ADI的blackfin不含MMU,完整支持Linux,是没有MMU情况下Linux的典型案例, 其官方网站为http://blackfin.uclinux.org,目前blackfin的Linux开发保持了与Linux mainline的同步。

通用处理器和数字信号处理器也有互相融合以取长补短的趋势,如属数字信号控制器(DSC)即为MCU+DSP,ADI的blackfin系列就属于DSC。 目前,芯片厂商也推出了许多ARM+DSP的双核以及多核处理器,如TI公司的OMAP4平台就包括4个主要处理引擎:ARM Cortex-A9 MPcore、PowerVR SGX 540 GPU(Graphic Processing Unit)、C64x DSP和ISP(Image Signal Processor)。

除了上面讲述的通用微控制器和数字信号处理器外, 还有一些针对特定领域而设计的专用处理器(ASP), 它们都是针对一些特定应用而设计的, 如用于HDTV、ADSL、Cable Modem等专用处理器。

网络处理器的部分    略。

对于某些应用场合,使用ASIC(专用集成电路)往往是低成本且高性能的方案。ASIC专门针对特定应用而设计, 不具备也不需要灵活的编程能力。使用ASIC完成同样的功能往往比直接使用CPU资源或者CPLD(复杂可编程逻辑器件)/FPGA(现场可编程门阵列)来得更廉价且高效。

在实际项目的硬件方案中,往往会根据应用的需求选择通用处理器、数字信号处理器、特定领域处理器、CPLD/FPGA或ASIC之一的解决方案,在复杂的系统中,这些芯片可能会同时存在,协同合作,各自发挥自己的长处。如在一款智能手机中,可使用MCU处理图形用户界面和用的按键输入并运行多任务操作系统,使用DSP进行音视频编解码,而在射频方面则采用ASIC。

下图是处理器分类

2 存储器

存储器主要可分类为只读存储器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光/磁介质存储器。

ROM还可以再细分为不可编程ROM、可编程ROM(PROM)、可擦除可编程ROM(EPROM)和电可擦除可编程ROM(EEPROM),EEPROM完全可以用软件来擦写,已经非常方便了。

NOR(或非)和NAND(与非)是市场上两种主要的Flash闪存技术。Intel于1988年首先开发出NOR Flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash结构,每位的成本被大大降低。

NOR Flash和CPU的接口属于典型的类SRAM接口(下图),不需要增加额外的控制电路。 NOR Flash的特点是芯片内执行(eXecute In Place, XIP), 程序可以直接在NOR内运行。而NAND Flash和CPU的接口必须由相应的控制电路进行转换,当然也可以通过地址线或GPIO产生NAND Flash接口的信号。 NAND Flash以块方式进行访问,不支持芯片内运行。

公共闪存接口(Common Flash Interface, CFI)是一个从NOR Flash器件中读取数据的公开、标准接口。它可以使系统软件查询已经安装的Flash器件的各种参数,包括器件阵列结构参数、电气和时间参数以及器件支持的功能等。 如果芯片不支持CFI, 就需要使用JEDEC(Joint Electron Device Engineering Council, 电子电气设备联合会)了。JEDEC规范的NOR则无法直接通过命令来读取容量等信息, 需要读出制造商ID和设备ID,以确定Flash的大小。

与NOR Flash的类SRAM接口不同, 一个NAND Flash的接口主要包含如下信号。

  • I/O总线:地址、指令和数据通过这组总线传输,一般为8位或16位
  • 芯片使能(Chip Enable,CE#):如果没有检测到CE信号, NAND器件就保持待机模式,不对任何控制信号做出响应。
  • 写使能(Write Enable,WE#):WE#负责将数据、地址或者指令写入NAND 之中。
  • 读使能(Read Enable,RE#):RE#运行数据输出。
  • 指令锁存使能(Command Latch Enable, CLE):当CLE为高电平时,在WE#信号的上升沿,指令将被锁存到NAND指令寄存器中。
  • 地址锁存使能(Address Latch Enable, ALE):当ALE为高电平时,在WE#信号的上升沿,地址将被所存到NAND指令寄存器中。
  • 就绪/忙(Ready/Busy,R/B#):如果NAND器件忙, R/B#信号将变为低电平。该信号是漏极开路,需要采用上来电阻。

NAND Flash较NOR Flash容量大,价格低;NAND Flash中每个块的最大擦写次数是100万次,而NOR的擦写次数是10万次;NAND Flash的擦除、编程速度远超过NOR Flash。

由于Flash固有的电气特性, 在读写数据过程中,偶尔会产生1位或者几位数据错误, 即位反转, NAND Flash发生位反转的概率要远大于NOR Flash。位反转无法避免,因此,使用NAND Flash的同时,应该采用错误侦测/错误更正(EDC/ECC)算法。

Flash的编程原理都是只能将1写为0,而不能将0写为1。因此在Flash编程之前,必须将对应的块擦除, 而擦除的过程就是把所有位都写为1的过程, 块内所有字节变为0xFF。 另外,Flash还存在一个负载均衡的问题, 不能老是在同一块位置进行擦除和写的动作,这样容易导致坏块。

值得一提的是, 目前NOR Flash可以使用SPI接口进行访问以节省引脚。相对于传统的并行NOR Flash 而言, SPI NOR Flash只需要6个引脚就能实现单I/O、算I/O和4个I/O口的接口通信,有的SPI NOR Flash还支持DDR模式,能进一步提供访问速度到80MB/s。

IDE(Integrated Drive Electronics)接口可以连接硬盘控制器或者光驱,IDE接口的信号与SRAM类似。人们通常也把IDE接口称为ATA(Advanced Technology Attachment)接口,不过,从技术角度而言, 这个并不准确。 其实,ATA接口发展至今,已经经历了ATA-1(IDE)、ATA-2(Enhanced IDE/Fast ATA,EIDE)、ATA-3(FastATA-2)、Ultra ATA、Ultra ATA/33、Ultra ATA/66、Ultra ATA/100以及Serial ATA(SATA)的发展过程。

很多SoC集成了一个eFuse电编程熔丝作为OTP(One-Time Programable, 一次性可编程)存储器。eFuse可以通过计算机对芯片内部的参数和功能进行配置,这一般是芯片出厂的时候已经设置好了。

以上所述的各种ROM、Flash和磁介质存储器都属于非易失性存储器(NVM)的范畴, 掉电是信息不会丢失,而RAM则与此相反。

RAM也可以再分为静态RAM(SRAM)和动态RAM(DRAM)。DRAM以电荷形式进行存储, 数据存储在电容器中。 由于电容器会因为漏电而出现电荷丢失, 所以DRAM器件需要定期刷新。 SRAM是静态的,只要供电它就会保持一个值,SRAM没有刷新周期。每个SRAM存储单元有6个晶体管组成,而DRAM存储单元由1个晶体管和1个电容器组成。

通常所说的SDRAM、DDR SDRAm皆属于DRAM的范畴,它们采用和CPU外部存储控制器同步的时钟工作(注意,不是与CPU的工作评率一致)。与SDRAM相比,DDR SDRAM同时利用了时钟脉冲的上升沿和下降沿传输数据,因此在时钟评率不变的情况下,数据传输评率加倍。 此外,还存在使用RSL(Rambus Signaling Level, Rambus发信电平)技术的RDRAM(Rambus DRAM)和Direct RDRAM。

针对许多特定场合的应用,嵌入式系统中往往还使用了一些特定类似的RAM。

1. DPRAM:双端口RAM

DPRAM的特点是可以通过两个端口同时访问, 具有两套完全独立的数据总线、地址总线和读写控制线,通常用于两个处理器之间交互数据。当一端被写入数据后,另一端可以通过轮询或者中断方式获知,并读取其写入的数据。由于双CPU同时访问DPRAM时的仲裁逻辑电路集成在DPRAM内部, 所以需要硬件工程师设计的电路原理比较简单。

DPRAM的有点是通信速度快、实时性强、接口简单,而且两边处理器都可以主动进行数据传输。除了双端口RAM以外,目前IDT等芯片厂商还推出了多端口RAM,可以供3个以上的处理器互通数据。

2. CAM:内容寻址RAM

CAM是以内容进行寻址的存储器,是一种特殊的存储阵列RAM, 它的主要工作机制就是同事将一个输入数据项与存储在CAM中的所有数据项自动进行比较, 判断该输入数据项与CAM中存储的数据项是否相互匹配,并输出给数据项对应的匹配信息。

在CAM中,输入的是所要查询的数据,输出的是数据地址和匹配标志。若匹配(即搜寻到数据),则输出数据地址。CAM用于数据检索的优势是软件无法比拟的,它可以极高地提供系统性能。

3. FIFO:先进先出队列

FIFO存储器的特点是先进先出,进出有序,FIFO多用于数据缓冲。FIFO和DPRAM类似,具有2个访问端口,但是FIFO两边的端口并不对等,某一时刻只能设置一边为输入,一边为输出。

如果FIFO的区域共有n个字节,我们只能通过循环n次读取同一个地址才能将该片区域读出,不能指定偏移地址。对于有n个数据的FIFO,当循环读m次之后,下一次读取时会自动读取到第m+1个数据,这是由FIFO本身的特性决定的。

总结第二节的内容,可以知道存储器的分类

3 接口与总线

3.1 串口

RS-232、RS-422与RS-485 都是串行数据接口标准,最初都是由电子工业协会(EIA)制定并发布的。

RS-232 是一种单机发送、多机接收的单向、平衡传输规范

RS-422 改进了RS-232 通信距离短、速率低的缺点。

RS-485 增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,并扩展了总线共模范围

1969年的RS-232C 是嵌入系统中应用最广泛的串行接口,它为连接DTE(数据终端设备)与DCE(数据通信设备)而制定。RS-232C标准接口有25条线(4条数据线、11条控制线、3条定时线、7条备用和未定义线), 常用的只有9根,

  • RTS:表示DTE请求DCE发送数据,当终端要发送数据时,使该信号有效
  • CTS:表示DCE准备好要接收DTE发来的数据,是对RTS的响应信号。
  • RxD:DTE通过RxD接收从DCE发来的串行数据。
  • TxD:DTE通过TxD将串行数据发送到DCE。
  • DSR:有效(ON状态)表明DCE可以使用
  • DTS:有效(ON状态)表明DTE可以使用
  • DCE:当本地DCE设备收到对方DCE设备送来的载波信号时,是DCD有效, 通知DTE准备接收,并且由DCE将接收到的载波信号解调为数字信号,经RxD线送给DTE。
  • Ringing-RI:当调制解调器收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。

最简单的RS-232C串口只需要连接RxD、TxD、SG这3个信号,并使用XON/XOFF软件流控。

3.2 I2C

I2C(内置集成电路)总线是由Philips 公司开发的两线式串行总线,产生于20 世纪80 年代,用于连接微控制器及其外围设备。I2C 总线简单而有效,占用的PCB(印制电路板)空间很小,芯片引脚数量少,设计成本低。I2C 总线支持多主控(Multi-Mastering)模式,任何能够进行发送和接收的设备都可以成为主设备。主控能够控制数据的传输和时钟频率,在任意时刻只能有一个主控。

组成I2C 总线的两个信号为数据线SDA 和时钟SCL。为了避免总线信号的混乱,要求各设备连接到总线的输出端必须是开漏输出或集电极开路输出的结构。总线空闲时,上拉电阻使SDA 和SCL 线都保持高电平。根据开漏输出或集电极开路输出信号的“线与”逻辑,I2C总线上任意器件输出低电平都会使相应总线上的信号线变低。

I2C 设备上的串行数据线SDA接口电路是双向的, 输出电路用于向总线上发送数据, 输入电路用于接收总线上的数据。同样地,串行时钟线SCL也是双向的,作为控制总线数据传送的主机要通过SCL输出电路发送时钟信号,并检测总线上SCL的电平以决定什么时候发下一个时钟脉冲电平;作为接收主机命令的从设备需要按总线上SCL的信号发送或接收SDA上的信号,它可以向SCL线发出低电平信号以延长总线时钟信号周期。

当SCL稳定再高电平时,SDA由高到低的变化将产生一个开始位,而由低到高的变化则产生一个停止位,

开始位和停止都由I2C主设备产生。在选择从设备时,如果从设备采用7位地址,则主设备在发起传输过程前,需要先发送1字节的地址信息,前7位为设备地址,最后1位为读写标志。之后,每次传输的数据也是1字节,从MSB开始传输。每个字节传完后,在SCL的第9个上升沿到来之前,接收方应该发出1个ACK位。SCL上的时钟脉冲由I2C主控方发出,在第8个时钟周期后,主控方应该释放SDA,I2C总线的时序

3.3 SPI

SPI(Serial Peripheral Interface,串行外设接口)总线系统是一种同步串行外设接口,它可以使CPU与各种外围设备以串行方式进行通信以交换信息。一般主控SoC作为SPI的“主(Master)”,而外设作为SPI的“从(Slave)”。

SPI接口一般使用4条线:串行时钟线(SCLK)、主机输出/从机输入数据线(MOSI)、主机输入/从机输出数据线(MISO)和低电平有效的从机选择线(SS,在不同的文件里,也常称为nCS、CS、CSB、CSN、nSS等等)。

在SPI总线的传输中,SS信号是低电平有效的,当我们要与某种外设通信时,需要将该外设的SS信号拉低。此外,特别要注意SPI从设备支持的SPI总线最高的时钟频率(决定了SCK的频率)以及外设的CPHA、CPOL模式,这决定了数据和时钟之间的偏移、采样的时刻以及触发的边沿是上升沿还是下降沿。

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性(CPOL)和相位(CPHA)可以进行配置。如果CPOL=0,串行同步时钟的空闲状态未低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。如果CPHA=0,在串行同步时钟的第一个跳边沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳边沿(上升或下降)数据被采样。

3.4 USB

USB 1.1 包含全速和低速两种模式,低速方式的速率为1.5Mbit/s,支持一些不需要很大数据吞吐量和很高实时性的设备,如鼠标等。全速模式为12Mbit/s,可以外接速率更高的外设。

USB 2.0 中,增加了一种高速方式,数据传输率达到480Mbit/s,半双工,可以满足更高速外设的需要。

USB 3.0(也被认为是Super Speed USB)的最大传输带宽高达5.0Gbit/s(即640MB/s),全双工。

USB 2.0 总线的机械连接非常简单,采用4 芯的屏蔽线,一对差分线(D+、D-)传送信号,另一对(VBUS、电源地)传送+5V 的直流电。USB 3.0 线缆则设计了8 条内部线路,除VBUS、电源地之外,其余3 对均为数据传输线路。其中保留了D+ 与D- 这两条兼容USB2.0 的线路,新增了SSRX 与SSTX 专为USB 3.0 所设的线路。

在嵌入式系统中,电路板若需要挂接USB 设备,则需提供USB 主机(Host)控制器和连接器;若电路板需要作为USB 设备,则需提供USB 设备适配器和连接器。目前,大多数SoC 集成了USB 主机控制器(以连接USB 外设)和设备适配器(以将本嵌入式系统作为其他计算机系统的USB 外设,如手机充当U 盘)。

(略,后续补充)

3.5 SD和SDIO

SD(Secure Digital)是一种关于Flash 存储卡的标准,也就是一般常见的SD 记忆卡,在设计上与MMC(Multi-Media Card)保持了兼容。SDHC(SD High Capacity)是大容量SD 卡,支持的最大容量为32GB。2009 年发布的SDXC(SD eXtended Capacity)则支持最大2TB 大小的容量。

SDIO(Secure Digital Input and Output Card,安全数字输入输出卡)在SD 标准的基础上,定义了除存储卡以外的外设接口。SDIO 主要有两类应用——可移动和不可移动。不可移动设备遵循相同的电气标准,但不要求符合物理标准。现在已经有非常多的手机或者手持装置都支持SDIO 的功能,以连接WiFi、蓝牙、GPS 等模块。

一般情况下,芯片内部集成的SD 控制器同时支持MMC、SD 卡,又支持SDIO 卡,但是SD 和SDIO 的协议还是有不一样的地方,支持的命令也会有不同。

SD/SDIO 的传输模式有:

 ● SPI 模式
        ● 1 位模式
        ● 4 位模式

下图显示了SDIO 接口的引脚定义。其中CLK 为时钟引脚,每个时钟周期传输一个命令或数据位;CMD 是命令引脚,命令在CMD 线上串行传输,是双向半双工的(命令从主机到从卡,而命令的响应是从卡发送到主机);DAT[0]~DAT[3] 为数据线引脚;在SPI 模式中,第8 脚位被当成中断信号。图2.18 给出了一个SDIO 单模块读、写的典型时序。

eMMC(Embedded Multi Media Card)是当前移动设备本地存储的主流解决方案,目的在于简化手机存储器的设计。eMMC 就是NAND Flash、闪存控制芯片和标准接口封装的集合,它把NAND 和控制芯片直接封装在一起成为一个多芯片封装(Multi-Chip Package,MCP)芯片。eMMC 支持DAT[0]~DAT[7] 8 位的数据线。上电或者复位后,默认处于1 位模式,只使
用DAT[0],后续可以配置为4 位或者8 位模式。

 

辅助知识

奈奎斯特定理即为采样定理,指当采样频率fsmax 大于信号中最高频率fmax 的两倍时,即fsmax ≥ 2fmax 时,采样之后的数字信号可完整地保留原始信息。这条定理在信号处理领域中的地位相当高,大致相当于物理学领域中的牛顿定律。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值