UART协议就应该这么理解

Posted Wireless_Link

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UART协议就应该这么理解相关的知识,希望对你有一定的参考价值。

  零. 声明


本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对ESP-IDF开发有一个总体的认识,比我们后续学习打下基础!

第二篇:ESP32-IDF外设驱动介绍,主要会根据esp-idf现有的driver,提供各个外设的驱动,比如LED,OLED,SPI LCD,TOUCH,红外,Codec ic等等,在这一篇中,我们不仅仅来做外设驱动,还会对常用的外设总线做一个介绍,让大家知其然又知其所以然!

第三篇:目前比较火热的GUI LVGL介绍,主要会设计LVGL7.1,LVGL8的移植介绍,并且也会介绍各个组件,知道原理后,最后,我们会推出一款组态软件来构建我们的GUI,来提升我们的效率!

第四篇:ESP32-蓝牙,熟悉我的,应该都知道,我即使从事蓝牙协议栈的开发的,所以这个是我们独有的优势,在这一篇章,我们会提供不仅仅是蓝牙应用方法的知识,也会应用结合蓝牙底层协议栈的理论,让你彻底从上到下打通蓝牙任督二脉!

第五篇:Wi-Fi介绍,熟悉我的,应该也知道,我们也做过一款sdio wifi的驱动教程板子,所以在wifi这方面我们也是有独有的优势,在这一篇章,我们同样不仅仅提供Wi-Fi应用方面的知识,也会结合底层理论,让你对Wi-Fi有一个清晰的认知!

另外,我们的教程包括但是不局限于以上篇章,为了给你一个更好的导航,以下信息尤其重要,请详细查看!!

------------------------------------------------------------------------------------------------------------------------------------------

购买开发板(点击我)

文档目录(点击我)

Github代码仓库(点击我)

蓝牙交流扣扣群:539357317

微信公众号↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

------------------------------------------------------------------------------------------------------------------------------------------

一. UART概念

UART:Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置,UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工和接收!

1.并且/串行的概念

首先我们来说下并行跟串行的概念:按数据传送的方式,通讯可分为串行通讯与并行通讯,串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。而并行通讯一般是指使用 8、 16、 32 及 64 根或更多的数据线进行传输的通讯方式,并行通讯就像多个车道的公路,可以同时传输多个数据位的数据,而串行通讯,而串行通讯就像单个车道的公路,同一时刻只能传输一个数据位的数据。

通过上图我们可以看出,并行就是在特定个数的数组总线个数上同时发送数据,串行就是在一根数据总线上串行发送数据!所以我们很容易能想到串行并且的优缺点,对比如下:

2.单工/双工的概念

数据通信中,数据在线路上的传送方式可以分为单工通信、半双工通信和全双工通信三种。

单工通信:是指消息只能单方向传输的工作方式。例如遥控、遥测(一部分),就是单工通信方式。单工通信信道是单向信道,发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息,数据信号仅从一端传送到另一端,即信息流是单方向的。通信双方采用“按——讲”(PushToTalk,PTT)单工通信属于点到点的通信。根据收发频率的异同,单工通信可分为同频通信和异频通信。如图所示:

半双工通信:是指数据可以沿两个方向传送,但同一时刻一个信道只允许单方向传送,因此又被称为双向交替通信。(信息在两点之间能够在两个方向上进行发送,但不能同时发送的工作方式。)半双工方式要求收发两端都有发送装置和接收装置。由于这种方式要频繁变换信道方向,故效率低,但可以节约传输线路。半双工方式适用于终端与终端之间的会话式通信。方向的转变由软件控制的电子开关来控制的。例如:无线对讲机就是一种半双工设备,在同一时间内只允许一方讲话。如图所示:

全双工:是指在通信的任意时刻,线路上可以同时存在A到B和B到A的双向信号传输。在全双工方式下,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在两个方向上传送。全双工方式无需进行方向的切换,因此,没有切换操作所产生的时间延迟,这对那些不能有时间延误的交互式应用(例如远程监测和控制系统)十分有利。比如,电话机则是一种全双工设备,其通话双方可以同时进行对话。

3.数据格式

说到数据格式,我们来介绍下UART的常用配置需要用到的数据格式

① 起始位

开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。因为空闲位一直是高电平所以开始第一次通讯时先发送一个明显区别于空闲状态的信号即为低电平。

② 数据位

起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。

③ 校验位

数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式:

  • 无校验(no parity)
  • 奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。以发送字符:10101010为例。

  • 偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。即:如果传输字节中1的个数是偶数,则校验位为“0”,奇数相反。还是以发送字符:10101010为例。

④ 停止位

数据结束标志,可以是1位,1.5位,2位的高电平。

⑤ 空闲位

UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平

4.数据速率

通常我们是用串口工具或者写UART驱动或者应用的时候,无可避免的要配置串口速率,在蓝牙中常用的有115200,921600,3M等。

我们一般用波特率(baud rate)这个名词来代表UART的数据速率,单位是bps(bit per second),也就是每秒传输的bit的个数!

在这里我们提几个QA来更深刻的理解下!

Q1:那我们真实的传输user数据速率是多少呢?

A1:这个要取决于数据位/校验位/停止位各自配置了多少,比如我们数据位配置为8,校验位无,停止位位1,那么速率应该是115200/(1+8+1)=11520 Byte/S

Q2:为什么UART没有时钟,是怎么采集数据的,为什么双方可以互相识别

A2:也是取决于波特率的,假设波特率是115200,那么传输1个bit的时间是1/115200,双方各自维护一个时钟,在开始位的时候每隔1/11520时间点内采集一个数据,这样大家就互相认识对方发送的数据了!

Q3:为什么每个user data都要经历一遍开始位,校验位,停止位这个过程呢?

A3:这个我个人觉得是因为因为双方没有一个基准时钟,各自维护自己的时钟,那么时钟的精准度肯定不是那么精确的匹配到,哪怕有很小个ppm的误差,那么数据量一大,数据量就错乱了,导致后续的全部数据都错乱,而发送少的数据位就经历一遍这个过程,即使时钟有ppm,总能匹配上,而且下次start后又重新开始计时,那么就避免了这个问题!

5.流控

一般UART传输数据只是通过TX/RX就行了,但是如果要硬件流控,那么就需要CTS/RTS,一般在蓝牙H4 transport需要硬件流控的,如图:

整个接线如图:

我们来说明下RTS,CTS的概念以及工作原理:

RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。

CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。

设备A给设备B发送数据工作模型如图所示:

如果设备A要给设备B发送数据,那么设备A应该先检测Local CTS(也就是Remote RTS)是否位低电平,如果是低电平,代表可以像Remote发送数据,然后再发送数据!

设备A接收来自设备B的数据工作模型如图所示:

如果设备A要接收B的数据,那么设备A应该先拉低Local RTS代表我可以接收数据啦,然后设备B发送数据给A

大概说明完了UART的概念,你如果细想协议,那么可能会发现UART有弊端或者定义不完善的地方,如下:

  • 接口不统一,协议只是规定的线的名称,但是没有一个接口标准,比如USB的type A/B/C,Mini/Micro接口等。
  • 电平不固定,协议只是用逻辑0,1代表低电平,高电平,但是并没有说高低电平应该是多少伏。他是采用TTL电平(Transistor-Transistor Logic),也就是板子自己的电平,一般是3.3V或者5V。
  • 通信距离短,抗干扰能力差,这两个是互相关系的,抗干扰能力差决定了通信距离短。

基于以上,美国电子工业联盟(EIA)制定的串行数据通信的接口标准,原始编号全称是EIA-RS-232(简称232,RS232)以及制定并发布RS-485标准,并经通讯工业协会(TIA)修订后命名为TIA/EIA-485-A,习惯地称之为RS-485标准。这就是后来大名鼎鼎的RS232,RS485!

二. RS232

1.概念

RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。一般有25线以及9线的,只不过9线的比较常用,成为后来默认的RS232标准!我们来回顾下UART的缺陷,然后看看RS232怎么解决的!

接口不统一,协议只是规定的线的名称,但是没有一个接口标准,比如USB的type A/B/C,Mini/Micro接口等。

-》RS232常用采用DB9的头,统一了接口标准,我们在后面再介绍!

电平不固定,协议只是用逻辑0,1代表低电平,高电平,但是并没有说高低电平应该是多少伏。

-》规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。RS -232的噪声容限为2V,接收器将能识别高至+3V的信号作为逻辑“0”,将低到-3 V的信号作为逻辑“1”,电平对比图是:

通信距离短,抗干扰能力差,这两个是互相关系的,抗干扰能力差决定了通信距离短。

-》由于RS -232采用串行传送方式,并且将微机的TTL电平转换为RS-232C电平,其传送距离一般可达30 m。若采用光电隔离20 mA的电流环进行传送,其传送距离可以达到1000 m。另外,如果在RS-232总线接口再加上Modem,通过有线、无线或光纤进行传送,其传输距离可以更远。

注意:不管RS232怎么定义,对于UART SW编程是不变的,另外RS232是一对一的通信!

2.DB9引脚

我们来看下DB9的引脚

引脚编号

引脚定义

传输方向

说明

1

DCD-Data Carrier Detect

<-----

载波检测通知给DTE

2

RXD-Receive Data

<-----

接收数据

3

TXD-Transmit Data

----->

发送数据

4

DTR-Data Terminal Ready

----->

DTE告诉DCE准备就绪

5

GND

/

/

6

DSR-Data Set Ready

<-----

DCE告诉DTE准备就绪

7

RTS-Request to Send

----->

请求发送-DTE向DCE发送数据请求

8

CTS-Clear to Send

----->

清除发送-DCE通知DTE可以传数据

9

RI-Ring Indicator

<-----

振铃指示-DCE通知DTE有振铃信号

对于蓝牙一般就只需要关注(TX/RX/RTS/CTS)就行了,也就是我们最开始的接线方法!

另外,在设计的时候在中间需要加一个TTL转RS232的芯片,也就是这种架构!

三. RS485

与 CAN 类似, RS-485 是一种工业控制环境中常用的通讯协议,它具有抗干扰能力强、传输距离远的特点。 RS-485 通讯协议由 RS-232 协议改进而来,协议层不变,只是改进了物理层,因而保留了串口通讯协议应用简单的特点。 差分信号线具有很强的干扰能力,特别适合应用于电磁环境复杂的工业控制环境中, RS-485 协议主要是把 RS-232 的信号改进成差分信号,从而大大提高了抗干扰特性 !框架图如下:

RS-485 通讯网络的最大传输距离可达 1200 米,总线上可挂载 128 个通讯节点,而由于 RS-485 网络只有一对差分信号线,它使用差分信号来表达逻辑,当 AB 两线间的电压差为-6V~-2V 时表示逻辑 1,当电压差为+2V~+6V 表示逻辑 0,在同一时刻只能表达一个信号,所以它的通讯是半双工形式的!



扩展:USART相较于UART多了一根时钟线

以上是关于UART协议就应该这么理解的主要内容,如果未能解决你的问题,请参考以下文章

带你通俗易懂地理解常用通信协议原理!

UART串口协议详解

10大动图:秒懂各种常用通信协议原理

10大动图:秒懂各种常用通信协议原理

UART接口

一文读懂串口及各种电平信号含义