Bootstrap

三大通讯协议:UART+IIC+SPI

参考链接:

1、1、 UART、IIC、SPI三大通信协议的比较_三大通信协议比较-CSDN博客(⭐⭐⭐)
2、SPI,UART,IIC三大总线对比说明_iic uart spi总线对比总结-CSDN博客(⭐⭐⭐⭐)
3、浅谈单片机通信,化繁为简UART、I2C、SPI学习全家桶,你值得拥有!_哔哩哔哩_bilibili(⭐⭐⭐⭐⭐动画做的很好,非常浅显易懂。本文截图均来自该视频)

目录

参考链接:

基本概念:

通讯协议详写

1、UART

2、IIC

3、SPI


基本概念:

1、并行通信和串行通信:

        把要输出的数据理解成小汽车,电路接口理解成公路。串行通信是单车道公路,每次只能通过一辆汽车。后面的汽车要等前面的汽车通过后才能通行;并行通信是多车道公路,每次可以通过多辆小汽车。

                                                                                                               图1 串行通信

                    

                                                                           图2 并行通信

2、同步和异步

同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

3、单工、半双工、全双工

单工:公路上只允许车辆单向行驶。

半双工:一条公路上允许车辆双向行驶,数据可以在发送机和接收机之间相互传输,但是不能同时发送。

双工:公路上允许车辆同时双向行驶。

通讯协议详写

1、UART

全双工异步串行总线。该总线有两条数据线,可以实现全双工的发送和接收,常用于单片机与单片机或外部辅助设备之间的通信。

                      

(一般有两条数据线的都能实现全双工通信,有时钟线的都是同步通信)

以发送0x96数据为例:

uart数据发送从低位开始,当总线处于空闲状态时,线路保持高电平。发送数据前会先发送一个低电平,当总线由高电平变为低电平时,提醒数据接收方做好准备,然后从低位到高位发送8位数据位。8位数据完成传输之后会发送一个1,让总线重新回到高电平状态。所以UART一次实际上发送了10位数据:1位起始位+8位数据位+1位停止位。若要发送新的字节,需要重新发送起始位,并重复上述过程。

                    

2、IIC

低速,半双工步串行总线。可以挂载多个参与通信的器件,常用于板内通信,比如单片机与外围芯片之间短距离、低速的信号传输。

                    

IIC有两条线,一条SCL时钟用于同步,一条SDA数据线用于传输数据。IIC总线能挂载多个器件,且支持多主机模式。即线路上的任何一个器件都可以作为主机,但受限于只有一根信号线,所以一个时刻只能有一个主机,主机拥有该时刻下总线的控制权,也就是发起和结束一次通信的权力,而从机只能被主机呼叫。

在IIC总线协议里,每个器件都有一个固定的号码,是一个7位的地址,以下面图片为例:

                 

当mcu为主机,要向E2PROM发送0x96数据时,会向总线先发一个0X31找到E2PROM,再发送数据。

IIC总线发送数据是从高位到低位依次发送,当总线空闲时,SCL时钟线和SDA数据线均保持高电平,当主线要开始传输数据时,会先将SDA电平拉低,而此时SDA数据线上这个从高到低的跳变沿就是起始位。接下来进行器件寻址,在SCL低电平时依次发送七位地址位,紧接着主机会发送一个读写指示位,低电平表示要发送数据,高电平表示要请求数据。主机发送完以上数据,从机如果成功接收,会发送一个应答位到总线上。

特别要注意的是,只有SCL低电平时SDA可以变,SCL高电平时,SDA需要保持。

发完寻址位找到了要通信的器件,接下来主机就可以正式开始发送数据。要说明的是,当一个字节八位数据发送完之后,要有一个应答位才能发送下一个字节。当要传输的所有数据发送完毕之后,主机要将SCL时钟拉到高电平,并且要将SDA数据线从低电平拉到高电平,这个从低到高的跳变沿表示了停止位。

                  

总结:

IIC通信一般流程:

1、主机发送起始位并进行从机寻址

2、得到应答后主机开始发送/读取数据位

3、数据发送/读取完成主机发送停止位结束此次通信。

3、SPI

高速,全双工同步串行总线。常用于单片机和EEPROM、FLASH、实时时钟、数字信号处理器等器件的通信。主要为主从方式通信,通常只有一个主机和数个从机

          

标准SPI有四根线。其中只有时钟线SCLK是必须的,其他三条线可以根据情况进行删减。SCLK是时钟主机线,由主机产生;MOSI(MasterOutput/SlaveInput)是主机给从机发送指令数据的通道MISO(MasterInput/SlaveOutput)是主机读取从机状态或数据的通道CS是从机片选使能信号(有多少个从机就有多少条单独的CS信号线)。在同一时刻,主机只能跟一个从机进行通信,当总线存在多个从机时,需要进行片选,将从机的CS接口电平拉高或者拉低。

比如从机Slave1和Slave2,片选使能信号都是低电平使能。当主机要跟Slave1通信,则CS1接口输出低电平;当主机要跟Slave2通信,则CS2接口输出低电平;

        

SPI总线发送数据是从高位到低位依次发送,SCLK在空闲时可以是高电平,也可以是低电平。

SPI有四种工作模式:(CPOL表示时钟极性,CPHA表示时钟相位)
Mode0:CPOL=0,CPHA=0
Mode1:CPOL=0,CPHA=1
Mode2:CPOL=1,CPHA=0
Mode3:CPOL=1,CPHA=1
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

以空闲时为高电平进行说明:
空闲时刻为高电平,当SCLK出现下降沿,从高电平跳到低电平时进行数据输出,当SCLK出现上升沿,从低电平跳变到高电平时进行数据采样

;