串口通信协议简介—学习笔记
文章目录
一、串口、COM口、UART口, TTL、RS-232、RS-485区别详解
首先,串口、UART口、COM口、USB口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)。
1、物理接口形式
- 串口:串口是一个泛称,UART、TTL、RS232、RS485都遵循类似的通信时序协议,因此都被通称为串口。
- UART接口:通用异步收发器(Universal Asynchronous Receiver/Transmitter),UART是串口收发的逻辑电路,这部分可以独立成芯片,也可以作为模块嵌入到其他芯片里,单片机、SOC、PC里都会有UART模块。
- COM口:COM口即串行通讯端口,简称串口。这里区别于USB的“通用串行总线”和硬盘的“SATA”。
一般我们见到的是两种物理标准:D型9针插头,和 4针杜邦头两种。
- USB口:通用串行总线,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和信号电平都和串口完全不同,因此和串口没有任何关系。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。
注:(USB转串口模块,就是USB接口的UART模块)
2、电平标准
2.1 TTL
TTL指双极型三极管逻辑电路,市面上很多**“USB转TTL”模块,实际上是“USB转TTL电平的串口”**模块。这种信号0对应0V,1对应3.3V或者5V。
与单片机、SOC的IO电平兼容。不过实际也不一定是TTL电平,因为现在大部分数字逻辑都是CMOS工艺做的,只是沿用了TTL的说法。
我们进行串口通信的时候 从单片机直接出来的基本是都是TTL 电平。
TTL电平:全双工(逻辑1: 2.4V–5V 逻辑0: 0V–0.5V)
TTL用于两个MCU间通信,硬件框图如下:
‘0’和‘1’表示:
2.2 RS232
是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应0,-3V~-15V对应1。
RS232 的逻辑电平和TTL 不一样但是协议一样。
RS-232电平:全双工(逻辑1:-15V–5V 逻辑0:+3V–+15V)
RS-232用于MCU与PC机之间通信,硬件框图如下:
‘0’和‘1’表示:
2.3 RS485
RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比RS232强很多。
两线压差为-(26)V表示1,两线压差为+(26)V表示0
差分负逻辑
RS-485:半双工、(逻辑0:+2V–+6V 逻辑1: -6V—2V)这里的电平指AB两线间的电压差。
硬件框图如下:
‘0’和‘1’表示:(差分信号)
2.4 TTL标准及RS-232标准
我们知道常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0;
而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑1,+15V表示逻辑0。
使用RS232与TTL电平校准表示同一个信号时的对比见图:
因为控制器一般使用TTL电平标准,所以常常会使用MA3232芯片对TTL及RS-232电平的信号进行互相转换。
2.5 补充
在旧式的台式计算机中一般会有RS-232标准的COM口(也称DB9接口)
在目前的其它工业控制使用的串口通讯中,一般只使用RXD、TXD以及GND三条信号线,直接传输数据信号。而RTS、CTS、DSR、DTR及DCD信号都被裁剪掉了
3、几种常见、常用的硬件接口
1. D型9针串口
一般只接出RXD TXD两针,外加GND。
这种接口的协议只有两种:RS-232和RS-485。
2. USB转TTL串口
CP2102芯片、PL2303芯片
3. USB转RS-232串口
二、串口通信百度百科
串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。
在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
三、协议层
串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据
串口数据包的基本组成图如下:
1. 波特率
主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号(如前面讲解的DB9接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图 中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200等。
2. 通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。
3. 有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7或8位长。
4. 数据校验
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity),它们介绍如下:
-
奇校验要求有效数据和校验位中"1"的个数为奇数,比如一个8位长的有效数据为:01101001,此时总共有4个"1",为达到奇校验效果,校验位为"1",最后传输的数据将是8位的有效数据加上1位的校验位总共9位。
-
偶校验与奇校验要求刚好相反,要求帧数据和校验位中"1"的个数为偶数,比如数据帧:11001010,此时数据帧"1"的个数为4个,所以偶校验位为"0"。
-
0校验是不管有效数据中的内容是什么,校验位总为"0",1校验是校验位总为"1"。
-
在无校验的情况下,数据包中不包含校验位。
求刚好相反,要求帧数据和校验位中"1"的个数为偶数,比如数据帧:11001010,此时数据帧"1"的个数为4个,所以偶校验位为"0"。 -
0校验是不管有效数据中的内容是什么,校验位总为"0",1校验是校验位总为"1"。
-
在无校验的情况下,数据包中不包含校验位。