I2C与SPI都是串行总线
SPI:4根线,1x 时钟,1x 片选,2x 信号
SPI2根信号线,全双工,两根信号线完全独立
SPI是主从模式,一主多从
I2C:2根线,硬件的简单通过软件的复杂弥补;没有片选
I2C也是主从工作模式,一主多从,每一个设备都可当作主设备,只是同一时刻只有一个允许当作主设备;
I2C如何选择与哪个从设备进行通信?软件里面需要定义一个地址,即I2C中通常会先发送从设备的地址信号,只是没有片选信号。
I2C只有一根信号线,半双工通信,采用应答方式。即主设备给从设备发送信号,等待从设备应答,等到应答后才再发。如果主设备想要从从设备读数据,即从设备向主设备发数据时,从设备也要等待主设备发的应答。
尤其是从设备I2C软件模拟,更复杂。
I2C起始信号:当clock为高电平时,如果信号线上出现下降沿,就认为是起始信号。
I2C停止信号:当clock为高电平时,如果信号线上出现上升沿,就认为是停止信号。
发送数据时,一般以起始信号开始,接着发地址信号(主设备发从设备的地址),接着等待从设备发回的应答。
I2C的应答分为两种,从设备给主设备发送的应答是一个低电平,主设备给从设备发送的应答是高电平(应答非/非应答)
时钟下降沿:作为发送端发数据的时刻,时钟上升沿进行读数
第一帧发地址(clock下降沿开始发数据,时钟沿上升沿读数据),下图读出的地址刚好为1010
开始后,主设备先发地址AA(10101010),从设备收到以后,接着一根低电平应答,下面蓝色的部分,之后开始发数据
发送0xCC,发完后,停止