IIC与SPI 相同点
1.均采样串行,同步的方式
2.均采样TTL电平,传输距离和应用场景类似
3.均采样主从方式工作
不同点
1.IIC为半双工,SPI为全双工
2.IIC有应答机制,SPI无应答机制
3.IIC通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号来寻址(硬件资源占用多,节约时间)
一、IIC总线通信过程
1.主机发送起始信号启用总线
2.主机发送一个字节数据(8位)指明从机地址(7位)和后续字节(1位)的传送方向,0表示主机发送信号,1表示主机接收信号。
3.被寻址的从机发送应答信号回应主机
4.发送器发送一个字节数据
5.接收器发送应答信号回应发送器
…… ……(循环步骤4,5)
n.通信完成后主机发送停止信号释放总线。
二、起始信号和终止信号
SCL为高电平时,SDA由高变低表示起始信号
SCL为高电平时,SDA由低变高表示停止信号
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线处于空闲状态。
三、字节传送与应答
时钟信号高低电平循环,SCL为高时,数据线信号不能发生变化;SCL为低时允许数据线信号变化。(SCL为高时,SDA电平改变 会产生起始信号或终止信号,信息传送混乱。)
发送器完成一个字节的数据传输后,接收器的数据线必须产生一个低电平的应答来回应发送器。即一次传输需要9位。
四、SPI
cs为片选端(使能端),MOSI(M output S input)主发从收,MISO与之相反。
产生时钟的一侧称为主机,另一侧称为从机。总是只有一个主机(一般来说可以是微控制器/MCU),但是可以有多个从机(后面详细介绍);一个字节传送完成后无需应答即可开始下一个字节的传送;
数据的采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低)。具体要看对SPI的配置;
-
主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从
MOSI
信号线上进行发送到从机; -
主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过
MISO
信号线发送;
时钟极性 CKP/Clock Polarity
根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;
CKP = 0:时钟空闲IDLE为低电平 0;
CKP = 1:时钟空闲IDLE为高电平1;
时钟相位 CKE /Clock Phase (Edge)
除配置串行时钟速率和极性外,SPI主设备还应配置时钟相位(或边沿)。根据硬件制造商的不同,时钟相位通常写为CKE或CPHA;
顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;
CKE = 0:在时钟信号SCK的第一个跳变沿采样;
CKE = 1:在时钟信号SCK的第二个跳变沿采样;