从原理上带你彻底弄懂串口通信(有图有真相)
Posted Neutionwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从原理上带你彻底弄懂串口通信(有图有真相)相关的知识,希望对你有一定的参考价值。
1 并行与串行通信
机器的通信方式有两种,分别是并行通信与串行通信。
并行通信:并行通信是指多比特数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错。
串行通信:串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。
拿汽车通道来说,并行通信就是多车道,多辆车一起行驶,而串行通信就是单车道,只能一辆一辆车通过。
以下是两者之间特性的对比:
2 异步与同步串行通信
串行通信有两种,分别是异步串行通信与同步串行通信。
异步串行通信:异步串行通信是指通信双方以一个字符(包括特定附加位)作为数据传输单位且发送方传送字符的间隔时间不一定,具有不规则数据段传送特性的串行数据传输。
同步串行通信:同步串行通信是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这就保证了通信双方在发送和接收数据时具有完全一致的定时关系。
两种串行通信不同就只有时间,在发送字符时,异步可以是不同时间间隔发送,但同步只能以固定的时间间隔发送。
3 单工、半双工与全双工串行通信
串行通信制式有单工串行通信,半双工串行通信,全双工串行通信三种。
单工串行通信:单工串行通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息,数据信号仅从一端传送到另一端,即信息流是单方向的。
半双工串行通信:半双工串行数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。例如,在一个局域网上使用具有半双工传输的技术,一个工作站可以在线上发送数据,然后立即在线上接收数据,这些数据来自数据刚刚传输的方向。像全双工传输一样,半双工包含一个双向线路(线路可以在两个方向上传递数据)。
全双工串行通信:全双工串行通信是指在同一时刻信息可以进行双向传输,和打电话一样,说的同时也能听,边说边听。这种发射机和接收机分别在两个不同的频率上(两个频率差有一定要求)能同时进行工作的双工机也称为异频双工机。
三种通信制式很容易理解,对照上图看,单工串行通信不就是单方面通信,只能发出指令或接收指令。半双工串行通信就是能接收又能发送,但是不能同时进行。全双工串行通信就最厉害,可以同时发送和接收指令。
4 比特率与波特率
衡量通讯性能的一个非常重要的参数就是通讯速率,通常以比特率(Bitrate) 来表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。
容易与比特率混淆的概念是 “波特率”(Baudrate),它表示每秒钟传输了多少个码元。而码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。
如常见的通讯传输中,用0V 表示数字0,5V 表示数字1,那么一个码元可以表示两种状态0 和1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有0V、2V、4V 以及6V 分别表示二进制数00、01、10、11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。
因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示比特率,虽然严格来说没什么错误,但希望我们还是了解它们的区别。
5 TTL与RS-232电平标准
根据通讯使用的电平标准不同,串口通讯可分为TTL 标准及RS-232 标准,电平标准如下表:
可见RS-232使用负逻辑电平,规定(-3V ~ -25V)为逻辑“1”,规定(+3V ~ +25V)为逻辑“0”,(-3V ~ +3V)是未定义的过渡区。
我们知道常见的电子电路中常使用TTL 的电平标准,理想状态下,使用5V 表示二进制逻辑“1”,使用0V 表示逻辑“0”;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V 表示逻辑“1”,+15V 表示逻辑“0”。
6 RS-232信号线与DB9接口
在最初的应用中,RS-232 串口标准常用于计算机、路由与调制调解器(MODEN,俗称“猫”)之间的通讯 ,在这种通讯系统中,设备被分为数据终端设备DTE(计算机、路由)和数据通讯设备DCE(调制调解器)。我们以这种通讯模型讲解它们的信号线连接方式及各个信号线的作用。
在旧式的台式计算机中一般会有RS-232 标准的COM口(也称DB9 接口)。
我们看到接线口以针式引出信号线的称为公头,以孔式引出信号线的称为母头。在计算机中一般引出公头接口,而在调制调解器设备中引出的一般为母头,使用上图中的串口线即可把它与计算机连接起来。通讯时,串口线中传输的信号就是使用前面讲解的RS-232 标准调制的。
对于调制解调方面的内容,有兴趣可以查找高频电子线路与通信方面的相关资料,这里不再赘述。
DB9 接口中的公头及母头的各个引脚的标准信号线接法:
每个口的具体作用如下表:
上表中的是计算机端的DB9 公头标准接法,由于两个通讯设备之间的收发信号(RXD与TXD)应交叉相连,所以调制调解器端的DB9 母头的收发信号接法一般与公头的相反,两个设备之间连接时,只要使用“直通型”的串口线连接起来即可。
串口线中的RTS、CTS、DSR、DTR 及DCD 信号,使用逻辑 “1” 表示信号有效,逻辑“0”表示信号无效。例如,当计算机端控制DTR 信号线表示为逻辑“1” 时,它是为了告知远端的调制调解器,本机已准备好接收数据,“0” 则表示还没准备就绪。
在目前的其它工业控制使用的串口通信中,一般只使用RXD、TXD 以及GND 三条信号线,直接传输数据信号,而RTS、CTS、DSR、DTR 及DCD 信号都被裁剪掉了,这主要是考虑到近程通信与远程通信问题。
7 数据包
串口通讯的数据包由发送设备通过自身的TXD 接口传输到接收设备的RXD 接口。在串口通讯协议中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。
在串行异步通讯中,由于没有时钟信号(如前面讲解的DB9
接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,上图中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200 等。
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑“0” 的数据位表示,而数据包的停止信号可由0.5、1、1.5 或2 个逻辑“1” 的数据位表示,只要双方约定一致即可。
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7 或8 位长。
在串行通讯所发送数据的最后一位,用来粗略的检验数据在传输过程中是否有出错。校验一般有以下几种:
- 奇校验:让主体数据加上校验位中的“1”的个数保持为奇数。
- 偶校验:让主体数据加上校验位中的“1”的个数保持为偶数。
- 0 校验:无论主体数据是什么,校验位保持为0。
- 1 校验:无论主体数据是什么,校验位保持为1。
以上是关于从原理上带你彻底弄懂串口通信(有图有真相)的主要内容,如果未能解决你的问题,请参考以下文章