注:串口通信包括同步(UART)和异步(USART),开发中常用的为UART,所以本次也侧重介绍UART。
串口通信是一种设备非常常用的串行通信方式,因为他简单便捷,因此目前大部分电子产品都支持该通讯方式。产品开发中,工程师也常使用串口用来调试。
物理层
物理层负责数据的实际传输,即通过电缆、无线等媒介发送和接收比特流。
串口通信的物理层有很多标准及变种,通常使用RS-232、RS-485、TTL等标准。
我们拿RS-232举例
两个通讯设备的”D9接口“之间通过串口信号线建立起链接,串口信号线中使用”RS-232标准“传输数据信号。但是由于RS-232电平标准不能直接被控制器识别,所以这些信号会经过”电平转换芯片“转换成控制器能是写的”TTL标准“的电平信号。
电平标准
根据通讯使用的电平标准不同,串口通讯可以分为TTL标准及RS-232标准
通讯标准 | 电平标准(发送端) |
5V TTL | 逻辑1:2.4V-5V |
逻辑0:0~0.5V | |
RS-232 | 逻辑1:-15V~-3V |
逻辑0:+3V~+15V |
常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,0V表示逻辑0;而为了增加串口通信的远距离传输及抗干扰能力,RS-232使用-15V为逻辑0,15V为逻辑1。
因为一般的控制器常采用TTL标准,所以需要”电平转换芯片“,常见的有MA3232对TTL与RS-232的信号进行转换。
RS-232信号线
我们常把RS232标准的接口称为COM口,也称为DB9接口。
- DCD:载波检测,用于DTE告知对方,本机是否收到对方的载波信号
- RXD:接收数据
- TXD:发送数据
- DTR:数据终端(DTE)就绪,用于DTE告知对方,本机是否准备好
- GND:地线
- DSR:数据设备就绪,用于DCR告知对方,本设备处于就绪状态
- RTS:请求发送,DTE请求DCR本设备向DCE端发送数据
- CTS:允许发送,DCE回复对方的RTS请求
- RI:响铃指示,表示DCE端与线路已连通
上述为DB9标准接法。
在目前的其它工业控制使用的串口通讯中,一般只使用RXD、TXD以及GND三条信号线,直接传输数据信号,而RTS、CTS、DSR、DTR及DCD信号都被裁剪掉了。
协议层
串口通信的数据包有发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中,规定了数据包的内容,它由起始位、数据位、校验位、停止位组成;通讯双方的数据包格式要约定一致才能正常收发数据。
波特率
以串口异步通信为例(UART),异步通信中没有时钟信号(与CAN类似)是两个设置之间约定好波特率,及每个码元的长度。常见的波特率为9600、115200、4800等。
通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号有一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5、2个逻辑1的数据为表示。
有效数据
在数据包的起始位之后紧跟着的就是传输的主体数据内容,也成为有效数据,一般为5、6、7、8位。
数据校验
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程中加上校验位来解决这个问题。常见的校验位有:奇偶校验、0校验、1校验或者无校验。
虽然本文章介绍了RS-232,但是USART/UART出书的是TTL电平信号,如果需要使用RS-232标准的信号需要加MAX3232等”电平转换“芯片。