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

2024-06-22 14:04

本文主要是介绍通讯协议大全(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上升沿 - 停止信号

读写数据帧

这篇关于通讯协议大全(UART,RS485,SPI,IIC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084498

相关文章

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

秒变高手:玩转CentOS 7软件更换的方法大全

在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请

设计模式大全和详解,含Python代码例子

若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 下面是设计模式的简要介绍和 Python 代码示例,涵盖主要的创建型、结构型和行为型模式。 一、创建型模式 1. 单例模式 (Singleton