UC头条:IIC, SPI, UART, 单总线
IIC与SPI通信
IIC
SPI通信
IIC与SPI的比较
UART
单总线
因为面试时被问到IIC和SPI通信,所以又重新学习了一下。
IIC
IIC顾名思义就是两根线,一根SCL(时钟线),一根SDA(数据线)。时钟线用来通过电平变化来标志数据传输过程,SDA线传输数据。
通信过程
首先,SCL处于高电平,SDA从高电平变化为低电平表示START信号,此时将SCL线拉低便可通过SDA线读写数据(SCL线高电平时无法读写)。
然后,由于IIC通信分为主设备(比如单片机),从设备可能会有多个,这时候我们在读写数据之前要先确定从设备,每个从设备会对应一个特定的地址,所以主设备需要传输一个七位地址(好像现在有10位的地址)和一位R/W读写位,每个从设备接受到地址会和自己的地址进行对比,相同就会传输一个应答信号给主机。
主机收到应答信号确认从设备后可以进行数据传输。数据传输一般一帧数据为为8位,尾随一位应答位。从设备收到应答位,做出应答或非应答信号表示数据的接收成功与否(读操作主从应答相反)。
主机接收到应答,选择STOP信号输出便可以结束一帧的传输。
点击加载图片
SPI通信
与IIC不同的是SPI通信有四根线,MOSI(masterinputslaveoutput,主发从收),MISO(主收从发),SCLK(时钟线)和SS(serialselect)(片选信号,每个从机都需要单独的一条SS线与主机相连,而不是所有从机共用一条)。
点击加载图片
通信过程
首先,主机拉低SS线选择要通信的从机。
开始发送数据,时钟线不断输出脉冲,MOSI和MISO可以在相应时钟沿同时进行数据(1bit)的传输,所以SPI是全双工通信。
SS线被拉高,结束传输。
SPI_MOD
此外在数据传输时钟沿选择上有四种方式
CKP(时钟极性)//0–>ss休闲状态为低电平,1–>ss休闲状态为高电平
CKE(时钟相位)//0–>第一个时钟沿采集信号,1–>第二个时钟沿采集信号
点击加载图片
理论上,SPI通信的速率取决于时钟频率,所以就这一点来说会比IIC的传输速率要快得多,硬件设备的最大时钟频率的大小可以影响SPI通信。
IIC与SPI的比较
对于SPI我觉得优点可以有以下几点
高速率,传输bit频率最大与系统的时钟频率相当
传输bit无限制,对于IIC每次传输8位一个字节,而SPI是一位一位的传输,所以避免了某些无意义位的传输
硬件软件的配置比较轻便简单,硬件方面,没有IIC从机对应的逻辑地址,一根SS线连接一个从机;软件方面也没有过多复杂的时序,IIC中的起始应答停止的信号反复转换显得有点复杂。
缺点我觉得就是SPI通信没有应答,可能导致数据传输无效,或者在从机出现故障时主机依旧发送数据,就显得有点盲目。还有主机设备需要更多的引脚接口才能容纳更多的从设备。而且主设备只能有一个。
UART
通用异步收发器,三根线RX(接收数据端),TX(发送数据端),GND。
点击加载图片
通信过程
数据线上休闲时为高电平,将其拉低表示起始信号,从而可以开始通信。
单总线
1-wire通信,如DS18B20(温度传感器),DHT11(温湿度传感器)
这是DS18B20的单总线电路图,由图中可以看到单总线是收发双向的,但是也不能同时进行收发,所以是半双工。
点击加载图片
以上传输过程
初始化,主机发送复位脉冲(拉低总线一段时间),从机产生应答脉冲(拉低总线一段时间)。
写bit,低电平时为写0,高电平时为写1
单总线的数据传输速率一般为16.3Kbit/s,最大可达142Kbit/s,通常情况下采用100Kbit/s以下的速率传输数据。相比于IIC和SPI传输速率比较慢,但是硬件结构比较简单。