上一课:
【小黑嵌入式系统第二课】嵌入式系统的概述(二)——外围设备、处理器、ARM、操作系统
下一课:
【小黑嵌入式系统第四课】嵌入式系统硬件平台(二)——I/O设备、通信设备(UART&USB&蓝牙)、其他(电源&时钟&复位&中断)
文章目录
一、概述
嵌入式系统的硬件除了核心部件——嵌入式处理器,还包括存储器系统、外围接口部件以及连接各种设备的总线系统。
其中,存储器是嵌入式系统存放数据和程序的功能部件;
而外围设备决定了应用于不同领域的嵌入式系统的独特功能。
嵌入式系统的硬件是 以嵌入式处理器为中心,由存储器、I/O单元电路、通信模块、其它外部设备 等必要的辅助接口组成。
在实际应用中,嵌入式系统硬件配置非常精简,除了微处理器和基本的外围电路以外,其余的电路可以根据需要和成本进行裁剪、定制。
通常,嵌入式系统还包括人机交互界面,用于系统与人的交互。人机界面常常使用键盘、液晶屏、触摸屏等部件,以方便与人的交互操作。
存储器是构成嵌入式系统硬件的必要组成部分。在嵌入式系统中使用的存储器可以只是内部存储器,也可以包含外部存储器。
嵌入式处理器工作时必须有附属电路支持。在设计其硬件电路时,常常将它们与嵌入式处理器设计成一个模块,形成处理器子系统。
嵌入式处理器在功能上与通用处理器的区别之一在于嵌入式处理器上集成了大量的I/O电路。用户在开发时,根据系统需求选择某款嵌入式处理器,而不是让嵌入式处理器另外选择配合外围的大量I/O电路。
二、总线
1. 总线的概念
**总线(Bus)**是计算机各种功能部件之间传输信息的公共通信干线,它是由导线组成的传输线束。根据所传输的信息种类,计算机的总线可以划分为 数据总线、地址总线和控制总线 ,分别用来传输数据、数据地址和控制信号。
所有微机系统的总线结构,不外乎有“冯·诺伊曼”和“哈佛”两种。
1.1 总线结构
-
冯·诺伊曼总线结构将程序存储器和数据存储器合在一起管理,采用同一套地址和数据总线对它们进行寻址。因此总线就特别繁忙,成为提高运行速度的“瓶颈”。但在使用上非常灵活。
-
哈佛总线结构采用两套总线分别控制程序存储器和数据存储器,分别读取程序代码和存取数据。
☆ 降低了总线繁忙程度和指令执行的时间。
☆ 哈佛结构使得指令的执行时间相等,提高了控制性能。
-
改进型哈佛总线结构 虽然也使用两个不同的存储器:程序存储器和数据存储器,但合并了两个存储器的地址总线,数据总线也进行了合并,即原哈佛结构需要4条不同的总线,改进后需要两条总线。
☆ 使用两个独立的存储器模块,分别存储程序指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;
☆ 具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则用来完成程序存储模块或数据存储模块与CPU之间的数据传输;
☆ 两条总线由程序存储器和数据存储器分时共用。
1.2 总线类型
1.2.1 数据总线
数据总线的宽度又称为计算机的“位数”,是计算机系统一个最重要的参数。原因是数据总线的宽度表明了计算机系统能够一次(单指令)处理的数据的范围,代表了计算机系统处理数据的能力。
如:MCS-51单片机的数据总线宽度为8位,ARM Cortex-M3的数据总线宽度为32位。
1.2.2 程序总线
决定了CPU每次能够从程序存储器取出多少位的指令,或者说一条指令中能够含有多少信息。因此程序总线的宽度在很大程度上决定了计算机系统指令集的效率。
1.2.3 数据地址总线
数据地址总线配合数据总线,对数据存储器进行寻址。其宽度决定了CPU能够寻址的数据存储器的多少。
1.2.4 程序地址总线
程序地址总线配合程序总线,对程序存储器进行寻址。程序地址总线的宽度决定了微处理器理论上能够含有的程序存储器的多少。
以上概念主要描述的是并行通信总线,对于串行通信总线,则情况会有较多区别。
不管怎样,总线是各种功能部件之间传输信息的公共通道,总线上所接的功能部件一定是可以多于2个的。
2. 总线协议
2.1 握手协议
-
总线握手协议的作用是控制每个总线周期中数据传送的开始和结束,从而实现两个设备间协调和配合,保证数据传送的正确和可靠。
-
这是因为总线上连接有多个通信设备,它们之间若随意在总线上传送数据必然会导致冲突。
最简单的握手使用两根用来进行握手的电线enq(表示查询)和ack(表示应答),并使用专用的电线来传输数据。 -
握手信号线必须以某种方式的信号变化来表明整个总线传输周期的开始和结束,以及在整个周期内每个子周期(若有)的开始和结束。
总线握手协议中的基本构件是 四周期握手协议 。
2.2 总线读写
-
微处理器总线在握手基础上为CPU和系统其它部分建立通信。基本的总线操作包括读和写。
-
总线行为经常用时序图来说明,时序图表示了总线上的信号如何随时间变化。
-
在许多系统中,总线上也可执行突发数据传输。
- 总线事务的状态机是对时序图的有效补充。
- 当CPU决定执行一个读事务,它转换到新状态,并发给让设备正确工作的总线信号;而设备状态转换图捕获它这一端的总线协议状态。
2.3 DMA
关于DMA的文章:【物联网】DMA传输原理与实现详解(超详细)
某些数据传输可能并不需要CPU介入,如I/O设备和存储器之间的数据交换。要实现这类操作,就要求有CPU以外的设备单元能够控制总线上的操作。
- 直接存储器访问(Direct Memory Access,DMA)允许不由CPU控制的总线读写操作。
虽然名字上有“存储器”,但DMA也可以适用于映射到地址空间上的别的I/O设备。 - DMA使用一种称为DMA控制器的专用硬件来完成外设与存储器之间的高速数据传送。
- DMA控制器向CPU请求总线控制,当CPU不需使用总线传输数据时,则DMA控制器得到总线控制权,它能像CPU那样提供存储地址和必要的读写控制信号,实现直接在设备和存储器之间执行读写操作。
DMA控制器、CPU都可以发起总线数据传输,它们被称为总线主设备,总线上的其它设备则称为总线从设备。
总线在一段时间内只能由一个主设备控制使用,若多个总线主设备同时需要使用总线,此时需要“仲裁”,由仲裁器决定哪一个使用。
2.4 多总线系统
- 一个微处理器系统可能使用多条总线来连接设备。
- 使用这样的总线配置主要考虑到以下几个原因:
1、高速总线通常提供较宽的数据连接。
2、高速总线通常要更昂贵的电路和连接器,可以通过使用较慢的、比较便宜的总线来降低低速设备成本。
3、桥允许总线独立操作,因此可以在I/O操作中提供并行性。
2.5 多总线系统实例
ARM AMBA(Advanced Microcontroller Bus Architecture)总线系统
三、存储设备
存储设备更加详细文章:【物联网】ROM、RAM和FLASH的区别
存储器用来存放计算机工作所必须的数据和程序,在嵌入式系统中普遍使用。
嵌入式微处理器在运行时,大部分总线周期都是用于对存储器的读/写访问。存储器系统性能的好坏将在很大程度上影响嵌入式系统的性能。
为了追求存储器的高性能,一方面要从存储单元的设计、制造上研究改进(Flash、NVRAM) ;另一方面从存储器系统的结构上探索、优化(3D堆叠,多通道)。
- 嵌入式系统存储器子系统的结构 :
- RAM
- ROM
- Flash
3.1 嵌入式系统存储器子系统的结构
- 嵌入式系统的存储器子系统与通用计算机的存储器子系统的功能并无明显的区别。
- 这决定了嵌入式系统的存储器子系统的设计指标和方法也可以采用通用计算机的方法,尤其是嵌入通用计算机的大型嵌入式系统更是如此。
- 存储器子系统设计的首要目标是使存储器在工作速度上很好地与处理器匹配,并满足各种存取需要。
存储器子系统设计的首要目标是使存储器在工作速度上很好地与处理器匹配,并满足各种存取需要。
- 大量使用高速存储器,使它们在速度上与处理器相吻合,能够简便地解决问题,但受到经济上的限制。
在实际的计算机系统中,总是采用分级的方法来设计整个存储器子系统。 - 全部存储系统分为四级,即寄存器组、高速缓存、内存和外存。它们在存取速度上依次递减,而在存储容量上逐级递增。
存储的分层体系:
存储的分层体系:
寄存器组:
寄存器组是最高一级的存储器。
- 在计算机设备中,寄存器组一般是CPU内含的,ARM处理器中有37个寄存器。
- 有些待使用的数据或者运算的中间结果可以暂存在这些寄存器中。
- 微处理器在对CPU内的寄存器读写时,速度很快,一般在一个时钟周期内完成。
- 从总体上说,设置一系列寄存器是为了尽可能减少微处理器从外部取数的次数。
- 但由于寄存器组是制作在CPU内部的,受芯片面积和集成度、以及指令系统的限制,寄存器的数量不可能做得很多。
高速缓冲存储器(Cache):
第二级存储器是高速缓冲存储器(Cache)。
- 高速缓存是一种小型、快速的存储器,其存取速度足以与微处理器相匹配。
- 高速缓存保存部分内存内容的拷贝,这部分内容应是被高频率使用的。如果正确使用,它能够减少内存平均访问时间。
内存:
第三级是内存。
- 运行的程序和数据都放在内存中。
- 如果微处理器的访问大部分在高速缓存上,内存就可以采用速度稍慢的存储器,对系统性能的影响不会太大,同时又降低了成本。
- 内存除主要使用RAM外,还要使用一定量的ROM。
外存:
最低一级存储器是大容量的外存。
- 这种外存容量大,但是在存取速度上比内存要慢得多。
- 目前嵌入式系统中常用闪存作为大容量“硬盘”存储各种程序和数据。
3.2 RAM
随机存取存储器(Random Access Memory,RAM)能够随时在任一地址读出或写入内容。
- RAM的突出优点是读写方便、使用灵活。缺点是不能长期保存信息,一旦停电,所存信息就会丢失。但维持静态数据所需的功耗通常较低。
- RAM用于数据的临时存储或缓冲存储,在嵌入式系统中主要用于:
- 存放当前正在执行的程序和数据,如用户的调试程序、程序的中间运算结果以及掉电时无需保存的I/O数据和参数等。
- 作为I/O数据缓冲存储器,如显示输出缓冲存储器、键盘输入缓冲存储器等。
- 作为函数调用时传递参数和返回值的、以及中断服务中保护CPU现场信息的栈。
RAM分类:
1、静态RAM
- 静态随机存储器(Static RAM,SRAM)的存储单元电路是以双稳态电路为基础,因此状态稳定,只要不掉电,信息不会丢失。存储一位需要花6个晶体管.
异步SRAM读写时序:
- SRAM的操作方法有两种,即读操作和写操作。异步SRAM的操作是最简单的,如下:
异步SRAM上的读操作方法:
- 将地址送到地址线上
- 然后让CE’=0,启用SRAM
- 让R/W’=1
- 一定延迟时间后,数据通过数据信号线输出。
异步SRAM上的写操作方法:
-
将地址送到地址线上
-
让CE’=0,启用SRAM
-
让R/W’=0
-
数据送到数据线上
-
让R/W’=1,在R/W’上升沿数据被写入存储器。
-
存储芯片读取时间应小于CPU从发出地址到要求数据稳定的时间间隔;存储芯片从片选有效到输出稳定的时间应小于系统自片选有效到CPU要求数据稳定的时间间隔,或提供外部电路,以产生READY信号,迫使CPU插入等待时钟Tw (时序匹配) 。若内存速度过慢,CPU插入大量等待时钟Tw ,则内存拖慢了整体处理速度(速度匹配)。
-
例如, Intel 2114-2的读取时间最大为200 ns,而CPU要求的从地址有效到数据稳定的时间间隔为150 ns,则不能使用2114-2,可选用比它快的芯片。如果出于价格因素,一定要用2114-2,则需要设计READY产生电路,以便插入Tw。
2、动态RAM
-
动态随机存储器(Dynamic RAM,DRAM)的存储单元电路以小电容(几pF~几十pF)为基础,大容量的DRAM存储单元一般为1T1C(1晶体管1电容)结构,电路简单、集成度高。
-
但DRAM即使不掉电也会因小电容放电而丢失信息,需要定时刷新(每行几us~十几us的刷新周期),因此在工作时必须配合DRAM控制器。
-
DRAM有很多类型,主要是接口方面的不同,内部存储单元基础则差别不大。(最老式的)异步接口的有FPM DRAM、EDO DRAM,同步接口的有SDR SDRAM、DDR~DDR6 SDRAM。这些产品均有在产及应用。
对DRAM的操作除了一般的读写之外,还有刷新等必需的操作。有了DRAM控制器可以极大地释放CPU直接操作DRAM的负担,同时实现高可靠性。
EDO DRAM读时序:
SRAM vs DRAM
- SRAM不需要刷新电路即能保存它内部存储的数据,DRAM每隔一段时间,要刷新充电一次,否则内部的数据即会消失。
- SRAM速度快,不必配合内存刷新电路,可提高整体的工作效率。
- SRAM集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,而且价格较高。
- 因为DRAM需要定时刷新,消耗能量相对大;而SRAM在系统进入待机工作方式时,只需要微小的待机电流就可以维持数据不丢失。但需要注意的是,SRAM的静态功耗低,但是工作时动态功耗不低。
- 例如:cache追求的是速度所以选择SRAM,而内存则追求容量所以选择能够在相同空间中存放更多内容并且造价相对低廉的DRAM。
3.3 ROM
只读存储器(Read-Only Memory,ROM)中的内容一经写入,在工作过程中就只能读出不能重写,即使掉电,写入的内容也不会丢失。
- ROM在嵌入式系统中非常有用,常常用来存放系统软件(如ROM BIOS)、应用程序等不随时间改变的代码或数据。
- ROM可以分为工厂可编程ROM和现场可编程ROM两大类。
- 工厂可编程ROM(即掩模可编程ROM,Mask-Programmable ROM)是由半导体厂商按照用户要求掩模制成,之后不能改写,用户只能读出、不能改写。掩模ROM一般只用于大批量生产的计算机产品中,在产品研制和实验室小批量生产时,应选用现场可编程ROM。
- 有几种不同类型的现场可编程ROM(Field Programmable ROM),一些只可编程一次(OTP),而另一些可以被重复编程。
-
可编程ROM(Programmable ROM),为一般的术语。
-
紫外线可擦可编程ROM(UV Erasable Programmable ROM, UV_EPROM)
-
电可擦可编程ROM(Electrical Erasable Programmable ROM, EEPROM)
-
3.4 Flash
快闪存储器、闪存(Flash Memory)是一种电可擦可编程ROM存储器,现今被广泛使用于内存和外存。
-
Flash的特点:
- 在不加电情况下能长期保存信息,同时又能在线进行快速擦除与重写。
- 从软件的观点来看,由于可以使用一套相似的软件接口,Flash和EEPROM的技术十分类似(虽然电路结构不同)。
-
闪存与 EEPROM的区别:
- 有些EEPROM擦写和编程时要加高电压(如12V),这意味着重新编程时必须将芯片从系统中取下来;而Flash使用标准供电电压擦写和编程,允许芯片在标准系统内部编程(在系统可编程ISP、在应用可编程IAP) 。
- EEPROM可以单独擦写某个存储单元,操作起来很方便;Flash则必须擦除一个存储块,然后再写入新数据到这个块中,因此需要保存和重写此块中被迫被擦除的内容。
- 大部分Flash允许某些块被保护,这一点对存储空间有限的嵌入式系统非常有用,即将引导代码放进保护块内而允许更新设备上其它的存储块。
- EEPROM通常容量较小,Flash则可以有非常大容量。
Flash与各种存储器技术的比较:
-
Flash的分类:
- NOR Flash是在EEPROM的基础上发展起来的,它的存储单元由N-MOS构成,而连接N-MOS单元的线是独立的。NOR Flash可以随机读取任意单元的内容,有SRAM形式的接口,适合于程序代码的并行读取,常用于制作计算机的BIOS存储器和微控制器的内部存储器等。
- NAND Flash是将几个N-MOS单元用同一根线连接起来,适合按顺序读取存储单元的内容,适合于数据或文件的存储。
-
Flash的操作包括读出和写入:
- 读操作:处理器只要提供地址、读操作信号和片选信号,存储器就返回在该位置保存的数据。大部分的Flash在系统重启时自动进入读状态,启动读状态不需要特别的初始化序列。
- 写操作:把程序或数据写入Flash的过程也叫作编程。Flash的编程有两种方式,一种是在线编程,一种是离线编程。
-
Flash的编程:
- 存储位置必须在重写操作之前被擦除。如果旧的数据没有被擦除,写操作的结果会是新旧数值的某种逻辑组合,存储的数据通常是错误的。
- 一次至少有一个扇区或者块被擦除,而不可能只是擦除一个单个的字节。
- 擦除旧数据和写入新数据的操作过程是随着芯片制造商的不同而异的。因此针对Flash编程,提供一个软件层来完成擦除和写入操作比较方便,这个软件层叫作Flash的驱动程序。
-
Flash的嵌入式应用:
- Flash文件系统:因为Flash提供了可被重写的非易失性存储,因此它可以被看作类似于硬盘的存储系统。在作为文件系统的情况下,由驱动程序提供的函数要更加面向文件,提供诸如open()、close()、read()、write()等标准文件系统函数。Flash文件系统的组织与普通的外存基本相同。
- 便携设备的存储装置:随着数码产品的飞速发展,利用其大容量非易失的特点,Flash作为一种最常用的存储装置应用于数码相机(如CF卡、SD卡、记忆棒等)、MP3等数码产品中。但有的设备并不一定需要将Flash组织成文件系统。
- 内存中的ROM:存储程序代码和常数,还可以实现ISP或IAP。