I2C和SPI是两种不同的通信协议

2020-01-04 19:03发布

I2C和SPI是两种不同的通信协议。
一。 IIC  简介
它是由数据线 SDA 和时钟 SCL 构成的串行总线, 可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。用I2C通信的芯片最常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片。

(图1是EEPROM芯片的接法)

(图2~3是对应的单片机引脚)

I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号: 接收数据的 IC 在接收到 8bit 数据后, 向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
   
二.SPI
IF, 宋体">SPI通常有SCK时钟,STB片选,DATA数据信号三个信号。SPI总线真正实现了全双工数据传输,SPI 有3线跟4线两种,4线的话,就是多了一条叫SDC的线,用来告知从设备现在传输的是数据还是指令。这个接口较快,可以传输较连续的数据。SPI要想连接多个从设备,就需要给每个从设备配备一根片选信号。如果要可以实现全双工,也是需要多加一根数据线(MOSI MISO)。SPI通信芯片的引脚名称不一定都是这几个名称,可能还有会别的名称,但是意思是一样的,例如MOSI引脚的意思是“主机输出从机输入”,某个SPI接口的芯片就有可能会写成SDI,因为这个SPI器件是作为从机的,所以它的SDI的意思就是“从机数据输入引脚”。
SPI通信过程为:把CS引脚拉低,然后SCK输出时钟,然后就可以在MOSI引脚上输出数据,同时可以在MISO上获得数据了。

(图4是一个SPI FLASH芯片,DO是MISO,DI是MOSI,CLK是SCK,功能一样,叫法不一样而已)

(图5单片机接法)


下面主要总结一下2种总线的异同点:
1 iic总线不是全双工,2根线SCL SDA。spi总线实现全双工,4根线SCK CS MOSI MISO
2 iic总线是多主机总线,通过SDA上的地址信息来锁定从设备。spi总线只有一个主设备,主设备通过CS片选来确定从设备
3 iic总线传输速度在100kbps-4Mbps。spi总线传输速度更快,可以达到30MHZ以上。
4 iic总线空闲状态下SDA SCL都是高电平。spi总线空闲状态MOSI MISO也都是 SCK是有CPOL决定的
5 iic总线scl高电平时sda下降沿标志传输开始,上升沿标志传输结束。spi总线cs拉低标志传输开始,cs拉高标志传输结束
6 iic总线是SCL高电平采样。spi总线因为是全双工,因此是沿采样,具体要根据CPHA决定。一般情况下master device是SCK的上升沿发送,下降沿采集
7 iic总线和spi总线数据传输都是MSB在前,LSB在后(串口是LSB在前)
8 iic总线和spi总线时钟都是由主设备产生,并且只在数据传输时发出时钟
9 iic总线读写时序比较固定统一,设备驱动编写方便。spi总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
xiaomu
1楼-- · 2020-01-05 00:10
一头雾水,不知楼主要表达什么!
tomzbj
2楼-- · 2020-01-05 05:34
xiaomu 发表于 2019-6-27 09:42
一头雾水,不知楼主要表达什么!

发小广告的吧,先刷刷经验
didadida
3楼-- · 2020-01-05 07:26
 精彩回答 2  元偷偷看……
Ponker
4楼-- · 2020-01-05 07:38
引起不适,建议永封
epwwm
5楼-- · 2020-01-05 09:12
一头雾水,标题废话,建议永封
makesoft
6楼-- · 2020-01-05 14:05
挺好,给初学者普及知识,大家宽容些。

一周热门 更多>