uart、spi、i2c通信协议详解

article/2025/9/21 12:57:53

文章目录

  • 前言
  • 一、uart(串口)
    • 介绍
    • 使用
    • rs232、rs485拓展
  • 二、I2C
    • 介绍
      • 1.宏观流程
      • 2.时序上
      • 3.典型操作
  • 三、spi(串行外设接口)
    • 介绍
    • 使用
      • 1.宏观上
      • 2.微观上
  • 总结
    • 1.i2c和spi对比


前言

之前对于各种通信协议学习了就忘,学了就忘,多种通信方式经常搞混,索性直接一次性在这里进行比较学习,没有进行具体代码实现,都是从原理上进行分析


`

一、uart(串口)

在这里插入图片描述

介绍

uart(串口)有两根线实现全双工、异步、串行通信,每次传输的数据最多为8位(5-8),还有1位起始位,停止位,校验位可有可无,偶校验:1的个数是偶数将这位置1。比如发送10101010,第一位发的是低位的0而不是高位的1,i2c则相反,第一位发的是最高位1,异步说明了这两者的时钟是不同的,时钟不同即波特率不同,比如发送方波特率是1,接收方波特率是2,那么发送方发送数据10101010就得需要8s,即每位都是1s,接受方接受这些数据会变成1100110011001100,即接受一位0.5s,这也就是说明了我们要把双方的波特率设置成一样的原因,同时,我们还限制了一次最多只能发送8位数据位的原因也在这里,如果双方由于波特率的差异,比如一方波特率是1,发送了10位,接受方波特率0.9,接受就只能接收9位,那么后面的就全乱套了,所以每次发送8位后重新开始,重新对时间,可以避免这种情况

在这里插入图片描述

使用

1.将gpio设置为uart
2.配置uart控制器,即串口控制器的寄存器

rs232、rs485拓展

rs232、rs485都是一种电气协议而已,是依附于uart硬件使用的,时序跟uart一样,都是一种标准
由于uart只规定了时序,没有规定什么电平(高电平代表1、低电平代表0,但是具体是多少?),一般uart都是使用ttl电平,所以向非ttl接收端就无法进行通信,所以我们一般不直接使用串口进行通信

rs232(15m)
-5 - -15 为1,5 - 15 为0 一般有max232将单片机的串口ttl电平转成rs232,发送出去,接收方将rs232转成ttl再给回单片机,这样可以将延长通信距离(232可传输15m左右)

rs485(1.5km,串口、232都只能两个,485可形成网络(一个主机,与多个485从机设备),串口、232都是用一根线进行传输,即非差分,485用两根线,为差分,同时485兼容ttl电平,不需要max232进行转换)所以如果只有两根线,那只能半双工,
2 - 6 为1,-2 - -6为0

二、I2C

介绍

i2c是同步、串行、半双工、近距离(板级之间)、多机通信(uart是仅有两个),有两根线,一个scl实现时钟同步,就没有了由于波特率不同导致的误差,就可以一直发送,不同跟uart一样,每次最多可发送8个数据位,然后还得重新发起始位,停止位等,效率高了很多、一个sda可用来发送数据,所以只能进行半双工,由于使用的是电平信号,所以传输距离短,通常连接在上面的有主机从机之分,当然这个主机从机是不固定的,每个从机可以成为主机,,当多个从机同时想启用总线,这时候主机就得进行仲裁,防止错误,每个从机都有唯一7位的地址,所以i2c最多可有127个从机,每次将通过sda发送时先发一个地址,再发数据

在这里插入图片描述

1.宏观流程

1.有多个主机,但是同一时刻只能有一个主机进行工作,所以需要工作的主机发送起始信号,占用总线,然后其他主机这个时候就不会占用了
2.一个字节8位,前7位是从机地址,最后一位决定是从机给主机发(1),还是主机给从机发(0),这一个字节所有从机都可以接收到,将前7位与自己相比对,如果不一样就闭嘴了
3.当正确的从机接受到这一字节后,发一个应答信号给主机
4.两者已经建立连接了,所以这个时候就开始了发送器给接收器了(这里第一个字节的最后一位是1,发送器就是主机)
5.接收器接受完也会给发送器一个应答 … 注意:这里的两个已经确定身份了,所以这个时候发送器和接收器不能互换
6.通信完成后,主机发送停止信号释放总线

在这里插入图片描述

2.时序上

简介:i2c通信时,总的分出来就4种信号:总用总线时的起始信号、发送一字节数据的数据发送信号、接收器的应答信号、释放总线的停止信号

起始信号和停止信号
在这里插入图片描述

发送信号与应答信号 即发送器发送了8位数据,接收器发送了1位应答位,即一帧数据有9位,uart有起始位、数据位(5-8)、校验位、停止位。

在这里插入图片描述

同步信号的要求:i2c规定,scl实现双方同步,scl为低,就是给发送器发送数据的,这时候sda可以改变,scl为高,就是给接受器接受的,所以scl为高,那么sda这个时候不能变,这样就成功发送了一位,一帧数据有9位,就发9次

在这里插入图片描述

3.典型操作

方向位为0:主机作为发送器,这个时候要停止有两种情况:1.主机主动停止,那么就在从机应答后发送停止
2.从机想停止,那么发送器(即主机)发数据,从机不应答,这个时候主机就知道从机想停止了,那么就发送停止

在这里插入图片描述

方向位为1:主机作为接收器,停止:接收器(主机)应答/不应答,然后发送结束

在这里插入图片描述

半双工:主机先作为发送器,发送完数据,从机作为接收器,接受完应答,然后主机再发送一个开始信号,然后从机发送数据,主机接收数据。注意两者没有停止信号,防止由于主机释放总线后被其他抢走

在这里插入图片描述

三、spi(串行外设接口)

介绍

spi是全双工、同步、比uart、i2c快速,用来mcu与各种外设通信,主机至少有4根线,mosi(主设备输出从设备输入)、miso(主设备输入从设备输出)实现全双工、sclk(实现同步)、cs(片选,每个从机只需要4个线,当有多个从机,那么主机就得多cs线),这也就导致了相比于i2c,spi主机是固定的,不会像i2c变来变去,spi与i2c一样先发高位,后发地位,与uart不一样,同时spi无虚应答信号,无起始信号,无停止信号,直接就是数据,与i2c不一样,这样容易导致接收器没接收到,然而发送器一直发

使用

1.宏观上

1.主机向要发送的从机的cs发送使能信号(高/低不确定,看从机),表明选定了该从机,比如,3个主机,使能信号为0,那么就给所有非目标从机cs发1,给目标从机发0。

在这里插入图片描述

2.微观上

总结

1.i2c和spi对比

1.i2c半双工、spi全双工,i2c两根线、spi4根线或更多
2.spi速度比i2c快
3.i2c有四种信号,spi只有数据格式
4.spi有四种工作模式,i2c只有一种规定好的时钟相位和时钟极性
5.i2c可用多主机,spi只有一个主机

相同点
1.数据传输都是高位在前,低位在后
2.都是同步通信,使用的都是ttl电平


http://chatgpt.dhexx.cn/article/netSaIjy.shtml

相关文章

普通GPIO模拟SPI通信协议(软件SPI)

在工作中偶尔会遇到SPI不够用的情况,而我们又要去使用SPI通信协议,此时就需要我们自己去模拟SPI通信协议。我们知道SPI通信协议有四种模式,它们分别如下所示: 下面是我基于ATSAM4SD16B芯片在Atmel Studio上用普通GPIO模拟的SPI…

SPI 协议

一. 概念 1. 通常SPI通信要求4根线,分别是MOSI(mast output salve input), MISO, CLK, CS。 2. 当发送和接受数据的工作都准备好了,只要有时钟CLK,就发送数据,没有时钟就不发送,而且一个时钟周期发送一位(bit)数据,所…

SPI通信协议(SPI总线)学习

转载自:https://www.cnblogs.com/deng-tao/p/6004280.html 1、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总…

SPI通信

1 SPI的简介及基本特点 1 SPI的简单介绍 最近工作中使用了SPI通信方式来做TM4C129和STM32之间的通信,为了更好地解决问题就学习了SPI原理的相关内容,完成了项目之后,也对这种通信方式有了较为深入的了解,现在来对SPI的使用方法进…

详解SPI通信协议

一、SPI简介 SPI,即Serial Peripheral Interface的英文缩写。从字面意思看就是串行外部设备接口,是一种全双工、高速、同步的通信总线。 SPI最早是摩托罗拉公司开发的全双工同步串行总线,用于微控制器(MCU)连接外部设…

stm32中常见的通信协议之SPI

目录 1.SPI总线2.SPI的寻址方式3.SPI的工作原理总结4.SPI的通讯过程5.SPI的极性和相位6.IIC和SPI的异同7.stm32中SPI配置中常用的寄存器8.stm32中相关库函数 1.SPI总线 SPI是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信协议;SPI采用主…

【通信协议】一文搞懂SPI

SPI总线简介 SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 接口定义 SPI接口共有4根信号线,分别是:片选信号、时钟信号、串行输出信号、串行…

SPI 通信协议 最详细解读!!!

SPI(Serial Peripheral Interface,串行外围接口)是一种高速、全双工、同步的通信总线,主要应用在EEPROM、FLASH、实时时钟、AD转换器上,以及数字信号处理器和数字信号解码器之间。 信号线 SPI有四根信号线:…

SPI 通信协议详解

SPI通信协议详解 写在最前: 本文讲述了SPI通信协议的基本内容包括如下 SPI的基础知识SPI的读写时序 本文重点参考 英文维基百科 中文维基百科 百度百科 注意: 倘若读者有足够的耐心和英文水平,强烈建议自行去英文维基百科去阅读相关知识。 相关链接: SPI…

通信协议篇——SPI通信

通信协议篇——SPI通信 1.简介 SPI(Serial Peripheral Interface)是一种高速、同步、全双工串行通信总线,采用主从机通信模式,主要应用在EEPROM,FLASH,实时时钟,AD转换器等。 2.原理 通信方…

SPI接口通信协议详解:SPI时序、2线、3线、4线SPI及4种常用工作模式

简介 SPI通信原理比I2C要简单,它主要是主从方式通信。这种模式通常只有一个主机和一个或者多个从机,标准的SPI是4根线,分别是SSEL(片选,也写作 SCS)、SCLK(时钟,也写作SCK)、MOSI(主机输出从机输入Master Output/Slav…

详解UART、I2C、SPI常用通信协议(全是细节)

前言 UART、I2C和SPI是我们在嵌入式开发中比较常见的通信协议了,没有最好的通信协议,每个通信协议都有自己的优缺点。如果想要通信速度快,SPI 将是理想的选择;如果用户想要连接多个设备而不是过于复杂,I2C 将是理想的选…

【总线】SPI 通信协议

目录 SPI总线协议概述 串行与并行通信 SPI通信介绍 SPI的工作原理 时钟 从属选择 多个从机 常规方法 菊花链方法 MOSI 和 MISO SPI 数据传输的步骤 SPI 的优缺点 优点 缺点 文章参考 SPI总线协议概述 SPI是许多不同设备使用的通用通信协议。例如,SD卡…

SPI通信协议详解,一篇就够!

一、什么是SPI? SPI 的英文全称为 Serial Peripheral Interface,顾名思义为串行外设接口。SPI 是一种同步串行通信接口规范,主要应用于嵌入式系统中的短距离通信。该接口由摩托罗拉在20世纪80年代中期开发,后发展成了行业规范。 …

2021年游戏项目的十大编程语言:C++、Java、C#均上榜

在这个技术驱动的世界里,游戏行业是全球增长最快的行业之一。在每一款华丽精美的电子游戏背后,都有一种编程语言,为用户提供优质的体验。游戏开发者利用顶级的编程语言来构建游戏。不同的游戏项目使用了不同的编程语言,这取决于游…

2021 编程语言排行榜

点击“终码一生”,关注,置顶公众号 每日技术干货,第一时间送达! IEEE Spectrum 发布了 2021 年编程语言排行榜,官方的标题是:Python 在新技术领域依然是主导地位。 Python 近几年随着大数据、数据挖掘、人…

2020 年最牛逼的 10 门编程语言

先看再点赞,给自己一点思考的时间,微信搜索【沉默王二】关注这个有颜值却假装靠才华苟且的程序员。 本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题。 对于很多初学编程的人来说,尤其是马上要入…

世界上到底有多少种编程语言?

最近,网站上看到一个很有意思的问题:世界上到底有多少种编程语言? 查遍网络之后,仍然没有找到准确答案,只知道几千的数量是有的,但是我们常用的也就几十来个,其中最常见的便是Java、Python、C、…

世界上最难的5种编程语言

世界上最难的5种编程语言 每个程序员都熟悉许多编程语言。许多编程语言都是高级的,它们的语法是人类可读的。然而,也有一些低级语言,对于一个人来说,读起来很困难,但是可以理解。然而,您是否遇到过一种既不…

2018年最流行的十大编程语言,有你用的吗?

对于编程界的初学者来说,最大的困难是决定从何处入手,或者应掌握哪种语言才能在职场上平步青云。有时,专业程序员也面临学习一门新语言似乎更卓有成效的情形。 无论是什么原因,下面列出了世界上最流行的编程语言,以便了…