当前位置: 首页 > news >正文

硬件设计基础----通信协议UART

1 串行通信与并行通信

1.1 串行通信

串行接口简称串口,也称串行通信接口,是采用串行通信方式的扩展接口。串行接口,数据一位一位地顺序传送

串行通信(Serial communication) 是计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用一条数据线,将数据一位一位的依次传输,每一位数据占一个固定的时间长度。串行通信按照发送时钟源和接收时钟源是否需要保持一致,可分为同步通信和异步通信

串行通信如图所示:

在这里插入图片描述

异步串行通信: 数据传输以字符为单位,字符与字符间的传输是完全异步的,位与位之间的传输基本上是同步的

特点:

  • 以字符为单位传输信息
  • 相邻两字符间的间隔是任意长
  • 因为一个字符中的比特位长度有限,所以需要的接收时钟和发送时钟只要相近就可以
  • 字符间异步,字符内部各位同步

数据格式:

  • 1位起始位,规定为低电平0
  • 5~8位数据位,传输的有效信息
  • 1位奇偶校验位
  • 1~2位停止位,规定为高电平1

数据帧格式如图所示:

在这里插入图片描述

同步串行通信: 数据传输是以数据块为单位,字符与字符之间、字符内部的位与位之间都同步

特点:

  • 以数据块为单位传输信息
  • 在一个数据块(信息帧)内,字符与字符间无间隔
  • 因为一次传输的数据块中包含的数据较多,所以接收时钟与发送进钟严格同步,通常要有同步时钟

数据格式:

  • 2个同步字符作为一个数据块的起始标志
  • n个连续传送的数据
  • 2个字节循环冗余校验码(CRC)

数据帧格式如图所示:

在这里插入图片描述

1.2 并行通信

并行通信(Parallel communication) 是数据的每一位同时在多根数据线上发送或接收,以字节为单位并行传输。并行通信速度快,但通信线多,成本高,不宜进行远距离通信。计算机内部总线是以并行方式传输数据的

并行通信如图所示:

在这里插入图片描述

2 UART通信协议

UART(Universal Asynchronous Receiver/Transmitter): 通用异步收发传输器,该总线双向通信,可以实现全双工传输和接收。UART是异步串行通信,通信两方预先约定传输速率,即每秒传输的bit。UART是异步串行通信口的总称,包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范,使用UART通信的双方设备都需要遵从UART协议。

电路连接: 双方发送端(TxD)与接收端(RxD)交叉连接,如图所示:

在这里插入图片描述

2.1 电平逻辑

TTL(Transistor-Transistor Logic): 是一种电平逻辑。通常使用的二进制表示数据,为了表示二进制,需要用高低电平表示二进制数,3.3V/5V等价于逻辑1,0V等价于逻辑0

标准TTL电平逻辑:

  • 输出电路:电压≥2.4V为逻辑1,电压≤0.8V为逻辑0
  • 输入电路:电压≥2.0V为逻辑1,电压≤1.2V为逻辑0

CMOS电平逻辑:

  • 输出电路:电压≥(0.9Vcc)V为逻辑1,电压≤(0.1Vcc)V为逻辑0
  • 输入电路:电压≥(0.7Vcc)V为逻辑1,电压≤(0.3Vcc)V为逻辑0

RS-232电平逻辑:

  • 不同于TTL的电平逻辑,最简单的RS232通信由三条数据线组成,即 TxD、RxD 和GND
  • -12V代表高电平,即-15V ~ -3V为逻辑1,+12V代表低电平,即+3V ~ +15V为逻辑0
  • TTL和RS-232电平互转,常用芯片MX232,如图所示:

在这里插入图片描述

RS-485电平逻辑:

  • 采用差分信号,即两根线的电平差代表逻辑0和逻辑1
  • 两线间的电压差为+2V ~ +6V表示逻辑1,两线间的电压差为-2V ~ -6V表示逻辑0
  • TTL和RS-485电平互转,常用芯片MX485,如图所示:
    在这里插入图片描述

3 UART工作原理

UART数据帧结构,如图所示:

在这里插入图片描述

  • 波特率: 数据传输是用波特率表示的,即每秒钟传送的二进制位数,单位bps(bit per second)。常见比特率:9600bps、19200bps、38400bps、57600bps、115200bps。9600bps 是1s发送或接收9600bit数据,那么1bit数据的时间宽度是1/9600s
  • 起始位: 先发出一个逻辑0的信号,表示传输数据的开始
  • 数据位: 通信中实际数据位的参数,标准的数据位可以是5、7、8位,从最低位开始传输
  • 奇偶校验位: UART发送时,检查发送数据中1的个数,自动在奇偶校验位上添上1或者0,用于发送数据的校验。可以分为无校验、奇校验(如果数据位中1的数目是偶数,则校验位为1,否则为0)、偶校验(如果数据为中1的数目是偶数,则校验位为0,如果为奇数,否则为1)、1校验(校验位始终为1)、0校验(校验位始终为0)
  • 停止位: 数据的结束标志,可以是1位、1.5位、2位的高电平
  • 空闲位: 处于逻辑1状态,表示当前线路上无数据传输
  • 帧间隔: 传送数据的帧与帧之间的间隔大小,以位或者时间为计量单位

UART允许两个时钟频率不同的设备进行通信,但要求波特率一致。传输数据之前,UART之间要约定数据的传输速率(即每位所占时间,其倒数成为波特率)、数据的帧格式(即配备相同的数据包结构:有多少个数据位、是否使用校验位、是奇校验还是偶校验、有几位停止位)

发送数据的过程: 空闲状态,线路处于高电平;当收到发送指令之后,拉低线路的一个数据位的时间(起始位的时间),接着数据按照低位到高位依次发送,数据发送完毕之后,接着发送奇偶校验位和停止位(停止位高电平),一帧数据发送完成

数据接收过程: 空闲状态,线路处于高电平;当检测到线路的下降沿时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备接收数据或存入缓冲

4 UART接口

4.1 RS-232接口

RS-232是美国电子工业联盟制定的串行数据通信接口标准:

  • 接口的信号电平值较高,易损坏接口电路芯片,-15V ~ -3V为逻辑1,+3V ~ +15V为逻辑0,与TTL电平不兼容,需要使用电平转换电路与TTL电路连接
  • 传输速率较低,在异步传输时,波特率为20Kbps
  • 接口使用一根信号线和一根信号返回线而构成共地的传输形式,共地传输容易产生共模干扰,所以抗噪声干扰性弱
  • 传输距离有限,最大传输距离标准值为50 米,实际15 米左右
  • 只能点对点通信

典型应用电路图,如图所示:

在这里插入图片描述

4.2 RS-485接口

RS-485接口克服RS-232接口的不足:

  • +2V ~ +6V为逻辑1,-6V ~ -2V为逻辑0,接口信号电平比RS-232降低,不容易损坏接口电路芯片,且该电平与TTL电平兼容,方便与TTL电路连接
  • 数据最高传输速率为10Mbps
  • 采用平衡驱动器和差分接收器的组合,抗共模干扰能力强,所以抗噪声干扰性强
  • 最大传输距离实际可达3000米
  • 在总线上允许连接多达128个收发器,具有多站能力
  • 总线起止端分别加上约120Ω的终端匹配电阻,以保证R-S485总线的稳定性

典型应用电路图,如图所示:

在这里插入图片描述

4.3 RS-422接口

RS-422是平衡电压数字接口电路的电气特性,电气性能与RS-485相同:

  • 与RS-485电路原理基本相同,都是以差动方式发送和接收,不需要数字地线
  • 有四根信号线,两根发送,两根接收,可实现全双工通信
  • 数据最高传输速率为10Mbps,最大传输距离为1200米

UART接口对比:

UART电平逻辑传输速率传输距离抗噪声干扰性工作方式信号线从机数量
RS-232-15V ~ -3V为逻辑1,+3V ~ +15V为逻辑020Kbps15m全双工2根1个
RS-422+2V ~ +6V为逻辑1,-6V ~ -2V为逻辑010Mbps1200m全双工2根128个
RS-485+2V ~ +6V为逻辑1,-6V ~ -2V为逻辑010Mbps3000m半双工4根128个

5 UART特点

优点:

  • 只使用两根线通信,线路简单
  • 不需要时钟信号
  • 双方设置后,可以改变数据包的结构
  • 通信距离远

缺点:

  • 数据帧的大小限制为最多9位
  • 不支持多个主系统
  • 每个UART的波特率必须在10%之内
  • 通信速率慢

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

相关文章:

  • Python的基础语法
  • 详解CAN总线:CAN总线报文格式—过载帧
  • 论如何参与一个开源项目(上)
  • 【一起学Rust | 开源项目】效率提升工具espanso——在日常输入中使用代码提示
  • 【youcans 的图像处理学习课】11. 形态学图像处理(下)
  • 谈谈对链表的理解
  • create-react-app打包优化
  • Mycat 安装以及应用
  • JS面向对象编程之类(1)
  • Pytorch-张量tensor详解(线性回归实战)
  • UnityJSON持久化数据
  • 最小生成树(Prim、Kruskal)算法
  • Android Studio实现连连看小游戏,比比看谁过关最快~
  • MyBatis-Plus 的妙用(总章节目录)
  • [ISITDTU 2019]EasyPHP
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Angular数据绑定机制
  • Fabric架构演变之路
  • js作用域和this的理解
  • Laravel Mix运行时关于es2015报错解决方案
  • Next.js之基础概念(二)
  • PHP 7 修改了什么呢 -- 2
  • Twitter赢在开放,三年创造奇迹
  • use Google search engine
  • Vue2 SSR 的优化之旅
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 近期前端发展计划
  • 前端性能优化--懒加载和预加载
  • 三栏布局总结
  • 数据仓库的几种建模方法
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #100天计划# 2013年9月29日
  • #pragma 指令
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (算法)求1到1亿间的质数或素数
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)Linq学习笔记
  • (转)创业的注意事项
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET命名规范和开发约定
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @Autowired注解的实现原理
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解