前言:
在学习RS232和RS485通信之前,为了我们更好的理解,就得结合串口通信的知识,所以顺便写一下,常用的通信方式。
(1)、首先根据数据传输的位不同,可以分为:串行通信和并行通信
串行通信:所谓串行通信就是按一条数据线字节为单位,一位一位的传输;
并行通信:可想而知,并行通信就是多条数据线将数据的各个位可同时传输。
特点:
串行通信:通常是点对点的通信,通信线路简单,成本低,适合于长距离传送。
并行通信:特点是传输速度快,适合于短距离传送。
(2)、根据数据的时钟频率(比特流)可以分为:同步通信和异步通信
同步通信:就是数据的传输都在一条时钟线上,要求接收端时钟频率和发送端时钟频率一致,发送端往往发送连续的比特流;
异步通信:通讯双方约定同一个时钟频率或波特率,数据被划分有严格的起始位,数据为,结束标志位;同时不再要求接收端时钟和发送端时钟频率同步,只要波特率在相同的条件下就可以通信,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
特点:
同步通信效率高;异步通信效率较低。
同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
同步通信可用于点对多点;异步通信只适用于点对点。
我们知道了通信方式的大体的分类,那么在串行通信里,也有一定的划分方式:也就是通俗的单工、半双工、全双工通信
单工通信(Simplex Communication):是指消息只能单方向传输的工作方式。
在单工通信中,通信的信道是单向的,发送端与接收端也是固定的,即发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。基于这种情况,数据信号从一端传送到另外一端,信号流是单方向的。
比如:广播站播放广播听众接收信息,而听众无法通过广播频道反馈信息给广播站
半双工通信(Half-duplex Communication)可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。
在这种工作方式下,发送端可以转变为接收端;相应地,接收端也可以转变为发送端。但是在同一个时刻,信息只能在一个方向上传输。因此,也可以将半双工通信理解为一种切换方向的单工通信。
比如:典型的对讲机,只能A说话传递信息,B接收信息;B传递信息时,A只能接收信息。不能同时进行。
全双工通信(Full duplex Communication)是指在通信的任意时刻,线路上存在A到B和B到A的双向信号传输。 全双工通信允许数据同时在两个方向上传输,又称为双向同时通信,**即通信的双方可以同时发送和接收数据。**在全双工方式下,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在两个方向上传送。全双工方式无需进行方向的切换,因此,没有切换操作所产生的时间延迟,这对那些不能有时间延误的交互式应用(例如远程监测和控制系统)十分有利。这种方式要求通讯双方均有发送器和接收器,同时,需要2根数据线传送数据信号。(可能还需要控制线和状态线,以及地线)。
理论上,全双工传输可以提高网络效率,但是实际上仍是配合其他相关设备才有用。
例如:必须选用双绞线的网络缆线才可以全双工传输,而且中间所接的集线器(HUB),也要能全双工传输;最后,所采用的网络操作系统也得支持全双工作业,如此才能真正发挥全双工传输的威力。
首先我们先来看基本的串口通信,因为RS232和RS485通信都属于串口通信的变种;
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。
串口通信采用的是TTL(Transistor-Transistor Logic)电平标准逻辑
通信主要使用3根线完成,分别是地线、发送、接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
然后我们将围绕串口通信展开,方便理解,如下图所示:
那么我们想要建立串口通信也很简单,可以是两个芯片的通信,也可以是芯片和计算机的通信,学过单片机的很清楚典型的串口通信连接方式,如下图所示:
不难看出,通信主要使用3根线完成,分别是地线、发送、接收。其中硬件上的RX和TX(TX是Transmission的缩写,表示数据的发送端,也就是从计算机或其他数据源输出的数据。RX是Reception的缩写,表示数据的接收端,也就是数据的目的地。)需要交叉相连的,其次还需要什么条件呢?
通过上面的通信方式中提到的异步通信的理解,可以知道实现串口通信还需要约定一个波特率,也就是说通讯双方约定同一个时钟频率或波特率,数据被划分有严格的起始位,数据为,结束标志位。
串口异步通信中由于没有时钟信号,所以通讯双方需要约定好波特率,即每个码元的长度,以便对信号进行解码。常见的波特率有4800、9600、115200等。
这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。
可以通俗的理解波特率为:1秒之内能够传输的高低电平个数。
知道了波特率,接下来了解一下,数据是如何被划分为起始位,数据为,结束标志位的呢?
其实这些都是由,IEEE(电气与电子工程师协会)等科学家定义的标准进行约束的,其中以基础的TTL电平标准为例,数据以帧格式标准进行划分,如图所示:
根据数据位的不同组合就能传输不同的数据,当然还有其它帧格式,如图所示:
起始位、停止位:
数据包从起始位开始,到停止位结束。起始信号用逻辑0的数据位表示,停止信号由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。
有效数据:
起始位之后便是传输的主体数据内容了,也称为有效数据,其长度一般被约定为5、6、7或8位长。
奇偶效验位:
由于在通讯过程中易受到外部干扰导致传输数据出现偏差,所以在有效数据之后加上校验位解决。
校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)及无校验(noparity)。
奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个8位长的有效数据为:01101001,此时共有4个“1”,为达到奇校验效果,校验位为“1”,最后传输的是8位有效数据加1位校验位,共9位。
偶校验刚好相反,要求有效数据和校验位的“1”数量为偶数,则此时为达到偶校验效果,校验位为“0”。
而0校验则无论有效数据中是什么数据内容,校验位总是为“0”,1校验校验位总是为“1”。
当知道约定的波特率和帧格式,以常见的9600波特率来说,就是1秒之内能够传输9600个高低电平的变化,接下来就是探讨串口通信的高低电平的范围,串口通信采用的是TTL(Transistor-Transistor Logic)电平标准逻辑,如图所示:
(TTL电平信号规定,+5V等价于逻辑“1”,0V等价于逻辑“0”(采用二进制来表示数据时)。这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。)
由图可知,TTL电平标准最小高电平输出为2.4V,最大低电平是0.4V;而我们通常情况下,串口通信都是认为以高电平为5V,低电平为0V进行通信工作,那么这就使得该电平很容易受到外界信号的干扰,比如,此时突然外界施加一段静电,干扰数据位的某一位突然拉高,所以使得此段的通信距离很短,这里就证明了TTL电平标准逻辑下的通信容易受外界干扰,传输的距离就很短。距离一般在1m之类,比如两个芯片之间或芯片和计算机之间的通信。如图所示:
为此科学家们为了结合实际的应用场景,EIA(美国电子工业联盟)就提出了RS232标准.
RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。
RS-232总线规定了25条线或9条线(常用),包含了两个信号通道,即第一通道(称为主通道)和第二通道(称为副通道)。
利用RS- 232总线可以实现全双工通信,通常使用的是主通道,而副通道使用较少。在一般应用中,使用3条~9条信号线就可以实现全双工通信,采用三条信号线(接收线、发送线和信号线)就能实现简单的全双工通信过程。DB-9针连接头,如图所示:
数据:
TXD(pin 3):串口数据输出(Transmit Data)
RXD(pin 2):串口数据输入(Receive Data)
握手:
RTS(pin 7):发送数据请求(Request to Send)
CTS(pin 8):清除发送(Clear to Send)
DSR(pin 6):数据发送就绪(Data Send Ready)
DCD(pin 1):数据载波检测(Data CarrierDetect)
DTR(pin 4):数据终端就绪(Data Terminal Ready)
地线:
GND(pin 5):地线
其它 :
RI(pin 9):铃声指示
我们前面知道了,串口通信是属于全双工通信,比如单片机之间采用TTL电平容易受到外界干扰,且只能是点对点的通信,如图所示:
那么我们如何将串口通信TTL信号转换为RS232通信呢?
(1)、首先RS232标准是采用的负逻辑传输,规定逻辑“1”的电平为-3V~ -15 V,逻辑“0”的电平为+3 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。
RS -232的噪声容限为2V,接收器将能识别高至+3V的信号作为逻辑“0”,将低到-3 V的信号作为逻辑“1”。
(噪声容限是指:在前一级输出为最坏的情况下,为保证后一级正常工作,所允许的最大噪声幅度;
数电中:噪声容限越大说明容许的噪声越大,电路的抗干扰性越好。)
(2)、然后,知道了RS232的传输方式之后,我们只需要在原本的串口通信的基础上添加一个电平转换芯片,如MAX232,如图所示:
结合RS232负逻辑传输的特性,当我们由TTL给MAX232芯片一个5V电压,则MAX232输出一个-12V;当MAX232收到的是0V,则输出+12V,如图所示:
根据负逻辑特性和上图的理解,所以就得到了,RS232标准通信的高低电平的范围(规定逻辑“1”的电平为-3V~ -15 V,逻辑“0”的电平为+3 V~+15 V),如图所示:
对比一下,TTL标准和RS232标准的电平大小,可得知RS232传输距离更远(一般15m)也同理,当受到外界的脉冲或信号干扰时,冗余更宽从而推理出,抗干扰能力也得到提升,但是相应的速率就会下降了,只要20k(也就是19200的波特率)如图所示:
RS232接口,这种接口可以实现点对点的通信方式,但这种方式不能实现联网功能,随后出现的RS485解决了这个问题。
EIA-485(过去叫做RS-485或者RS485)是隶属于OSI模型物理层的电气特性规定为2线、半双工、平衡传输线多点通信的标准,也可以透过用四条线达到全双工。是由电信行业协会(TIA)及电子工业联盟(EIA)联合发布的标准。
RS-485与RS-232不一样,485数据信号采用的差分传输方式,也称作平衡传输。
RS485和EIA-422一样使用双绞线进行高电压差分平衡传输,多采用屏蔽双绞线传输,这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点,也就是通俗的主从机模式通信。
那么我们如何将串口通信TTL信号转换为RS485通信呢?
与RS232类似只需要在串口通信的基础上添加485转换芯片,就可以使硬件建立通信,如图所示:
485转换芯片的作用:
就是将TTL电平信号转换为差分信号,并且差分信号只需要两根线这里以A和B表示,不需要GND地线,通常是熟知的双绞线的形式传输。如图所示:
(补充:以上的信号转换均是相互的,可由TTL转232/485,也可由482/232转TTL)
差分信号的逻辑关系,当A为高电平,B为低电平时,表示逻辑"0",反之,当A为低电平,B为高电平时,表示逻辑"1",如图所示:
差分信号的优势就是抗干扰能力强,因为输出的信号是由A、B两根线共同决定的,A、B差值表示逻辑”0/1“,而且采用双绞线的方式缠绕在一起,即使受到了干扰也是两根线同时受到干扰,这样它们的电压差值也可以基本保持不变。(笔记写到这,真的想感叹一下,这就是差分信号的强大之处,科学家yyds!见笑了,哈哈。)
如图所示:
正是有了这项特性,因此RS485的通信距离,也更加的远,可达1200m,而且最大传输速率可达到10Mbps,如图所示:
此外RS485还有另一个特性,就是概念里提到的,这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点,也就是通俗的主从机模式通信。
而串口通信和RS232接口,只能实现点对点的通信方式,不能实现组网功能,**RS485则可以实现一主多从的组网通讯。**也就是可以与多台设备通信。
无论是串口通信还是RS232或者RS485通信,它们均只定义了物理层,区分各自的电平标准以及应用场景,对我们的编程来说原理都是一样的,几乎没有影响。只要掌握了简单的串口通信,接触RS232、RS422、RS485等都能很快上手。
最后大概总结一下它们之间的区别:
TTL | RS232 | RS485 | |
---|---|---|---|
传输规范 | 计算机处理器控制的设备内部各部分之间通信的标准技术 | 异步串口协议 | 半双工同步协议 |
传输距离 | 1m | 15m | 1200m |
传输速率 | 常见波特率范围 | 可达2Mbps(19200) | 可达10Mbps |
电气特性 | 0V ~ 5V | 逻辑 1:-15V ~ -3V 逻辑0:+3V ~ +15V | 逻辑 0:-6V ~ -2V 逻辑 1:+2V ~ +6V |
网络拓扑结构 | 单向通信或点对点连接 | 单向通信或点对点连接 | 多个设备在同一条总线上进行主从通信 |
1.百度百科
2.bilibili5分钟看懂!串口RS232 RS485最本质的区别!