在开始使用串行通信协议之前,让我们将术语分为三个部分。的通信是非常公知的术语,其涉及到的两个或更多个介质之间的信息交换。在嵌入式系统中,通信意味着以位的形式在两个微控制器之间交换数据。微控制器中的数据位交换是通过一些定义为通信协议的已定义规则完成的。现在,如果数据以串行方式(即一个接一个地发送)发送,则该通信协议称为串行通信协议。更具体地说,在串行通信中,数据位在数据总线或通信通道上一次依次发送。
通信协议的类型
数字电子设备中有多种类型的数据传输可用,例如串行通信和并行通信。类似地,协议分为两种类型,例如串行通信协议和并行通信协议。并行通信协议的示例是ISA,ATA,SCSI,PCI和IEEE-488。类似地,有一些串行通信协议的示例,例如CAN,ETHERNET,I2C,SPI,RS232,USB,1-Wire和SATA等。
在本文中,将讨论不同类型的串行通信协议。串行通信是在数据处理外围设备之间传输信息的最广泛使用的方法。每个电子设备(无论是个人计算机(PC)还是移动设备)都通过串行通信运行。该协议是一种安全可靠的通信形式,具有类似于并行通信的由源主机(发送方)和目标主机(接收方)解决的一组规则。
串行通讯中的传输模式
如上所述,在串行通信中,数据是以位即二进制脉冲的形式发送的,众所周知,二进制表示逻辑高电平,而零表示逻辑低电平。取决于传输模式和数据传输的类型,有几种类型的串行通信。传输模式分为单工,半双工和全双工。
单纯形法:
在单工方法中,介质(即发送者或接收者)可以同时处于活动状态。因此,如果发送方正在发送数据,则接收方只能接受,反之亦然。因此单纯形法是一种单向通信技术。单纯形法的著名示例是电视和广播。
半双工方法:
在半双工方法中,发送方和接收方都可以处于活动状态,但不能同时处于活动状态。因此,如果发送方正在发送,则接收方可以接受但不能发送,反之亦然。半双工的著名示例是Internet,用户在其中发送数据请求并从服务器获取数据。
全双工方法:
在全双工方法中,接收器和发送器都可以同时相互发送数据。众所周知的例子是手机。
除此之外,对于适当的数据传输,时钟起着重要的作用,它是主要的时钟源之一。时钟故障会导致意外的数据传输,甚至有时会导致数据丢失。因此,使用串行通信时,时钟同步变得非常重要。
时钟同步
串行设备的时钟不同,分为两种类型。同步串行接口和异步串行接口。
同步串行接口:
它是从主机到从机的点对点连接。在这种类型的接口中,所有设备都使用单个CPU总线共享数据和时钟。使用同一总线共享时钟和数据,数据传输变得更快。此接口中的波特率也没有不匹配。在发送器端,由于没有将开始,停止和奇偶校验位添加到数据中,因此将数据移到串行线上,将时钟作为单独的信号提供。在接收器端,正在使用发送器提供的时钟提取数据,并将串行数据转换回并行形式。众所周知的示例是I2C和SPI。
异步串行接口:
在异步串行接口中,没有外部时钟信号。异步串行接口主要在长距离应用中看到,并且非常适合稳定通信。在异步串行接口中,由于没有外部时钟源,因此它依赖于多个参数,例如数据流控制,错误控制,波特率控制,传输控制和接收控制。在发送器端,使用自己的时钟将并行数据转移到串行线上。它还添加了开始,停止和奇偶校验位。在接收器端,接收器使用自己的时钟提取数据,并在剥离起始,停止和奇偶校验位后将串行数据转换回并行格式。众所周知的示例是RS-232,RS-422和RS-485。
与串行通信有关的其他术语
除了时钟同步外,串行传输数据时还需要记住一些事项,例如波特率,数据位选择(成帧),同步和错误检查。让我们简短地讨论这些术语。
波特率:波特率是以每秒比特数(bps)的形式在发送器和接收器之间传输数据的速率。最常用的波特率是9600。但是还有其他一些波特率选择,例如1200、2400、4800、57600、115200。波特率越高,一次传输的数据就越多。同样对于数据通信,发送器和接收器的波特率也必须相同。
成帧:成帧是指要从发送器发送到接收器的数据位数。数据位数因应用而异。大多数应用程序使用8位作为标准数据位,但也可以选择5、6或7位。
同步:同步位对于选择大块数据很重要。它告诉数据位的开始和结束。发送器将开始和停止位设置到数据帧,接收器将相应地识别它并进行进一步处理。
错误控制:在串行通信中,错误控制起着重要的作用,因为有很多因素会影响和增加串行通信中的噪声。为了消除此错误,可使用奇偶校验位,其中奇偶校验将检查偶校验和奇校验。因此,如果数据帧包含偶数1,则称为偶数奇偶校验,并且寄存器中的奇偶校验位设置为1。类似地,如果数据帧包含奇数1,则称为奇数奇偶校验并清除寄存器中的奇校验位。
协议就像系统用来理解数据的通用语言一样。如上所述,串行通信协议被划分为类型,即同步和异步。现在将对两者进行详细讨论。
同步串行协议
串行协议的同步类型,例如SPI,I2C,CAN和LIN,在不同的项目中使用,因为它是板载外设的最佳资源之一。这些也是主要应用中广泛使用的协议。
SPI协议
串行外围设备接口(SPI)是一个同步接口,它允许多个SPI微控制器互连。在SPI中,数据线和时钟线需要分开的线。同样,时钟不包括在数据流中,必须作为单独的信号提供。SPI可以配置为主设备或从设备。四个基本SPI信号(MISO,MOSI,SCK和SS),Vcc和地是数据通信的一部分。因此,它需要6条线来发送和接收来自从机或主机的数据。从理论上讲,SPI可以具有无限数量的从机。数据通信在SPI寄存器中配置。SPI可以提供高达10Mbps的速度,是高速数据通信的理想选择。
大多数微控制器都内置了对SPI的支持,可以直接连接SPI支持的设备:
- 与PIC单片机PIC16F877A的SPI通信
- 如何在STM32微控制器中使用SPI通信
- 如何在Arduino中使用SPI:两个Arduino板之间的通信
I2C串行通讯
不同IC或模块之间的内部集成电路(I2C)两线通信,其中两条线是SDA(串行数据线)和SCL(串行时钟线)。两条线都必须使用上拉电阻连接到正电源。I2C可以提供高达400Kbps的速度,它使用10位或7位寻址系统将i2c总线上的特定设备作为目标,因此它最多可以连接1024个设备。它的通信长度有限,非常适合车载通信。I2C网络易于设置,因为它仅使用两条线,并且新设备可以简单地连接到两条公共I2C总线。与SPI一样,微控制器通常具有I2C引脚以连接任何I2C器件:
- 如何在STM32微控制器中使用I2C通信
- 与PIC单片机PIC16F877的I2C通信
- 如何在Arduino中使用I2C:两个Arduino板之间的通信
USB
USB(通用串行总线)是具有不同版本和速度的广泛协议。一个USB主机控制器最多可以连接127个外围设备。USB充当“即插即用”设备。USB几乎用于各种设备,例如键盘,打印机,媒体设备,相机,扫描仪和鼠标。它设计为易于安装,更快的数据评级,更少的电缆连接和热插拔。它取代了体积较大,速度较慢的串行和并行端口。USB使用差分信号来减少干扰并允许长距离高速传输。
差分总线由两根导线构成,一根代表传输的数据,另一根代表互补数据。想法是导线上的“平均”电压不携带任何信息,从而减少了干扰。在USB中,允许设备消耗一定量的电源而无需询问主机。USB仅使用两根线进行数据传输,并且比串行和并行接口快。USB版本支持不同的速度,例如1.5Mbps(USB v1.0),480 Mbps(USB2.0),5Gbps(USB v3.0)。不带集线器的单个USB电缆的长度最多可以达到5米,而带集线器的则可以达到40米。
能够
控制器局域网(CAN)用于例如汽车,以允许ECU(发动机控制单元)和传感器之间进行通信。CAN协议功能强大,成本低廉且基于消息,并且适用于许多应用,例如汽车,卡车,拖拉机,工业机器人。CAN总线系统允许在所有ECU中进行集中错误诊断和配置。CAN消息通过ID进行优先级排序,以便优先级最高的ID不间断。每个ECU都包含一个芯片,用于接收所有传输的消息,确定相关性并采取相应的措施-这样可以轻松修改和包含其他节点(例如CAN总线数据记录器)。应用包括车辆的启动/停止,防撞系统。CAN总线系统可以提供高达1Mbps的速度。
微线
MICROWIRE是3Mbps串行3线接口,本质上是SPI接口的子集。Microwire是微控制器上的串行I / O端口,因此Microwire总线也可以在EEPROM和其他外围设备芯片上找到。3行是SI(串行输入),SO(串行输出)和SK(串行时钟)。到微控制器的串行输入(SI)线,SO是串行输出线,SK是串行时钟线。数据在SK的下降沿移出,并在上升沿进行赋值。SI在SK的上升沿移入。MICROWIRE的另一项总线增强功能称为MICROWIRE / Plus。两条总线之间的主要区别似乎是微控制器内的MICROWIRE / Plus体系结构更复杂。它支持最高3Mbps的速度。
异步串行协议
当涉及到更长距离的可靠数据传输时,串行协议的异步类型非常重要。异步通信不需要两个设备都共用的定时时钟。每个设备以商定的速率独立地监听并发送代表数据位的数字脉冲。异步串行通信有时也称为晶体管-晶体管逻辑(TTL)串行,其中高电压电平为逻辑1,低电压等于逻辑0。当今市场上几乎每个微控制器都至少具有一个通用异步接收器-用于串行通信的发送器(UART)。例如RS232,RS422,RS485等。
RS232
RS232(推荐标准232)是非常通用的协议,用于连接不同的外围设备,例如显示器,CNC等。RS232带有公头和母头连接器。RS232是点对点拓扑,最多可连接一台设备,并且以9600 bps的距离覆盖15米。RS-232接口上的信息通过逻辑0和1进行数字传输。逻辑“ 1”(MARK)对应于-3至-15 V范围内的电压。逻辑“ 0”(SPACE)对应于一个电压范围为+3到+15V。它带有DB9连接器,该连接器具有9个引脚,例如TxD,RxD,RTS,CTS,DTR,DSR,DCD,GND。
RS422
RS422与RS232相似,RS422允许在单独的线路上同时发送和接收消息,但为此使用差分信号。在RS-422网络中,只能有一个发送设备,最多有10个接收设备。RS-422中的数据传输速度取决于距离,并且可以从10 kbps(1200米)到10 Mbps(10米)不等。RS-422线是用于数据传输的4条线(用于传输的2条双绞线和用于接收的2条双绞线)和一根公共GND接地线。数据线上的电压可以在-6 V至+6 V的范围内。A和B之间的逻辑差大于+0.2V。逻辑1对应于A和B之间的差小于-0.2V。 RS-422标准没有定义特定类型的连接器,通常它可以是接线盒或DB9连接器。
RS485
由于RS485使用多点拓扑,因此它在行业中使用最多,并且是行业首选协议。RS422可以在差分配置中连接32个线路驱动器和32个接收器,但借助额外的中继器和信号放大器,最多可以连接256个设备。RS-485没有定义特定类型的连接器,但通常是端子块或DB9连接器。操作速度还取决于线路的长度,在10米处可以达到10 Mbit / s。线路上的电压范围为-7 V至+12V。RS-485有两种类型,例如具有2个触点的半双工模式RS-485和具有4个触点的全双工模式RS-485。要了解有关将RS485与其他微控制器一起使用的更多信息,请查看以下链接:
- 使用Arduino UNO作为从站的RS-485 MODBUS串行通信
- Raspberry Pi与Arduino Uno之间的RS-485串行通信
- Arduino Uno和Arduino Nano之间的RS485串行通信
- STM32F103C8与Arduino UNO之间使用RS-485进行串行通信
结论
串行通信是电子和嵌入式系统中广泛使用的通信接口系统之一。对于不同的应用,数据速率可以不同。在处理这类应用程序时,串行通信协议可以起决定性作用。因此,选择正确的串行协议变得非常重要。