IIC和SPI-近距低速芯片通信

一、IIC介绍

两根信号线:串行数据总线SDA;时钟线SCL(IIC数据传输速率有标准模式100kb/s;快速模式400kb/s;高速模式3.4Mb/s)

IIC与SPI的单主设备不同,IIC 是多主设备的总线。每一支IIC设备都有一个唯一的七位设备地址,主机利用该地址对设备进行访问。数据帧大小为8位的字节。(七位地址的最后一位确定读/写)
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据;
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。
在这里插入图片描述
起始信号后,总线上所有的从机开始等待主机紧接下来的从机地址addr广播。因为总线上每个设备的地址都是唯一的,当主机广播的地址与某个设备地址相同时,该设备就被选中,并向主机发出应答(ACK)或者非应答(NACK),主机只有在接收到应答信号后继续发送/接收数据,没选中的设备将会忽略之后的数据信号。根据I2C协议,从机地址可以是7位或者10位。
I2C通讯采用的是读写复合的格式。传输过程中主机需要发出2次起始信号:第一次传输主机通过从机地址找到从机设备,发送一段数据,这个数据是从设备内部寄存器或者存储器地址;第二次传输是对该地址进行读/写。
主机要读取从机数据时,主机会释放对SDA总线的控制,由从机控制SDA总线,主机负责接收信号;
主机要向从机设备写数据时,SDA由主机控制,从机负责接收信号。

二、SPI介绍

(MISO,MOSI,SCLK,CS)高速(可达几Mb/s)
点对点通信,SPI无需寻址,且为全双工,简单高效,在多个器件的系统中,每个从器件需要独立的使能信号, 每个从设备上都有一个片选引脚接入到主设备机中,当主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低(低电平有效)。接着开始发送工作脉冲到时钟线SCLK上提供时钟脉冲,MISO、MOSI则基于此脉冲完成数据传输,硬件上比IIC稍微复杂一些。
主要特点:同时收发数据,提供频率可编程时钟,发送结束中断标志,写冲突保护,总线竞争保护

在这里插入图片描述
CPOL=0,表示当SCLK=0时处于空闲态,SCLK=1有效。
CPOL=1,表示当SCLK=1时处于空闲态,SCLK=0有效。
CPHA=0,表示数据采样是在第一个跳变沿,数据发送在第2个边沿。
CPHA=1,表示数据采样是在第二个跳变沿,数据发送在第1个边沿。
定义了时钟脉冲在哪条边沿转换输出/输入信号、时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低)
在这里插入图片描述
SPI工作原理
在这里插入图片描述
SPI是环形总线结构,SPI接口在内部硬件上实际是两个简单的移位寄存器,传输的数据为8位,发出一位数据就会接收到一位数据,移位寄存器在旧的数据没有发完之前是不会接受新的数据的。8个时钟脉冲以后两个寄存器的内容互相交换一次。这样就完成了SPI时序。
一个从机Slave设备想要能够接收到主机Master发过来的控制信号,必须在此之前能够被Master设备进行访问。所以,Master设备必须首先通过SS/CS pin对Slave设备进行片选,把想要访问的从机Slave设备选上,在数据传输的过程中,传输以为数据就需要相对应的采样一位数据。
SPI缺点:没有指定的流控制,没有应答机制确认是否接收到数据。主从设备 必须使用相同的工作参数——SCLK、CPOL 和 CPHA,才能正常工作。


三、IIC VS SPI

  • 硬件耗费资源: IIC 只需两根信号线,而标准SPI至少四根,如果有多个从设备,信号需要更多。一些SPI变种虽然只使用三根线:SCLK, SS和双向的MISO/MOSI,但SS线还是要和从设备一对一根。另外,如果SPI要实现多主设备结构,总线系统需额外的逻辑和线路。用IIC 构建系统总线唯一的问题是有限的7位地址空间,但这个问题新标准已经解决——使用10位地址。从第一点上看,IIC赢。
  • 传输速度:如果应用中必须使用高速数据传输,那么SPI是必然的选择。因为SPI是全双工,IIC 的不是。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mb/s。
  • iic总线是多主机总线,通过SDA上的地址信息来锁定从设备。spi总线只有一个主设备,主设备通过CS片选来确定从设备
  • iic总线和spi总线数据传输都是MSB在前,LSB在后(串口是LSB在前)
  • iic总线和spi总线时钟都是由主设备产生,并且只在数据传输时发出时钟
  • iic总线读写时序比较固定统一,设备驱动编写方便。spi总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。

参考链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值