通讯协议大全(UART,RS485,SPI,IIC)

参考自: 

常见的通讯协议总结(USART、IIC、SPI、485、CAN)-CSDN博客

UART那么好用,为什么单片机还需要I2C和SPI?_哔哩哔哩_bilibili

5分钟看懂!串口RS232 RS485最本质的区别!_哔哩哔哩_bilibili

喜欢几位博主老师老师的还请看原贴/原视频

数据通信

  数据通信是指通过某种传输媒介(如电线、光纤、无线电波等)在计算机系统或设备之间传输数据的过程。这两种通信方式都是实现数据传输的基本技术,它们在数据传输的实现方式上有所不同,但都遵循一些共同的通信原理和协议。

串行通信与并行通信(两种基本的数据通信)

串行通信

特点: 数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种。

  • 串行通信指的是数据按位顺序,一个接一个地在单一的通信线上进行传输。
  • 它通常使用更少的线缆,因此在物理布线上更为经济
  • 串行通信的速度可能较慢,但适合长距离通信
  • 常见的串行通信协议包括RS-232、RS-485、I2C、SPI、UART等。

如下图

并行通信

特点: 多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高。

  • 并行通信允许多个数据位同时在多个通道上进行传输
  • 它需要更多的线缆,因此在物理布线上成本更高
  • 并行通信通常速度更快,但不适合长距离通信,因为信号间的干扰和同步问题会随着距离增加而变得更加严重。
  • 常见的并行通信协议包括PCI、AGP、SATA等。

二者对比

传输模式

下面我们就来了解串行通信的几种常见协议

UART

概念

  UART(Universal Asynchronous Receiver/Transmitter,通用异步接收器/发送器)是一种串行通信协议,广泛应用于嵌入式系统和各种设备之间的通信。
 

主要内容:

1. 串行、异步、全双工通信:UART允许数据在发送和接收设备之间进行全双工通信,即同时发送和接收数据,且通信是异步的,不需要时钟信号来同步数据位。

2. 数据帧格式:UART的数据帧通常由起始位、数据位、奇偶校验位(可选)、停止位组成。数据位通常为7或8位,起始位为1位,停止位可以是1或2位。

3. 波特率(Baud Rate):波特率是UART通信的数据传输速率,表示每秒传输的码元数量。常见的波特率有300、1200、2400、9600、19200、38400、115200等。

4. 数据位:数据位是实际传输的数据,可以是7位或8位,取决于通信双方的约定。

5. 起始位和停止位:起始位是一个逻辑“0”位,用于标记数据帧的开始;停止位是一个或两个逻辑“1”位,用于标记数据帧的结束。

6. 奇偶校验:奇偶校验位用于检测数据传输过程中的错误,可以是奇校验或偶校验。

7. 硬件结构:UART通常包括发送模块和接收模块,以及用于控制通信的寄存器和控制逻辑。

8. 控制信号:UART通信可能包括控制信号,如载波检测(CD)、载波发送(CTS)、请求发送(RTS)、允许发送(TX)、载波接收(RX)等。

9. 错误检测和纠正:UART协议可以通过奇偶校验位来实现基本的错误检测,但不具备错误纠正能力。

10. 应用场景:UART广泛应用于嵌入式系统、微控制器、计算机与外部设备(如打印机、调制解调器等)之间的通信。

uart框架图

只考虑RX,TX,GND

帧格式

下图是一帧数据额基本格式 10位(1+8+1)

UART不足->由此产生了其他通信

1.不能远距离传输信号(RS232 RS485)
2.通信速度慢 (SPI)
3.不能实现一对多的通信(IIC)

TTL电平

TTL高电平: (2.4V-5V)   低电平:(0-0.4V)


为什么不能远距离通信:


串口通信使用TTL电平,抗干扰的能力比较弱(一般就是同一块电路板上的两个芯片 和 距离比较进的两块电路板之间)
(像我们调试串口设备的时候进程就会用到CH340这个USB和TTL的转接口)

如下图,

TTL高电平最小为2.4V, 低电平最大为0.4V ,只差了2V -->当受到静电的时候低电平很容易变成高电平,对数据传输造成干扰

受到静电干扰,低电平变成高电平 --> 串口通信的距离很短

(1m之内:一块电路板上的两个芯片,电脑和芯片)

RS232/RS485 - 解决UART不能远距离通信

RS232(异步双全工)图


工作原理

232电平

  高电平(3V-15V)

  低电平(-15V-3V)

通过MAX232这课芯片把TTL电平转为232电平 --> (RS232 只是改变了电平大小,传输的数据是不变的,也是全双工通讯)

转换结果如下

注意: 转换是双向的

RS232的转换实例

最大好处 --> 抗干扰能力增强

优化效果

抗干扰能力增强 ->通信距离可达15m

对应传输的速率只有20k (太慢啦 -- RS485来解决)

RS485图(异步半双工)

工作原理

只需要两根线 去表示逻辑0,1

 串口TTL信号转为差分信号(通过差分信号去表示逻辑0,1)

差分信号为什么抗干扰能力强

1.使用两个信号的差值去表示逻辑0,1

2.使用双绞线

可以看成在受到干扰的时候两个信号同时受到干扰,他的差值不变-->抗干扰能力强



优化效果

2000m 的传输距离

50M的串口频率

支持1对多通信

注意: RS485是半双工通讯,只有两跟线去差分控制电平,不能T/S收发,否则需要四根线

     这样就能一主多从通信了

RS232 和 RS485对比图

RS232靠拉大电平区间

RS485靠差分

SPI (同步全双工)- 解决UART传输慢的问题

UART为什么慢

波特率 - 每秒传输的符号(如位、字节等)的数目
以115200 为例: 算出对应的传输速率

//对于115200的波特率,当考虑到通常的串行通信格式(如1个起始位、8个数据位、1个停止位,且没有校验位)时,每个字节实际上需要10个位来传输。 --> 115200 Bps (波特率) ÷ 10 位/字节 = 11520 Bps (字节每秒)

//1 kB(千字节)等于1024 B(字节)
11520 Bps ÷ 1024 =11.25 kbps(kb/s)

SPI框架图

SPI采用一主多从 

SPI的四条数据线

1.SS -- 片选 信号线(一般低电平有效(根据接收对象而定),主机选择需要通信的从机)

2.SCK时钟信号线 (由主设备产生)

3.MOSI (主发从接) 

4.MISO(从发主收)

SPI向存储器读写数据

写数据

我们采用的存储器SS是高电平有效

四种采集方式

时钟SCK的空闲态: 高/低电平  & 上升沿/下降 的四种组合。

下面给出空闲态是低电平,上升沿采集的方式样例

采样条件

1.SS为有效电平(这里是高电平)

2.SCK是上升沿(也可以是下降沿 -->具体需要查看芯片手册)

采样图

读写数据表

IIC 





由于串口通信需要约定波特率 -->
早起单片机的频率标比较低,以及精度的问题  --> 传输速率太快容易出现误码

SPI 加入一个CLOCK信号,通过上升沿去读取数据,这样之后就完全不依赖系统时钟的准确度了,
而是完全依赖自带的时钟信号去做信号的同步,能大大提高传输的速率,最大10M(适用:SD卡和屏幕这种对速率有要求的外设会采用这种协议)


IIC   -- 最大优势支持多设备的相互通信

概念

  I2C(同步半双工)通讯协议(Inter-Integrated Circuit),引脚少,硬件实现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

特点

(1) 它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。

(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步

(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。

(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。

(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

(6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式400kbit/s ,高速模式下可达 1Mbit/s,但目前大多 I2C 设备尚不支持高速模式。

(7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

IIC框架图

一主多从

典型的总线协议 


时钟线完全是由主机掌握  , 
数据线 在 应答位 & 和读数据的释放给从机

IIC下各种状态

注意: SCL为高打的时候才能表示状态

SDA高 ->空闲

SDA下降沿起始信号

开始传递信息之后(传递完起始信号之后)

SDA 高 - 逻辑1

SDA低 - 逻辑0

给出一组数据样例

SDA上升沿 - 停止信号

读写数据帧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/32018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

私域电商新纪元:消费增值模式的创新与成功实践

大家好,我是吴军,很高兴能够与您分享私域电商领域的魅力与机遇。今天,我将为大家呈现一个令人瞩目的成功案例,这个案例充分展现了私域电商的巨大潜力和无限可能。 在短短一个月的时间里,我们的客户成功实现了业绩的飞跃…

php,python aes加密反解

1. python版本 import base64 from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpadclass AESUtilCBC:def __init__(self, key, iv):self.key key.encode(utf-8)self.iv iv.encode(utf-8)self.pad_length AES.block_sizedef encrypt(self, data):try…

NTFS和exFAT哪个性能好 U盘格式化NTFS好还是exFAT好 mac不能读取移动硬盘怎么解决

文件系统的选择对存储设备的性能和兼容性有着重要影响。而NTFS和EXFAT作为两种常见的文件系统,它们各有特点,适用于不同的使用场景。我们将深入探讨NTFS和EXFAT的区别,帮助大家选择最适合自己需求的文件系统。 NTFS:稳定与性能的平…

jrebel安装使用教程(2022.4.1版本)

本方法适用于jrebel2022.4.1版本,之后的版本不再适用。 1.下载插件 下载地址 2.安装插件 可以通过idea内部安装 也可以将插件解压进idea的安装目录下的plugins。 3.激活 Team URL中填入 https://jrebel.qekang.com/{guid}这里提供两个guid生成地址&#xf…

【系统架构设计师】二、操作系统知识(操作系统概述|进程管理)

目录 一、操作系统概述 1.1 操作系统定义 1.2 操作系统的功能 1.3 操作系统的分类 1.4 嵌入式操作系统主要特点 二、进程管理 2.1 进程的组成与状态 2.2 前趋图 2.3 进程资源图 2.4 进程调度 2.5进程调度算法 2.6 死锁 2.7 进程与线程 2.7.1 进程 2.7.2 线程 2…

2022年大作业参考报告-使用C++语言开发小学生成绩管理系统、中学生成绩管理系统、大学生成绩管理系统【240621更新】

背景: 目录 第一章 需求分析 2 1.1 问题描述 2 6.1 功能需求 2 6.2 开发环境 2 6.3 开发过程 2 第二章 概要设计 3 2.1 总体设计 3 2.2 类的定义 3 2.3 接口设计 5 2.4 运行界面设计 6 第三章 详细设计 …

MySQL操作数据库语句

mysql关键字不区分大小写 1. 创建数据库 CREATE DATABASE [IF NOT EXISTS] westos (带[ ]表示该语句可有可无) 2. 删除数据库 DROP DATABASE [IF EXISTS] westos 3.使用数据库 -- tab键的上面,如果你的表名或者字段名是一个特殊的字符,就需要带 …

超级干货 !数据平滑9大妙招(python版)_python指数平滑预测案例

大家好,对数据进行平滑处理的方法有很多种,具体的选择取决于数据的性质和处理的目的。如果你对Python感兴趣,想要学习pyhton,这里给大家分享一份**Python全套学习资料**,都是我自己学习时整理的,希望可以帮…

Linux驱动开发笔记(十一)tty子系统及其驱动

文章目录 前言一、串口驱动框架1.1 核心数据结构1.2 数据处理流程 二、驱动编写1. 设备树的修改2. 相关API函数3. 驱动框架4. 具体功能的实现4.1 出入口函数的编写4.2 读写函数 前言 之前已经讲过应用层的应用,接下来我们继续进行驱动的学习。其实实际上我们很少主动…

Android记录22-关于开发中账号绑定的逻辑处理

有绑定的状态,自然也有取消绑定的状态: 这里的取消绑定只是简单改变应用内的一个状态罢了,并不会跟我们的服务端交互,也不会影响我们的账号登录的状态。 说了这么多,也没看见代码,你们会不会打我&#xff…

vs工程添加属性表

一、简介 1、 vs工程属性表以(.props)为后缀 2、 作用:当多个工程需要配置很多相同的属性配置时方便同步,比如多个工程需要链接相同的头文件,库文件,输出路径,中间目录等 3、本章内容测试环境&a…

天马学航——智慧教务系统(移动端)开发日志三

天马学航——智慧教务系统(移动端)开发日志三 日志摘要:更新了学生选课模块、我的课程模块以及退课的功能,优化了后端数据库的缓存 1、学生选课模块 学生选课模块主要实现,学生根据需求进行选课操作,通过后端查询到所有教师的课…

Java学习 - 网络IP地址与子网划分 讲解

IP地址 作用 用于决定数据包最终到达哪个计算机 组成 由32位比特组成,即4个字节这32位可以分为两个部分,称为网络号和主机号同一网段的计算机网络号相同,路由器负责连接不同的网段,而交换机负责连接同一网段中不同的计算机同一…

如何将 ChatGPT 集成到你的应用中

在当今快速发展的技术环境中,将人工智能聊天解决方案集成到你的应用程序中可以显著提升用户体验和参与度。OpenAI 的 ChatGPT 以其对话能力和高级语言理解而闻名,对于希望在其应用程序中实现智能聊天功能的开发人员来说是一个绝佳的选择。那我们今天就来…

高性能并行计算华为云实验一:MPI矩阵运算

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建矩阵乘法源码 3.1.1 实验说明 3.1.2 实验步骤 3.2 创建卷积和池化操作源码 3.2.1 实验说明 3.2.2 实验步骤 3.3 创建Makefile文件并完成编译 3.4 建立主机配置文件与运行监测 四、实验结果与分析 4.1 矩阵乘法…

压缩包文件密码破解软件 Ziperello 下载及使用教程

使用 Ziperello https://qweree.cn/index.php/416/ 对加了密码的压缩包进行密码破解,教程如下: 第一步,双击运行 Ziperello双击我打开程序.exe,如下图: 第二步,打开一个加了密的 ZIP 压缩包,再…

什么概率密度函数?

首先我们来理解一下什么是连续的随机变量,在此之前,我们要先理解什么是随机变量。所谓随机变量就是在一次随机实验中一组可能的值。比如说抛硬币,我们设正面100,反面200,设随机变量为X,那么X{100,200}。 X是…

STM32学习笔记(十)--I2C、IIC总线协议详解

概述:Inter Integrated Circuit,一组多从 多组多从 有应答 是一种同步(具有时钟线需要同步时钟SCL)、串行(一位一位的往一个方向发送)、半双工(发送接收存在一种)通信总线。 &…

【调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法】

调试笔记-系列文章目录 调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法 文章目录 调试笔记-系列文章目录调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法 前言一、调试环境操作系统:Windows 10 专业版调…

qmt量化交易策略小白学习笔记第46期【qmt编程之期货行情数据--如何获取5档盘口行情、期货结算价与持仓量】

qmt编程之获取期货数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 获取5档盘口行情 …