SPI 与 I2C总线区别

 
  SPI来源于MOTOROLA、I2C来源于PHILIPS.
      SPI(Serial PeripheralInterface--串行外设接口)总线系统是一种同步串行外设接口,它可以使 MCU与各种外围设备以串行方式进行通信以 交换信息。外围设置FLASH、RAM、 网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线CS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
      I2C的数据输入输出用的是一根线,SPI则分为dataIN和dataOUT。由于这个原因,采用I2C时CPU的端口占用少,SPI多一根。但是由于I2C的数据线是双向的,所以隔离比较复杂,SPI则比较容易。所以系统内部通信可用I2C,若要与外部通信则最好用SPI带隔离(可以提高抗干扰能力)。但是I2C和SPI都不适合长距离传输。长距离时就要用485了。

SPI <wbr>I2C

   SPI最高速度达5M位/秒.


    I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。

   I2C速度在10--400K,数据的传输速度可以由主机的时钟速度决定,但如果从机不愿意,也可以以自己的方式----拉低SCL来阻止主机时钟速度过快。当然,从机能阻止主机的前提是主机要检测总线SCL线电平后才决定是否发、什么时候发下一个时钟脉冲的。其中,在硬件上必须使用“线与”才能解决从机拉低时能阻止主机时钟速度的功能。

SPI <wbr>I2C

   “线与”还用来实现多的从器件共享总线.


摘自: http://blog.sina.com.cn/s/blog_4f8663eb01008tgy.html


1、SPI(Serial Peripheral Interface串行外围接口):高速、全双工、同步串行口。
三或四个信号用于数据交换:
SIMO:从进,主出
SOMI:从出,主进
UCLK:时钟,由主机驱动,从机用它发送和接收数据
STE:从机发送允许,用于四线模式中控制多主从系统中的多个从机

三线SPI组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。
SPI总线可以实现多个SPI设备互相连接。
提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。

主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。四线SPI模式用附加控制线,来允许从机数据的发送和接收,它由主机控制。
SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信。
    如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。

UART需要固定的波特率,而SPI则无所谓,因为它是有时钟的协议。
SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

2、I2C(Inter IC Bus)接口定义:
I2C总线是双向两线(SCL——串行时钟、SDA——串行数据线)制同步串行总线,具有竞争检测和仲裁机制,可使多个主机任意同时发送数据而不破坏总线上的数据信息。非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
特点:
A、每个连到总线上的器件都可由软件唯一的地址寻址,并建立简单的主从关系。主器件既可作为发送器,又可作为接收器。
B、同步时钟允许器件通过总线以不同的波特率进行通信
C、同步时钟可以作为停止和重新启动串行口发送的握手方式
D、连接到同一总线上的集成电路器件数只受400PF的总大总线电容的限制
    如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。

注:组成I2C总线的串行数据线SDA和串行时钟线SCL必须经过上拉电阻Rp接到正电源上,连接到总线上的器件的输出极必须为“开漏”或“开集”的形式,以便完成“线与”的功能。

I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。

各种接口之间的区别如下:

1、UART和USART两个别区说不出来,USART是新出的,不过区别在什么地方我也搞不清楚。UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。在多机通信上面用的最多。

2、SPI接口和上面UART相比,多了一条同步时钟线,上面UART的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。

3、I2C接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。一般单片机系统里主要用来和24C02等小容易存储器连接。

摘自: http://blog.21ic.com/user1/5473/archives/2009/55336.html


牛人们的意见吧!
    wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
    quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值