i2c和spi通信协议的特点及区别

一、i2c总线

i2c是由Philips公司提出的双线多主机、同步、半双工、串行低速率、非差分信号的通信总线。广泛应用于传输速率要求不高、传输距离短的场合,最大优势是可以在总线上扩展多个外围设备的支持。如soc外部的各外围设备与soc之间的通讯,常见的各种物联网传感器芯片(如gsensor、温度、湿度、光强度、酸碱度、烟雾浓度、压力等)均使用I2C接口和主SoC进行连接。

双线多主机:i2c由SCL同步时钟线以及SDA数据传输线两天通讯线构成(不算地线的话),其通信双方有主从之分,且通信由主机主导,从机只是被动响应。SCL总线提供同步时钟,由通讯主机发起,SDA线为数据总线,用以传输数据,这两条总线在空闲状态下都是高电平(这是因为其电路结构为开漏输出的漏极通过上拉电阻接电源,因此空闲时均为高电平)。一个i2c总线结构中可以同时挂接多个机器,每个机器都并联在SCL和SDA上,每一个机器都可以成为主机/从机,但总线在同一个时间点上只能被通讯的两个主、从机器所占用,其他机器就处于等待状态。

同步:主从机通讯是要在SCL信号下保持同步的,因此为同步通讯。

半双工:通讯时主机既可以向从机写,也可以从从机读,但是由于只有一条数据线,所以读写操作不可能同时进行,只能通过分时复用的方式,因此不是全双工,而是半双工。

串行低速率:SDA数据线上每次允许发送的数据长度为8位1字节,每发送一字节数据,数据是依次一位传输的,一个字节数据中高位在前,低位在后,为串行通讯,通讯速率较慢,一般为几百kbps,高速模式下也只能达到3.4Mbps。

非差分信号:因为I2C通信速率不高,而且通信双方距离很近,所以使用电平信号通信。

通讯的一些机制:

1、唯一地址标识

每一个接入i2c总线的设备都有唯一地址标识符,由7位二进制数表示。当主机要与目标设备通信时就会广播目标地址,其他设备会将目标地址与自身地址相比较,匹配者需要发送应答信号以告知主机,其他设备则处于等待状态。

2.有效信号机制

i2c通信协议规定,当SCL信号处于高电平时,SDA数据线上的数据是有效数据,此时不允许更改SDA上的数据信号,当SCL信号处于低电平时,才允许改变SDA上的数据信号。

3.起始、停止信号与应答机制

主机负责发送通讯起始与停止信号以启动、停止本次通讯。起始信号为:SCL处于高电平时,SDA上的信号经历一个由高到低的跳变,这标识着本次通讯开始;SCL处于低电平时,SDA上的信号经历一个由低到高的跳变,这标识着本次通讯停止。在主机发出通讯开始信号后,紧接着会发送由7位目标地址与一位读写(0为写,1为读)控制位组成的8位数据,其他非主机会将目标地址与自身地址相比较,比较匹配者即为此次通讯的从机方,从机要通过SDA线向主机发送一位数据的应答位(拉低SDA线),然后开始通信,每次发送方发送一字节长度的数据给接收方,接收方接受后要发送一位应答位给发送方。

4、仲裁机制

当同时有多个设备发送数据时,有可能出现总线资源抢占现象,此时i2c的线路结构就决定了发送低电平的设备有效,因为此时发送的高电平是无法显现的,所以发送高电平的设备将被隐藏,其数据无效,发送地电平有效。

 

 

二、spi总线

spi总线协议是由摩托罗拉公司发起的四线单主机、同步、串行、全双工、较高传输速率的传输协议。

四线单主机:spi通信由SCLK同步时钟线、MISO、MOSI数据线以及ss片选线构成,其通讯双方有主从之分,通讯由主设备引导,从设备被动响应,且只有一台设备可作为主设备,其他设备均为从设备,每次通讯主设备通过片选线来确定从设备。

同步:主从设备间的通讯要和SCLK同步时钟信号保持同步,SCLK信号由主设备发出。因此为同步传输。

串行:spi通信时每次传输8位一字节长度的数据,高位在前,地位在后,为串行通讯。

全双工:spi通讯中有两条数据线,MISO和MOSI,可以实现主、从机同时发送、接受数据,因此是全双工的。当SPI主设备想读/写[从设备]时,它首先拉低[从设备]对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。

spi通讯和i2c通讯相比,传输速度较快,一般可达Mbps。

 SPI有四种操作模式——模式0、模式1、模式2和模式3,它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低)。每种模式由一对参数刻画,它们称为时钟极(clock polarity)CPOL与时钟期(clock phase)CPHA。

[主从设备]必须使用相同的工作参数——SCLK、CPOL 和 CPHA,才能正常工作。如果有多个[从设备],并且它们使用了不同的工作参数,那么[主设备]必须在读写不同[从设备]间重新配置这些参数。以上SPI总线协议的主要内容。SPI不规定最大传输速率,没有地址方案;SPI也没规定通信应答机制,没有规定流控制规则。事实上,SPI[主设备]甚至并不知道指定的[从设备]是否存在。这些通信控制都得通过SPI协议以外自行实现。例如,要用SPI连接一支[命令-响应控制型]解码芯片,则必须在SPI的基础上实现更高级的通信协议。SPI并不关心物理接口的电气特性,例如信号的标准电压。在最初,大多数SPI应用都是使用间断性时钟脉冲和以字节为单位传输数据的,但现在有很多变种实现了连续性时间脉冲和任意长度的数据帧。

 

你可能感兴趣的:(协议总线:spi,i2c)