调试时总是会遇到各种各样的接口,串口,UART,USB,COM,TTL,通信协议,数据帧,波特率,各种各样的转换板,似懂非懂,在此对UART调试碰到的相关概念做一个梳理。
相关基础概念
串行:同一时刻只能传输一个数据位的数据,比并行通信的传输距离远,抗干扰能力强
并行:同一时刻可以传输多个数据位的数据
串口、COM口、UART口它是指一种物理接口(硬件实体)。它一般有9针和25针的,即DB9和DB25。以针引出来的叫公头,孔引出来的叫母头。TTL、RS-232、RS-485则是逻辑电平0和1的不同表示标准。在板卡调试时,可以直接使用电脑自带串口,也可利用USB经过MOXA卡(通用多串口转换器)转换成各种标准的串口进行使用,当然后者使用范围更广。
串口:串口是一个泛称,UART、TTL、RS232、RS485都遵循类似的通信时序协议,因此都被通称为串口。
UART接口:通用异步收发器(Universal Asynchronous Receiver/Transmitter),UART是串口收发的逻辑电路,这部分可以独立成芯片,也可以作为模块嵌入到其他芯片里,单片机、SOC、PC里都会有UART模块。
COM口:特指台式计算机或一些电子设备上的D-SUB外形(一种连接器结构,VGA接口的连接器也是D-SUB)的串行通信口,应用了串口通信时序和RS232的逻辑电平。
端口号:指的是COM1,COM2,COM3等,查看计算机端口属性,一个COM,包括256个端口号,你可以扩展COM增加端口号。
USB口:通用串行总线,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和信号电平都和串口完全不同,因此和串口没有任何关系。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。(USB转串口模块,就是USB接口的UART模块)
同步:带时钟线,双方按照约定好的时钟边沿进行数据的加载、移位、发送
异步:不用时钟线进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,某些通讯中还 需要双方约定数据的传输速率(波特率) ,以便更好地同步。
单工:一根线,单方向通信,代码写完后就确定了是A传给B,还是B传给A;
半双工:一根线,双向传输,但同一时刻要么A传B,要么B传A;
全双工:两根线,双向传输,可同时发送接收,A传B的同时B也可以传A
奇校验:数据流+校验位的1的个数是奇数
偶校验:数据流+校验位的1的个数是偶数
波特率:数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。常见的波特率9600bps、115200bps等等,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。
串行通信:是指利用一条传输线将数据一位位地顺序传送,也可以用两个信号线组成全双工通信。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,对数据传输速度要求不高的场合,如嵌入式、工业控制等领域中。
异步通信:以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。通俗说是两个uart设备之间通信的时候不需要时钟线,这时候就需要在两个uart设备上指定相同的传输速率,以及空闲位、起始位、校验位、结束位,也就是遵循相同的协议。
单端传输:指在发送或接收过程中,用信号线对地线的电压值来表示逻辑“0”和“1”。
差分传输:使用两根信号线来传输一路信号,这两根信号线上传输的信号幅值相等,相位相差 180 度(极性相反), 信号接收端比较这两个电压的差值来判断发送端发送的逻辑状态,逻辑“0”和“1”,
常见的串行通信方式有:usart、iic、spi等,本文着重介绍UART;
UART
串行通信分为两种方式:
同步串行通信USART(Universal Synchronous Asynchronous Receiver and Transmitter):需要通信双方在同一时钟的控制下,同步传输数据;
异步串行通信UART(Universal Asynchronous Receiver and Transmitter):通信双方使用各自的时钟控制数据的发送和接收过程
二者区别和联系
通用同步-异步接收发射器)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。
虽然USART既可以同步又可以异步,但是常见的最常用的就是使用功能的异步功能,如果作为异步通信就是UART(Universal Asynchronous Receiver and Transmitter),可以说,UART是USART的子集,但是同步通信相比异步通信多了一根时钟同步信号线。
在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,见下图。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。
在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,见下图,某些通讯中还需要双方约定数据的传输速率,以便更好地同步。
在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。USART以同步方式通信需要时钟同步信号,但不需要额外的起始、停止位,可以实现更快的传输速度。但USART控制起来更复杂。
当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如GD32的USART可以提供时钟支持ISO7816的智能卡接口。
UART通信协议
UART协议帧
在 UART中,传输模式为数据包形式。UART 在发送 / 接收过程中的一帧数据由 4 部分组成:
起始位:标志着一帧数据的开始
数据位:一帧数据中的有效数据
停止位:标志着一帧数据的结束
奇偶检验位:校验位分为奇校验和偶校验,用于检验数据在传输过程中是否出错;
①奇校验时,发送方应使数据位中 1 的个数与校验位中 1 的个数之和为奇数;接收方在接收数据时,对 1 的个数进行检查,若不为奇数,则说明数据在传输过程中出了差错。
②偶校验则检查 1 的个数是否为偶数。
空闲位:UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平,表示当前线路上没有数据传输。
串口外设的架构图看起来十分复杂,实际上对于软件开发人员来说,我们只需要大概了解串口发送的过程即可。从下至上,我们看到串口外设主要由三个部分组成,分别是波特率控制、收发控制和数据存储转移。
UART 通信过程中的数据格式及传输速率是可设置的,为了正确的通信,收发双方应约定并遵循同样的设置。数据位可选择为 5、6、7、8 位,其中 8 位数据位是最常用的,在实际应用中一般都选择 8 位数据位。校验位可选择奇校验、偶校验或者无校验位;停止位可选择 1 位(默认),1.5 或 2 位。
串口通信的速率用波特率表示,它表示每秒传输二进制数据的位数,单位是 bps(位/秒),常用的波特率有 9600、19200、38400、57600 以及 115200 等。
串口通信接口标准
在设置好数据格式及传输速率之后,UART 负责完成数据的串并转换,而信号的传输则由外部驱动电路实现。
串口通信接口标准,是一种用来进行串行通信的物理接口标准,它只表征电气特性,而不涉及到接插件,电缆和协议等。我们平常见到的RS232,RS422,RS485就属于物理接口标准。
通信接口的作用:
实现数据格式化,异步通信方式下,自动生成起止式的帧数据格式。在同步方式下,接口要在待传送的数据块前加上同步字符。
实现串并转化。计算机处理数据是并行数据。
控制传输速率
错误检测
电平转换
不同的接口标准用不同的电平表示,首先介绍最常见的两种电平,TTL电平和CMOS电平。
TTL电平:晶体管晶体管逻辑电平。一般0对应0V,1对应3.3V或者5V。与单片机、SOC的IO电平兼容。进行串口通信的时候 从单片机直接出来的基本是都 是 TTL 电平。
电气特性
输出:高电平>=2.4V,低电平<=0.4V;
输入:高电平>=2.0V,低电平<=0.8V。
TTL用于两个MCU间通信方式如下
CMOS电平:mos电平,现在大部分数字逻辑都是CMOS工艺做的,沿用了TTL的说法
电气特性
输出:高电平=Vcc,低电平=GND(Vcc为电源电压);
输入:高电平>=0.7Vcc,低电平<=0.2Vcc。
如果CMOS电路的供电电压Vcc为5V,那么:
输出高电平应大于4.5V。
输出低电平应小于0.5V。
输入高电平应大于3.5V。
输入低电平应小于1.5V。
CMOS电路可直接驱动TTL电路,TTL不可以直接驱动CMOS,一般得接上拉电阻。
为了远距离传输,在以上两种电平基础上衍生出了RS232电平,因为其电平电压高,所以相比之下,受干扰小,可传输的更远。尽管如此还不能满足人们对远距离传输的要求,所以进一步衍生出RS422,RS485.
RS-232
RS-232 接口标准出现较早,信号采用负逻辑电平、单端传输方式工作。通过一根信号线发送,一根信号线接收,加上一根地线,RS-232 可实现全双工通信。由于单端传输方式抗干扰能力差,导致 RS-232 标准通信距离短(小于 15 米),数据传输速率低等问题。另外 RS-232 仅支持一对一通信,存在无法实现多个设备互联的缺点。
电气特性
逻辑1:-3V~-15V
逻辑0:+3~+15V
特点:
接口的信号电平值较高,易损坏接口电路的芯片
与TTL电平不兼容,故需使用电平转换电路方可与TTL电路连接。
传输速率较低,在异步传输时,波特率为20Kbps左右。
接口使用两根线共地传输,易产生共模干扰,故抗噪声干扰差。
传输距离有限,最大传输距离15米左右。
RS-422
RS-422 由 RS-232 发展而来,它是为弥补 RS-232 之不足而提出的。RS-422 采用差分传输(又称平衡传输)方式,将最大传输速率提高到 10Mbps;当传输速率在 100kbps 以下时,传输距离可达 1200 米。由于采用差分传输方式,RS-422 需要 4 根信号线来实现全双工通信,两根用于发送、两根用于接收,一般会再加上一根地线,电平低,可与TTL兼容。RS-422 允许在一条传输总线上连接最多 10 个接收器,从而实现单个设备发送,多个设备接收的功能。
电气特性
发送端:
逻辑1:AB电压差为+2V~+6V
逻辑0:AB电压差为-2~-6V
接收端:
逻辑1:A-B>200mV
逻辑0:A-B<-200mV
RS-485
为扩展应用范围,在 RS-422 基础上又制定了 RS-485 标准。RS-485 同样采用差分传输方式,但是 RS-485 只有 2 根信号线,由发送和接收共用,因此发送和接收不能同时进行,只能实现半双工通信。RS-485 增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,各设备通过使能信号控制发送和接收过程。
电气特性
发送端:
逻辑1:AB间电压差+2V~+6V
逻辑0:AB间电压差-2~-6V
接收端:
逻辑1:A-B>200mV
逻辑0:A-B<-200mV
三种通信协议的区别
在传输距离较短时(不超过 15m),RS232 是串行通信最常用的接口标准。
嵌入式里面说的串口,一般是指UART口,UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V),高电平为1(3.3V或以上)。
UART通信步骤
1.数据从数据总线到UART发送器。
2.发送 UART 将起始位、奇偶校验位和停止位添加到数据帧。
3.从起始位到结束位,整个数据包以串行方式从发送器送至接收器 。接收 UART 以预配置的波特率对数据线进行采样。
4.接收器丢弃数据帧中的起始位,奇偶校验位和停止位。
5.接收器将串行数据转换回并行数据,并将其传输到接收端的数据总线。