详解嵌入式开发中常用的七个电路接口
扫描二维码
随时随地手机看文章
我们知道,在电路系统的各个子模块进行数据交换时可能会存在一些问题导致信号无法正常、高质量地“流通”。
例如有时电路子模块各自的工作时序有偏差(如CPU与外设)或者各自的信号类型不一致(如传感器检测光信号)等,这时我们应该考虑通过相应的接口方式来很好地处理这个问题。
下面就电路设计中7个常用的接口类型的关键点进行说明一下:
01.TTL电平接口
这个接口类型基本是老生常谈的吧,从上大学学习模拟电路、数字电路开始,对于一般的电路设计,TTL电平接口基本就脱不了“干系”!它的速度一般限制在30MHz以内,这是由于BJT的输入端存在几个pF的输入电容的缘故(构成一个LPF),输入信号超过一定频率的话,信号就将“丢失”。它的驱动能力一般最大为几十个毫安。正常工作的信号电压一般较高,要是把它和信号电压较低的ECL电路接近时会产生比较明显的串扰问题。
02.CMOS电平接口
我们对它也不陌生,也是经常和它打交道了,一些关于CMOS的半导体特性在这里就不必啰嗦了。许多人都知道的是,正常情况下CMOS的功耗和抗干扰能力远优于TTL。但是!鲜为人知的是,在高转换频率时,CMOS系列实际上却比TTL消耗更多的功率,至于为什么是这样,请去问半导体物理理论吧。由于CMOS的工作电压目前已经可以很小了,有的FPGA内核工作电压甚至接近1.5V,这样就使得电平之间的噪声容限比TTL小了很多,因此更加加重了由于电压波动而引发的信号判断错误。众所周知,CMOS电路的输入阻抗是很高的,因此,它的耦合电容容量可以很小,而不需要使用大的电解电容器了。由于CMOS电路通常驱动能力较弱,所以必须先进行TTL转换后再驱动ECL电路。此外,设计CMOS接口电路时,要注意避免容性负载过重,否则的话会使得上升时间变慢,而且驱动器件的功耗也将增加(因为容性负载并不耗费功率)。
03.ECL电平接口
这可是计算机系统内部的老朋友啊!因为它的速度“跑”得够快,甚至可以跑到几百MHz!这是由于ECL内部的BJT在导通时并没有处于饱和状态,这样就可以减少BJT的导通和截止时间,工作速度自然也就可以提上去了。But,这是要付出代价的!它的致命伤:功耗较大!它引发的EMI问题也就值得考虑了,抗干扰能力也就好不到哪去了,要是谁能够折中好这两点因素的话,那么他(她)就该发大财了。还有要注意的是,一般ECL集成电路是需要负电源供电的,也就是说它的输出电压为负值,这时就需要专门的电平移动电路了。
04.RS-232电平接口
玩电子技术的基本没有谁不知道它的了(除非他或她只是电子技术专业的“门外汉”)。它是低速串行通信接口标准,要注意的是,它的电平标准有点“反常”:高电平为-12V,而低电平为+12V。So,当我们试图通过计算机与外设进行通信时,一个电平转换芯片MAX232自然是少不了的了。但是我们得清醒地意识到它的一些缺点,例如数据传输速度还是比较慢、传输距离也较短等。
05.差分平衡电平接口
它是用一对接线端A和B的相对输出电压(uA-uB)来表示信号的,一般情况下,这个差分信号会在信号传输时经过一个复杂的噪声环境,导致两根线上都产生基本上相同数量的噪声,而在接收端将会把噪声的能量给抵消掉,因此它能够实现较远距离、较高速率的传输。工业上常用的RS-485接口采用的就是差分传输方式,它具有很好的抗共模干扰能力。
06.光隔离接口
光电耦合是以光信号为媒介来实现电信号的耦合和传递的,它的“好处”就是能够实现电气隔离,因此它有出色的抗干扰能力。在电路工作频率很高的条件下,基本只有高速的光电隔离接口电路才能满足数据传输的需要。有时为了实现高电压和大电流的控制,我们必须设计和使用光隔离接口电路来连接如上所述的这些低电平、小电流的TTL或CMOS电路,因为光隔离接口的输入回路和输出回路之间可以承受几千伏特的高压,足以满足一般的应用了。此外,光隔离接口的输入部分和输出部分必须分别采用独立的电源,否则的话还是有电气联系,也就不叫隔离了。
07.线圈耦合接口
它的电气隔离特性好,但是允许的信号带宽有限。例如变压器耦合,它的功率传输效率是非常高的,输出功率基本接近其输入功率,因此,对于一个升压变压器来说,它可以有较高的输出电压,但是却只能给出较低的电流。此外,变压器的高频和低频特性并不让人乐观,但是它的最大特点就是可以实现阻抗变换,当匹配得当时,负载可以获得足够大的功率,因此,变压器耦合接口在功率放大电路设计中很“吃香”。
SIO(串行输入输出)
最基本的串行接口是SIO,它由一个主器件和一个从器件通过一条数据线和一条时钟线采用一对一的方式连接组成。主器件把传输时钟提供给从器件。
接口将被其控制电路中的寄存器指定为主从器件。在数据传输之前,应该设置另一个寄存器以确定哪一个成为发射器或接收器。
![在这里插入图片描述](/uploads/47286/669f8c06cf128.gif)
如果数据集为8位,则发出8个时钟来同步传输数据。主器件的指令随时钟信号传输至从器件。这就是说,当主器件向从器件发送或接收数据时,主器件将通过发出时钟来启动传输请求。由于数据传输方向是预先定义的,因此主器件将在必要时向从器件发出时钟,并执行与从器件之间的数据发送或接收,与时钟同步。
![在这里插入图片描述](/uploads/47286/669f8c071bb95.gif)
数据通常是8位串行数据。可以在数据末尾添加一个奇偶校验位,这将使得长度总共为9位。在这种情况下,从器件接口必须在接收串行数据之前已经知道串行数据有一个奇偶校验位。
![在这里插入图片描述](/uploads/47286/669f8c0747de0.gif)
UART(通用异步收发器)
UART是异步串行接口,两个接口之间没有时钟信号。因此在UART中,主从器件的定义没有意义。
虽然消除时钟信号的目的是防止噪声问题,但这将造成另一个问题。如前所述,来自主器件的命令将通过SIO中的时钟信号发送到从器件。但是由于UART没有任何时钟信号,UART接口无法接受任何命令。因此,接收器必须等待数据到达,然后随时正确接收数据。
为了使接收器能够识别传输数据的开始和结束,发射器应对传输数据的开始或结束数据设置一些指示。起始位是数据“0”,停止(结束)位是数据“1”,它们分别添加在传输数据之前和之后。
![在这里插入图片描述](/uploads/47286/669f8c0761401.gif)
在数据传输之前,发射器或接收器的分配已经完成。如果数据线变为“0”(数据线通常为“1”),则接收器会识别到发射器将要发送数据并准备开始接收传输数据。在数据传输过程中,由于没有时钟信号,很难理解一个位的时间间隔有多长。如果发射器发送了两个“0”(“00”),则接收器不可能在发射器和接收器之间没有任何约定的情况下识别出传输数据只是一个“0”或“00”。
关于该约定的典型例子是,接收器用频率比发射器中的发送时钟快16倍的时钟接收数据,该发射器应在数据传输之前预先定义。一旦接收器检测到起始位,它将每隔16个时钟捕获一次数据。
![在这里插入图片描述](/uploads/47286/669f8c0770a67.gif)
在UART和SIO中都可以添加奇偶校验位。
UART中可能有两个以上的接口。在这种情况下,只有一个接口能分配为主器件,其它接口作为从器件。接收器将应答返回给发射器,使得对接功能可在UART上工作。
SSP(SPI)(同步串行端口(串行外围接口))
SSP是同步串行接口的总称,是指包括SPI在内的几种不同的数据传输方法。
SPI有一个主器件和多个从器件,这就是说SPI具有星型结构。所有接口共享两条数据线。其中一条是主器件发送数据线(SPDO),另一条是主器件接收数据线(SPDI)。通过使用这两条数据线,SPI可以方便地控制从器件接口,同时可轻松地增加从器件接口的数量,因为数据线上不会发生数据冲突。一条时钟线(SPCLK)将由主器件和所有从器件以及数据线共享。
主器件具有选择线路(SPFSSn)来访问其中一个从器件以便与主器件进行通信。一条选择线路连接到一个从器件,因此主器件的选择线路数量与从器件的相同。
![在这里插入图片描述](/uploads/47286/669f8c0793223.gif)
I2C(内部集成电路)
即使网络中存在多个从器件,在I2C中也只需要两条线路,即一条数据线和一条时钟线。I2C还允许多个主器件结构(可以分配多个主器件)。在每个接口控制电路中设置一个寄存器,可以完成主从器件的分配。I2C是同步接口。
设计I2C数据线和时钟线以实现多个主器件结构。所有接口的输出只有“0”或高阻状态,数据和时钟的高电平由线路上的上拉元件(“线与”结构)提供。每个接口的输出缓冲区只有NMOS晶体管,没有PMOS晶体管。必要时,这些晶体管变为“导通”,接口的输出将为“0”。如果这些NMOS晶体管变为“关断”,则接口的输出变为高阻状态。由于上拉元件连接到每条线路,如果连接到信号线的接口的所有输出变成高Z状态,则该线路被上拉直至VDD并变成“1”。这是“线与”结构。
![在这里插入图片描述](/uploads/47286/669f8c07a1f99.gif)
![在这里插入图片描述](/uploads/47286/669f8c07b1a6d.gif)
在“线与”连接中,数据“0”比数据“1”强。也就是说,如果两个接口分别输出“0”和“1”(高阻状态),则该线路的数据变为“0”。该强度优先级实现了对于防止多个主器件系统中发生数据冲突的仲裁方式。考虑两个主器件同时向数据线输出数据的情况,如果其中一个数据为“0”,另一个数据为“1”,则后一个接口将立即知道其它输出为“0”,并根据自己的判断立即停止线路访问。结果是前一个接口将保留使用线路的优先级,后一个接口将在知道前一个接口的数据传输结束后恢复数据传输。这种仲裁方式使得多个主器件系统成为可能。
CAN(控制器区域网络)
CAN是一种主要用于汽车内部通信的网络。CAN的结构致力于抗噪声。它采用差分数据线结构,不需要任何时钟线。所以CAN是异步接口,尽管CAN仅由与I2C一样的两条信号线构成。
![在这里插入图片描述](/uploads/47286/669f8c07c37b2.gif)
双数据线即所谓的CAN.H和CAN.L。两个数据信号之间的电压差表示数据;较高电压的CAN.H和较低电压的CAN.L定义数据“0”,而这些信号的相同电压电平定义数据“1”。这些定义实现了高的抗噪性,因为噪声将以相同的方式同时影响两条线路。
![在这里插入图片描述](/uploads/47286/669f8c07d5177.gif)
CAN接口有一种特殊的同步方式,不需要任何时钟,主从器件之间没有区别。因此,信号线上存在数据冲突的可能性,所以每个接口应设置优先级。接口之间的同步按以下方式进行。首先,发射器将在发送数据之前传输起始位“0”。因为到目前为止,信号线上的数据一直是“1”,所以其它接口将检测到这个“0”数据,并将它们自己的时钟同步到数据“0”的边缘。当接收到传输的数据时,接收器将其时钟定时调整到数据“0”的任意边缘。当数据“1”继续时,这个方法将出现问题,因为数据“1”在CAN.H或CAN.L上没有边缘。连续的数据序列“1”无边缘,并且接收器可能与发射器失去同步。其解决方案是采用“位填充”技术,这种情况下,在五个连续的“1”数据之后插入一个数据“0”,这仅用于发射器的同步。接收器将使用数据“0”来同步其时钟,并将其从接收的数据中消除。
![在这里插入图片描述](/uploads/47286/669f8c07e45ec.gif)
如前所述,应对每个接口设置优先级,以防止数据冲突。为此,每个CAN接口都有标识符(11位)。标识符可用于确定每个接口传输数据的优先级,以防止数据冲突。
实际上,当数据“0”和数据“1”从不同的接口输出到数据线时,数据“0”在CAN中的传输类似于在I2C中的传输。在起始位之后和传输数据之前,发射器将传输其自己的标识符。当两个接口同时发送它们的标识符时,其中一个接口将取得优先级,输出“0”,另一个输出“1”。前一个接口可以占用数据线,在另一个接口之前完成发送。
USB 2.0(通用串行总线2.0)
USB 2.0是一种非常流行的串行接口,特别是对于个人电脑而言。众所周知,USB 2.0被广泛应用于各种应用,比如键盘、鼠标、打印机、闪存、硬盘、扬声器等接口。
USB 2.0有三种速度等级,分别是低速(1.5Mbps)、全速(12Mbps)和高速(480Mbps)。东芝TX03系列微处理器支持USB 2.0全速。
USB接口采用分层结构。在USB中,主器件称为“主机”,从器件称为“设备”。USB 2.0是一个星型网络,其中一个“主机”控制着许多“设备”。例如,PC是主机,设备可以是通过USB电缆连接到PC的任何设备,比如键盘、鼠标等。
![在这里插入图片描述](/uploads/47286/669f8c080e738.gif)
USB的显著特点是即插即用。连接或卸下USB设备时,不必关闭电脑。这就是USB变得如此流行的原因之一。
为了使USB设备能够很容易地连接到网络或从网络中移除,USB主机必须做一些工作。当USB设备连接到网络时,该设备会向主机发送请求。接收来自设备的请求后,主机开始获取设备的信息,选择最合适的驱动器,并为设备分配地址。主机的这个操作称为枚举。枚举成功后,主机可以正确访问设备。
主机可控制的设备和集线器的最大数量为127。如果集线器插入网络,则串联连接的集线器数量必须小于或等于5。
USB 2.0电缆有4根导线:VDD、GND、信号D+和信号D-。对于一个传输数据,信号D+和D-彼此取互补值。如果D+为高电平,D-为低电平,则数据被称为“差分1”。如果D+为低电平,D-为高电平,则数据被称为“差分0”。
但在USB 2.0网络的实际数据传输中,“差分1”和“差分0”并不一定分别意味着数据“1”和数据“0”。USB的数据格式为NRZI(反向不归零)。当一个时钟间隔内没有变化时,此格式将定义数据“1”,当发生从高到低或从低到高的变化时,则定义数据“0”。
![在这里插入图片描述](/uploads/47286/669f8c081dfb9.gif)
![在这里插入图片描述](/uploads/47286/669f8c0830bec.gif)
USB 2.0没有任何时钟线,所以它是异步接口。所以主机和驱动器必须像在CAN中一样进行相互同步。传输8位SYNC码,使接收器与发射器以USB全速同步。
数据传输时,在USB 2.0中连续传输6次数据“1”后,完成数据“0”的位填充,因为只有数据“1s”连续传输时,NRZI格式中无信号边缘出现。
![在这里插入图片描述](/uploads/47286/669f8c0846541.gif)
EtherMAC(以太网媒体访问控制)
EtherMAC是以太网接口的一部分。由于以太网的接口结构非常复杂,所以不容易闸释完全的以太网功能。我们只对以太网进行简要说明,提供到目前为止所述的与其它串行接口的差异概述。
以太网的“以太”来自一种叫做“以太”的介质,它是一种物理学定义,曾经被认为可以填满所有的空间。“以太”的存在最终被否定了,但由于“以太”被认为是无处不在的,所以它成为了网络命名的起源。
以太网主要分为四层,即物理层、数据链路层、网络层和上层。EtherMAC处理最低的两层:物理层和数据链路层。
以太网电缆由四根信号线组成。两条绞合线用于输出数据,另两条绞合线用于输入数据。这种电缆即使没有电屏蔽层也有很好的抗噪性(非屏蔽双绞线:UTP)。由于没有时钟线,因此以太网是一个异步接口。
为了理解以太网的概念,我们先介绍一下10Base-T,尽管100Base-TX是当今最流行的版本,但10Base-T是基本的,且比100Base-TX简单得多。
10Base-T是一个使用双绞线的接口,具有10Mbps传输速率和基带格式。
信号传输采用曼彻斯特代码格式。在曼彻斯特代码中,数据“1”和“0”分别定义为上升转换和下降转换。
![在这里插入图片描述](/uploads/47286/669f8c0860f0d.gif)
以太网没有任何时钟线。接收器和发射器必须彼此同步,与CAN和USB2.0接口中一样。但即使相同的数据连续重复,也不需要位填充,因为数据“1”和数据“0”中都有信号转换。发射器发送数据前的56位连续脉冲,仅用于使接收器与发射器同步。
以太网没有USB 2.0中所必不可少的主机和设备关系等层次结构。当接口的一个单元想要输出数据时,该线路必须是空闲的。如果另一个单元占用线路,该单元必须等待。即使该单元已确保线路可用并开始发送数据,但如果另一个单元也开始同时发送数据,则会发生冲突。一旦发生冲突,所有单元将停止发送数据,并等待线路空闲。当一个单元尝试开始发送时,可能会再次发生另一个冲突,因为其它单元也尝试开始发送。为了防止这种永久性的冲突,以太网有一个防止冲突的对策。当发生冲突时,发射器的等待时间由随机数决定。这对发生冲突的单元有效。但是当先前的一个单元开始再次发送数据时,新单元可能会发生冲突。一个单元最多可以发送16次相同的数据。
对于无主从器件关系的系统分担通信责任而言,这是最佳的仲裁方式之一。