一文给你讲清楚 UART ,IIC ,SPI

目录

  • 基础知识介绍
    • 什么是并行通信和串行通信
    • 什么是单工,半双工通信 , 全双工通信
    • 什么是异步通信和同步通信
    • UATR
    • IIC
    • IIC的通信过程
    • IIC的起始信号和停止信号
    • IIC的字节传送与应答
    • 典型IIC时序
    • SPI
    • SPI的极性和相位
    • 总结IIC和SPI的异同

基础知识介绍

什么是并行通信和串行通信

串行通信:串行通信是指利用一条传输线将数据一位位地顺序传送。
传输方式:传输一个字节(8个位)的数据时,串口是将8个位排好队,逐个地在1条连接线上传输。
特点:通信线路简单,利用电话或电报线就可以实现通信,降低成本,适用于远距离通信,但传输速度慢。
并行通信:并行通信是指利用多条传输线将一个数据的各位同时传送。
传输方式:传输一个字节(8个位)的数据时,并口是将8个位一字排开,分别在8条连接线上同时传输。
特点:传输速度块,适用于短距离通信。
一文给你讲清楚 UART ,IIC ,SPI_第1张图片
所以到这里,我们就应该晓得,UATR ,IIC , SPI 都是属于串行通信了

什么是单工,半双工通信 , 全双工通信

**单工通信:**数据只在一个方向上传输,不能实现双方通信。
**半双工通信:**允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,其实际上是切换的单工
**全双工:**允许数据在两个方向上同时传输。
一文给你讲清楚 UART ,IIC ,SPI_第2张图片
怎么记住这个UATR,IIC,SPI的通信方式能,首先他们不属于单工通信(因为它们都可以进行数据的交互),我们可以通过数据线来区分,IIC只用到了一根数据线,所以它属于半双工通信。UATR和SPI都用到了两根数据线,所以它们属于全双工通信

(/基础概念过完后,我们正式开始介绍这三种通信技术/)

什么是异步通信和同步通信

异步通信:以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。通俗说是两个uart设备之间通信的时候不需要时钟线,这时候就需要在两个uart设备上指定相同的传输速率,以及空闲位、起始位、校验位、结束位,也就是遵循相同的协议。
同步通信:在同步通信中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调下,同步数据。
在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。所以说,串口通信是异步通信(当然有的串口通信,是带时钟线的,这时就属于同步了),SPI和II2是同步通信
一文给你讲清楚 UART ,IIC ,SPI_第3张图片

UATR

波特率:波特率用于描述UART通信时的通信速度,其单位为bps ,即每秒钟传送的bit的数据
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器),是一种通用的
串行,异步通信总线
该总线有两条数据线,可以实现全双工的发送和接受(这里说一句,UART的接受器和发送器都自己的时钟(虽然波特率是一样的,但会有细微的差异。就像表和表之间时间会有差异),这也是UART传输数据的时候,限制了数据位的个数。因为参照时钟的不一致,就会有误差,当累加误差超过一定程度,数据流就会乱掉。IIC 和SPI 就没有限制一次性传输多少位数
一文给你讲清楚 UART ,IIC ,SPI_第4张图片
上图所示为UART的数据传输过程
从上图我们可以看出,数据传输的开始,是由一个低电平的起始位所引导(这里有盆友可能会问,如果第一位数据也是低电平,那怎么区分这个是起始位还是数据位,我们观察一下,空闲位和终止位都是高电平,所以当第一个低电平来到时,那就代表着下一波数据传输开始的标志。又有盆友可能会问,如果数据传输的最后一位是高电平,如何区分停止位和数据位,数据位是开始就协商好一次发送多少位,停止位并不是停止数据的传输,主要是保持一个高电平用来检测下一次的起始位。)

IIC

IIC(Inter-Integrated Circuit)总线是双向、两线(SCL、SDA)、同步、串行、多主控(multi-master)接口标准,具有竞争检测和总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。
在IIC的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
IIC总线有两根双向的信号线,一根数据线SDA用于收发数据, 一根时钟线SCL用于通信双方时钟的同步
一文给你讲清楚 UART ,IIC ,SPI_第5张图片
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误的产生;每个连接到IIC总线上的器件都有一个唯一的地址(一般是7bit,第一个位,是用来决定发送,还是接受(发送数据,还是接受数据再一开始,初始化的时候就决定了,数据传输时将不能再改变)) , 且每个器件都可以作为主机或者从机(当然通一时刻只能有一个主机,其他挂载到IIC总线上的器件,感知,有其他器件在作为主机使用,就会保持“沉默”),总线上的器件的增加和删除不影响其他器件正常工作;IIC总线在通信的时总线上发送数据的器件作为发送器,接受数据的器件作为接受器。
一文给你讲清楚 UART ,IIC ,SPI_第6张图片
总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都
输出高阻态时,由上拉电阻把总线拉成高电平。

这里提出一个问题:IIC最多能够挂载多少个设备?
:因为器件地址是7位或者10位,理论上可以挂27/210个设备,同时连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制

IIC的通信过程

1、主机发送起始信号启用总线(其他挂载到IIC总线上的器件,感知,有其他器件在作为主机使用,就会保持“沉默,不会再发出起始信号)

2、主机发送一个字节数据指明从机地址和后续字节的传送方向这里主机发送这个信号的时候,挂载在总线上的其他器件是都可接受到,它们提取到其中的地址信号,然后和自己的地址进行比较,如果相同就返回应答信号

3、被寻址的从机发送应答信号回应主机

4、发送器发送一个字节数据

5、接受器发送应答信号回应发送器

6、循环第四和第五步…

7、通信完成后主机发送停止信号释放总线

IIC的起始信号和停止信号

SCL为高电平时,SDA由高变低表示起始信号
SCL为高电平时, SDA由低变高表示停止信号
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线处于空闲状态
一文给你讲清楚 UART ,IIC ,SPI_第7张图片

IIC的字节传送与应答

IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位(UART先传送的是最低位),发送完一个字节的数据后,接收器必须发送1位应答位来回应发送器,即一帧共有9位
一文给你讲清楚 UART ,IIC ,SPI_第8张图片
家人们到这里,我们是不是应该提出两个疑问:
1、由于是两个器件之间进行通信,接受器是如何能保证在正确的时间去接受发送器发送的数据?(UART是通过,发送一个起始位)
2、发送数据的过程中是如何判断信号的长短?如11 和 1 都是一段高电平信号(UART通过波特率来区分)

问题一:IC和UART一样通过一个起始信号,来表示数据发送的开始,接受器得到这个起始信号后,就开始准备接受数据了。
问题二:如下图所示 ,IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号是允许变化的,时钟线为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定,所以说IIC的收发数据,是严格按照时序来的,很容易就可以,区分数据11和1
一文给你讲清楚 UART ,IIC ,SPI_第9张图片

典型IIC时序

一文给你讲清楚 UART ,IIC ,SPI_第10张图片
一文给你讲清楚 UART ,IIC ,SPI_第11张图片
第三种情况,多用于读取某一个芯片中某一个寄存器的数据,因为需要发送一个字节的地址数据来选定寄存器后,才可以读取数据,所以是主机先写,后读

IIC时序主要分为三种情况,这里就不解释,我详细经过前文的学习,这三张图理解起来应该是没问题的

SPI

SPI(Serial Peripheral Interface)是串行外设接口的缩写 ,SPI是一种高速的, 全双工(发送数据和接受数据可以同时进行) , 同步的串行通信总线 ;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备 ;SPI需要至少4根线 ,分别是MISO(主设备输入,从设备输出), MOSI(主设备输出从设备输入) , SCLK(时钟线) , CS(片选线)
一文给你讲清楚 UART ,IIC ,SPI_第12张图片
SPI总线在进行数据传输时,先传送高位,后传送低位(和UART一样) ,一个字节传送完成后无需应答即可开始下一个字节的传送 ;SPI总线采用同步方式工作,时钟线在在上升沿或下降沿时发送器发送器向数据线上发送数据,在紧接着的下降沿或者上升沿时接收器从数据线上读取数据,完成一位数据的传送,八个时钟周期即可以完成一个字节数据的传送(IIC是在低电平时发送数据,高电平时接受数据,区别自己细品
==SPI没有起始,停止信号, 也没有应答 ==
一文给你讲清楚 UART ,IIC ,SPI_第13张图片
(/MSB指的是最高位 ,LSB指的是最低位/)

SPI的极性和相位

SPI总线有四种不同的工作模式,取决于极性和相位
**CPOL表示SCLK空闲时的状态
CPOL = 0 , 空闲时SCLK为低电平
CPOL = 1, 空闲时SCLK为高电平
CPHA表示采样时刻(这里决定的是,上升沿还是下降沿进行数据的 收发)
CPHA = 0, 每个周期的第一个时钟沿采样
CPHA = 1 , 每个周期的第二个时钟沿采样 **

总结IIC和SPI的异同

相同点
1、均采用串行,同步的方式
2、均采用TTL电平 ,传输距离的应用场景类似
3、均采用主从方式工作
不同点
1、IIC为半双工 , SPI为全双工
2、IIC有应答机制, SPI无应答机制
3、IIC通过向总线广播从机地址来寻址(费时),SPI通过向对应从机发送使能信号来选定从机(费硬件资源)
4、IIC的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调

你可能感兴趣的:(Linux驱动开发,单片机,网络,嵌入式硬件)