【嵌入式基础小知识】I2C 大战 SPI

When others fear I greed, the greedy when I fear.
别人贪婪我恐惧,别人恐惧我贪婪。
沃伦 - 巴菲特

I2CSPI 的天才对决

上擂台赛之前,我们先来了解一下双方的背景和实力:

下面进入正题,正式开始 PK

  • 身世?
    都有曾经的大宗门背景(真是应了那江湖传言:“一流的公司定标准”),I2C 诞生于 PHILIPS 公司(现归属于 NXP),SPI 则由 Motorola 公司设计。

  • 外貌(物理层实现)?
    (当然主机与从机都是要共同接地线的,下面仅讨论信号线)
    I2C 为二线制:SCLSDA
    在物理实现上,SCL 线和 SDA 线都是漏极开路(open-drain),这个一般需要软件将 GPIO 接口配置成这个模式,通过上拉电阻外加一个电压源。当把线路接地时,线路为逻辑0,当释放线路,线路空闲时,线路为逻辑1。基于这些特性,IIC设备对总线的操作仅有“把线路接地”——输出逻辑0。

    SPI 为四线制:SCLKMOSIMISOSS(片选信号线)。
    加上SS(片选信号线)的 SPI 会显著拥有更快的传输速度。但从这个点来说,如果总线上的从设备很多,I2C 总线是更节省硬件成本的,同时电路也更简单。
    SPI 总线不需要增加额外的电路连接,直接信号线对接好就行了。

  • 能否同时收发?
    I2C 只有一根数据线,所以只能处于半双工模式,不能同时收发数据。
    SPI 有两根数据线,支持全双工模式,可以同时收发数据。

  • 协议的标准程度?
    I2C 标准化程度非常高,协议几乎标准化定义了传输协议的所有细节。这么说吧,如果你有一个 I2C 的从机设备,你只需要知道从机的地址,就能够与其通信,当然如果你要获取或者控制设备,你还是需要知道从机设备的寄存器的功能和使用。在嵌入式开发领域,很多开发者放弃芯片自带的硬件 I2C,而是选择使用 GPIO 模拟的方式实现,这是因为使用软件模拟的方式几乎可以实现一个通用的 I2C 代码模块,很方便的在各种芯片里面移植使用, I2C 的标准化程度之高可见一斑。

    相较于 I2CSPI 的标准化程度稍逊一筹。与IIC不同,SPI没有明文标准,只是一种事实标准,对通信操作的实现只作一般的抽象描述。下面是描述的是 SPI 的四种模式,可见如果你要使用 SPI 协议的从设备,你还得好好看看对应设备的规格书,注意一下一些实现上的细节。

    SPI有四种操作模式:模式0、模式1、模式2和模式3。它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(即时钟信号无效时是高还是低)。每种模式由一对参数刻画,它们称为时钟极(clock polarity)CPOL与时钟期(clock phase)CPHA。主从设备必须使用相同的工作参数——SCLK\CPOL和CPHA,才能正常工作。如果有多个从设备,并且它们使用了不同的工作参数,那么主设备必须在读写不同从设备间重新配置这些参数。

  • 是否有地址的概念?
    I2C 存在地址的概念,这里的地址针对从机设备而言,主机设备通过发送从机地址来实现与目标设备的通信,所以双方需要应答机制来保证通信的有效执行。
    SPI 则不存在地址的概念,所以需要SS(片选信号线)来选中具体的从机设备,有这物理机制的加成,SPI 线则不需要地址,也不会有应答(所以 SPI 主设备甚至并不知道指定的从设备是否存在)。

  • 天下武功,唯快不破,那谁更快呢?
    对于 I2C 而言,最初的标准定义总线速度为100kbps。经历几次修订,主要是1995年的400kbps,1998的3.4Mbps,所以 I2C 最高的速度也就快速+模式(1Mbps)和高速模式(3.4Mbps)。
    SPI 在这方面则完全没有限制自己,SPI不规定最大传输速率,SPI没有定义速度限制,一般的实现通常能达到甚至超过10Mbps。所以一般在比较高速的通信场合使用。

    IIC 和 SPI 不快不慢,但好在其结构简单,“够用就好”的也是其存在并被广泛应用的原因。

  • 使用场合
    和Ethernet、USB等传输速度达数百上千兆字节每秒的总线相比,两者非常适合近距离低速芯片间通信。。非要区分的话, SPI 适合数据流应用,就嵌入式而言,我们常常看到 Flash 存储芯片、显示屏驱动芯片等数据量稍大的设备使用 SPI 通信,而 I2C更适合“字节设备”的多主设备应用,多见于一些传感器设备。

参考资料

更多精彩内容,更多惊喜,请关注公众号《嵌入式小散修》
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值