低端数字通信领域,SPI和IIC经常可见,这两种协议适合近距离低速芯片之间的通信
IIC的速率是 多主设备速率为100kbs 400kbps 3.4Mbps 只有两根线分别是CLK DATA
每一个IIC设备都有唯一的7位地址 所以IIC总计最多可以挂在128个设备,要求数据帧为8个字节
通信模型为
主设备发送一个start信号,然后其他设备开始监听总线以准备接受数据,接着,主设备发送一个7位设备地址加一个读写操作的数据帧,当从设备接受数据后,会对自身的地址进行比对,并且进入等待状态,等待stop信号的到来,结束通信。当地址比较正确,从设备会发送一个应答信号,当主设备收到应答信号后会开始发送或者接受数据,数据帧为8位+1一个ACK校验位,直到数据传输完成,主设备发送一个stop信号,向其他设备释放总线,其他设备回到初始状态,通信结束。
start信号标志:SCL为高电平的情况下,SDA高电平拉低
stop信号标志:SCL为高电平的情况下,SDA低电平拉高
SDA和CLK都是开漏输出(通常使用4.7K电阻上拉到3.3V的单元)
开漏输出如果不接上拉电阻, 没有输出高电平的能力.
如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。所以,总线一般会使用开漏输出。
根据IIC规范,总线空闲时,两根线必须处于高电平状态。通过接上拉电阻,将SDA和SCL固定在高电平,即给IO确定的电平,不易受外界干扰。
时钟拉伸:主设备决定时钟速度,因为时钟脉冲信号是由主设备发出的,当从设备跟不上主设备的速率时候,从设备会请求主设备慢一点,这种机制就是时钟拉伸。
当从设备降低速率,需要做时钟拉伸的时候,它会按下时钟线,逼迫主设备进入等待状态。直到从设备释放时钟线,通信才能继续
SPI是单主设备的通信协议,总线中只有一支中心设备能发起通信,当SPI主设备想读/写从设备时,需要通过拉低SS线
SPI有四个工作模式决定是在时钟脉冲的那个边沿进行采用输出数据,根据时钟相位和时钟极性确定
SPI没有速率限制
一般是10-20M 极限可达到30M
IIC和SPI的区别
1.IIC只有两根新。SPI四根线,(硬件资源浪费)
2.SPI是全双工,IIC是半双工,速率方面SPI胜