在之前的文章中小编介绍了什么是CAN总线,包括CAN总线的数据格式和通信特点等方面的内容,今天将分享串口通信相关知识内容。CAN总线、串口通信都属于比较常见的有线传输方式。
一、什么是串口通信?
串口通信(Serial Communication),是指外设和计算机之间通过数据信号线、地线等按位进行传输数据的一种通信方式。
特点:数据位的传输按位顺序执行,最少只需一根传输线即可完成;成本低但传输速度慢。串口通信的距离可以从几米到几千米。
串口通信的数据格式
一个完整的串口数据格式包括起始位、数据位、校验位、停止位、波特率等几个参数。
起始位:起始位必须是持续一个bit时间的逻辑0电平,它标志传输一个字符的开始。接收端可通过起始位使自身时钟与发送端的数据同步。
数据位:数据位在起始位的后面,是串口通信的有效信息。数据位的位数可以由通信双方共同约定,通常为8个bit。传输数据时先传输字符的低位,后传输字符的高位。
奇偶校验位:奇偶校验位仅占一位,用于进行奇校验或偶校验。该位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位。
停止位:停止位可以是1位、1.5位或2位。必须是逻辑1电平,它标志传输一个字符的结束。
空闲位:空闲位是指从一个字符的停止位结束到下一个字符的起始位开始,表示传输线路处于空闲状态,串口空闲时处于高电平。
波特率:波特率是串口通信中最常用的重要参数。它指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。例如波特率为9600,则说明每秒钟可以传输9600个二进制位,即传输一个二进制位需要的时间为1/9600秒。
电平标准
根据通讯使用的电平标准不同,串口通讯可分为TTL 标准及RS-232 标准,见下表。
我们知道常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0;而RS232为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V 表示逻辑1,+15V 表示逻辑0。
因为控制器一般使用TTL电平标准,所以常常会使用MA3232芯片对TTL及RS-232电平的信号进行互相转换。
二、主要的串口通信方式
先简单了解下什么是单双工通讯。
单工:数据传输只支持数据在一个方向上传输。
半双工:允许数据在两个方向上传输,但某一时刻只允许数据在一个方向上传输,实际上是一种切换方向的单工通信,不需要独立的接收端和发送端,两者可合并为一个端口。
全双工:允许数据同时在两个方向上传输,因此全双工通信是两个单工方式的结合,需要独立的接收端和发送端。
串口通信主要分为RS232、RS422、RS485三种通信方式。
RS232
RS-232是IBM-PC及其兼容机上的串行连接标准。全双工通信,需要地线、发送线和接收线三条线。RS-232只限于PC串口和设备间点对点的通信,抗干扰能力较差,最远通信距离是50英尺。RS-232可用于许多用途,比如连接鼠标、打印机、工业仪器仪表,也用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。
RS422
RS-422(EIA RS-422-A Standard)是Apple的Macintosh计算机的串口连接标准。采用全双工通讯方式,有4根信号线,收与发是分开的,可以同时进行收和发。RS-422接口的最大传输距离为4000英尺(约1219米),最大传输速率为10Mb/s。
RS-422使用差分信号以及非平衡参考地的信号。差分传输使用两根线发送和接收信号,对比RS-232,它能更好地抗噪声和有更远的传输距离,在工业环境中尤为适用。
RS485
RS-485采用半双工通讯方式。它增加了设备的个数,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。RS-485具有出色抗噪和多设备能力,RS-485可用超过4000英尺的线进行串行通行。RS485采用平衡发送和差分接收,具有良好的抗干扰能力,信号能传输上千米。RS-422设备可以被RS-485控制。
三、串口通信问题排查
我们排查串口通信问题的方向基本为以下几部分,如图所示。
1.检查中间件
串口通信必然存在发送端和接收端,且两者通过中间件(例如导线),遇到问题,首先应该保证导线连接正常。如果这一部分没有确定,直接排查其他方向,很可能在做无用功。
2.排查硬件层
通过逻辑分析仪、示波器等仪器来判断发送端、接收端在发送、接收、空闲时的引脚波形是否正常。串口空闲时为高电平,有数据时才会有电平变化。同时需要确定电压是否正常。波形测量的位置先从最终点开始测量,然后依次排查中间部分的探测点,来判断问题位置。
如果发现波形变形、失真、电压不正常等情况,请让硬件工程师协助进行排查。在其起始点可以看到波形,但是终点看不到,需要使用万用表来确定是否引脚存在虚焊。
3.检查串口驱动层
如果排查了硬件无问题以后,但是发送端串口没有波形,这时候就需要检查串口驱动是否配置成功了。可以先将发送端的Tx、Rx引脚短接,进行回环测试。最好先用一个简单例程进行测试,尽量排除多个变量的影响。排查时需要特别注意的是,不能只看代码逻辑,要注重实际调试,善于利用软件调试窗口来观察相关寄存器的值。
4.应用协议层
通过以上方向的排查,可以证明自发自收没有问题。接下来就验证双方是否可以正常通信。应用协议层可能存在的问题有:
发送端与接收端数据协议有问题,例如CRC、帧头帧尾校验、解析数据包等方面。
发送端与接收端串口配置的参数:波特率、校验位不一致,导致无法通信。
另外大家也需要注意下面这几点:
由于信号容易被干扰,建议使用带屏蔽线,并且接线一定要严格,需要接地的最好接地。有些485通信,还需要考虑接上终端电阻来匹配。如果是RS232通信,尽量不要让线太长。
因为很多设备通过外部晶振或者内部时钟计算的波特率都是存在误差的。这样的话一旦报文过长,会导致误差累积,进而出现串口识别乱码或者收不到的情况。
在一些可能会存在干扰的地方,可以考虑使用奇校验或者偶校验,这样可以将错误的报文过滤掉或者尽量使用一些数据校验协议,防止数据出错。
领取专属 10元无门槛券
私享最新 技术干货