目录
基础知识介绍
什么是并行通信和串行通信
串行通信:串行通信是指利用一条传输线将数据一位位地顺序传送。
传输方式:传输一个字节(8个位)的数据时,串口是将8个位排好队,逐个地在1条连接线上传输。
特点:通信线路简单,利用电话或电报线就可以实现通信,降低成本,适用于远距离通信,但传输速度慢。
并行通信:并行通信是指利用多条传输线将一个数据的各位同时传送。
传输方式:传输一个字节(8个位)的数据时,并口是将8个位一字排开,分别在8条连接线上同时传输。
特点:传输速度块,适用于短距离通信。
所以到这里,我们就应该晓得,UATR ,IIC , SPI 都是属于串行通信了
什么是单工,半双工通信 , 全双工通信
**单工通信:**数据只在一个方向上传输,不能实现双方通信。
**半双工通信:**允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,其实际上是切换的单工
**全双工:**允许数据在两个方向上同时传输。
怎么记住这个UATR,IIC,SPI的通信方式能,首先他们不属于单工通信(因为它们都可以进行数据的交互),我们可以通过数据线来区分,IIC只用到了一根数据线,所以它属于半双工通信。UATR和SPI都用到了两根数据线,所以它们属于全双工通信
(/基础概念过完后,我们正式开始介绍这三种通信技术/)
什么是异步通信和同步通信
异步通信:以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。通俗说是两个uart设备之间通信的时候不需要时钟线,这时候就需要在两个uart设备上指定相同的传输速率,以及空闲位、起始位、校验位、结束位,也就是遵循相同的协议。
同步通信:在同步通信中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调下,同步数据。
在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。所以说,串口通信是异步通信(当然有的串口通信,是带时钟线的,这时就属于同步了),SPI和II2是同步通信
UATR
波特率:波特率用于描述UART通信时的通信速度,其单位为bps ,即每秒钟传送的bit的数据
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器),是一种通用的串行,异步通信总线该总线有两条数据线,可以实现全双工的发送和接受(这里说一句,UART的接受器和发送器都自己的时钟(虽然波特率是一样的,但会有细微的差异。就像表和表之间时间会有差异),这也是UART传输数据的时候,限制了数据位的个数。因为参照时钟的不一致,就会有误差,当累加误差超过一定程度,数据流就会乱掉。IIC 和SPI 就没有限制一次性传输多少位数)
上图所示为UART的数据传输过程
从上图我们可以看出,数据传输的开始,是由一个低电平的起始位所引导(这里有盆友可能会问,如果第一位数据也是低电平,那怎么区分这个是起始位还是数据位,我们观察一下,空闲位和终止位都是高电平,所以当第一个低电平来到时,那就代表着下一波数据传输开始的标志。又有盆友可能会问,如果数据传输的最后一位是高电平,如何区分停止位和数据位,数据位是开始就协商好一次发送多少位,停止位并不是停止数据的传输,主要是保持一个高电平用来检测下一次的起始位。)
IIC
IIC(Inter-Integrated Circuit)总线是双向、两线(SCL、SDA)、同步、串行、多主控(multi-master)接口标准,具有竞争检测和总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。
在IIC的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
IIC总线有两根双向的信号线,一根数据线SDA用于收发数据, 一根时钟线SCL用于通信双方时钟的同步;
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误的产生;每个连接到IIC总线上的器件都有一个唯一的地址(一般是7bit,第一个位,是用来决定发送,还是接受(发送数据,还是接受数据再一开始,初始化的时候就决定了,数据传输时将不能再改变)) , 且每个器件都可以作为主机或者从机(当然通一时刻只能有一个主机,其他挂载到IIC总线上的器件,感知,有其他器件在作为主机使用,就会保持“沉默”),总线上的器件的增加和删除不影响其他器件正常工作;IIC总线在通信的时总线上发送数据的器件作为发送器,接受数据的器件作为接受器。
总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都
输出高阻态时,由上拉电阻把总线拉成高电平。
这里提出一个问题:IIC最多能够挂载多少个设备?
:因为器件地址是7位或者10位,理论上可以挂27/210个设备,同时连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制
IIC的通信过程
1、主机发送起始信号启用总线(其他挂载到IIC总线上的器件,感知,有其他器件在作为主机使用,就会保持“沉默,不会再发出起始信号)
2、主机发送一个字节数据指明从机地址和后续字节的传送方向(这里主机发送这个信号的时候,挂载在总线上的其他器件是都可接受到,它们提取到其中的地址信号,然后和自己的地址进行比较,如果相同就返回应答信号)
3、被寻址的从机发送应答信号回应主机
4、发送器发送一个字节数据
5、接受器发送应答信号回应发送器
6、循环第四和第五步…
7、通信完成后主机发送停止信号释放总线
IIC的起始信号和停止信号
SCL为高电平时,SDA由高变低表示起始信号
SCL为高电平时, SDA由低变高表示停止信号
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线处于空闲状态
IIC的字节传送与应答
IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位(UART先传送的是最低位),发送完一个字节的数据后,接收器必须发送1位应答位来回应发送器,即一帧共有9位
家人们到这里,我们是不是应该提出两个疑问:
1、由于是两个器件之间进行通信,接受器是如何能保证在正确的时间去接受发送器发送的数据?(UART是通过,发送一个起始位)
2、发送数据的过程中是如何判断信号的长短?如11 和 1 都是一段高电平信号(UART通过波特率来区分)
问题一:IC和UART一样通过一个起始信号,来表示数据发送的开始,接受器得到这个起始信号后,就开始准备接受数据了。
问题二:如下图所示 ,IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号是允许变化的,时钟线为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定,所以说IIC的收发数据,是严格按照时序来的,很容易就可以,区分数据11和1
典型IIC时序
(第三种情况,多用于读取某一个芯片中某一个寄存器的数据,因为需要发送一个字节的地址数据来选定寄存器后,才可以读取数据,所以是主机先写,后读)
IIC时序主要分为三种情况,这里就不解释,我详细经过前文的学习,这三张图理解起来应该是没问题的
SPI
SPI(Serial Peripheral Interface)是串行外设接口的缩写 ,SPI是一种高速的, 全双工(发送数据和接受数据可以同时进行) , 同步的串行通信总线 ;SPI采用主从方式工作,一般有一个主设备和一个或多个从设备 ;SPI需要至少4根线 ,分别是MISO(主设备输入,从设备输出), MOSI(主设备输出从设备输入) , SCLK(时钟线) , CS(片选线)
SPI总线在进行数据传输时,先传送高位,后传送低位(和UART一样) ,一个字节传送完成后无需应答即可开始下一个字节的传送 ;SPI总线采用同步方式工作,时钟线在在上升沿或下降沿时发送器发送器向数据线上发送数据,在紧接着的下降沿或者上升沿时接收器从数据线上读取数据,完成一位数据的传送,八个时钟周期即可以完成一个字节数据的传送(IIC是在低电平时发送数据,高电平时接受数据,区别自己细品)
==SPI没有起始,停止信号, 也没有应答 ==
(/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的时钟极性和时钟相位可调