一. 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协议就应该这么理解相关推荐

  1. UART项目验证(一) uart协议与uart ip的理解

    1.1 uart协议 uart(universal asynchronous reciver and transmitter):通用异步收发器,是一种通用串行数据总线,用于异步通信,将数据的二进制位一 ...

  2. UART协议驱动设计

    UART协议驱动设计 在不通信时,发送高电平. 发送信息时,应该首先发送起始位(1bit.低电平).可以理解为告诉接收方,应该接收信息了. 发送数据位,由于是串行通信,规定从低位开始发,最后到高位(协 ...

  3. Linux·UART协议

    目录 一.什么是UART? 二.UART的帧格式 2.1 为什么UART的传输需要起始位? 2.2 UART基本的数据形式 2.3 为什么UART的数据位可变? 三.UART的波特率 3.1 什么是波 ...

  4. verilog基础---uart协议解析

    UART协议详解 UART(Universal Asynchronous Receiver/Transmitter)是一种异步全双工串行通信协议,由Tx和Rx两根数据线组成,因为没有参考时钟信号,所以 ...

  5. 几种常用通信协议:IIC协议、SPI协议、UART协议

    通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC协议: 2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一 ...

  6. UART协议概述与实现

    UART协议概述(一) 协议描述 关键代码逻辑 写在最后 协议描述 常见的三大低速通信协议之一,UART,通用异步收发协议. 非常简单的协议,协议细节不需要多说,只说需要注意的点. 空闲位为高位,起始 ...

  7. uart协议_UART协议简介

    1UART UART是异步串口通信协议,英文全称是Universal Asynchronous Receiver /Transmitter 即通用异步收发传输器,它不像SPI和I2C这样的通信协议,但 ...

  8. OSI 七层网络协议的定义与理解

    计算机网络,是计算机的基础课程,也是对互联网应用开发人员,必须要了解或者深入理解的一门网络课程,也是必要的基础.一般,在面试中,都被涉及或者解剖的问题. OSI 模型各层间关系和通讯时的数据流向如图所 ...

  9. 2.3 基于FPGA的UART协议实现(一)串口信号定义和接线方法-5针串口-9针串口-全功能串口

      通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.它将要传输的资料在串行通信与并行通信之间加以转换.作为把并行输入信号 ...

  10. CAN协议的学习与理解

    最近在学习CAN,记录一下,也供大家参考交流. 推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记 首先是瑞萨的CAN入门,真的通透: 秀!靠这篇我竟然2天理解了CAN协议!实战ST ...

最新文章

  1. A星算法(Java实现)
  2. c语言中字符减减自符意思,C语言中的自加自减运算
  3. linux centos7怎么绑定多ip,003 Linux配置多ip绑定的方法 | ip别名(以CentOS7为例 )
  4. jquery动态添加元素无法触发绑定事件的解决方案。
  5. 如何在MySQL中声明变量?
  6. 初次使用PyCharm
  7. 如何允许非Administrator用户远程登录主机
  8. php系统毕设答辩问题,计算机专业毕业论文答辩的一般程序及常见问题
  9. VTK:图表之GraphToPolyData
  10. 论文浅尝 | 基于RNN与相似矩阵CNN的知识库问答
  11. 高校里的“内卷”能有多少种操作?
  12. 基于深度学习的超大面积室内导航机器人Java后台软件设计
  13. html5video拼接屏一部分黑屏,拼接屏常见问题与解决方法
  14. 多视几何009:对极几何
  15. 计算机视觉作业(二)Local Feature Matching
  16. 360n6pro刷鸿蒙系统,因太费电想刷系统,N6Pro哪个版本的系统耗电少,有什么问题或缺点...
  17. PostgreSQL实现USERENV函数(兼容oracle)
  18. wpf 窗体翻页效果
  19. 移动端单击图片放大缩小
  20. 离行式ATM机搭建数据传输VPN安全网络解决方案

热门文章

  1. 手机dpi修改工具_手机dpi修改器
  2. Auto Tile 自动拼接地图和墙壁
  3. 2016年四川省TI杯电子设计竞赛B题
  4. 测度论与概率论笔记1:可测空间与可测函数
  5. 趣味python编程之经典俄罗斯方块
  6. 微信模拟位置想在哪就在哪(GPS欺骗)
  7. 苹果iPhone手机用iTunes更新IOS14.3系统失败怎么解决
  8. 56个民族HTML代码
  9. 如何进行软件技术管理?
  10. 云呐|国有企业资产管理系统建设该如何开展_固定资产管理信息系统