I2C SPI UART串行接口对比分析

0 SPI

SPI:串行外转接口,允许以全双工方式实现数据与各种外围设备高速数据传输。由3根线组成,(串行时钟)SCLK、(串行数据输出)SDO和(串行数据输入)SDI组成,当然对于多个从设备而言,会添加一根SS片选信号。SDO和SDI都是基于时钟脉冲SCLK完成数据,且是一比特比特传输。而且SCLK只能由主设备控制。

       特点包括如下几点

  • l  采用主从方式,且由主设备控制SCLK。
  • l  全双工的同步方式传输数据,全双工就是指主设备发送数据时也会接收到从设备的数据。而之所以称为同步是因为传输数据必须严格根据时钟,以及时钟极性和时钟相位(CPHA)控制两个SPI设备间何时交换数据。
  • l  数据交换方式,之所以称为数据交换是因为在发送完一比特数据后也会接收到一比特数据。所以SPI没有读写区分,因为发送完一比特就会接收到一比特。
  • l  接收方式:只要发生了数据传输完成事件,都要去SPI设备相应的寄存器中读取数据,即使数据没有意义。

重点介绍下SPI的工作模式。虽然是依靠SCLK完成传输,但是由于时钟极性和时钟相位的不同衍生出了四种工作模式,传输时序。

CPOL: 时钟极性, 表示 SPI 在空闲时, 时钟信号是高电平还是低电平. 若 CPOL 被设为 1, 那么该设备在空闲时 SCK 管脚下的时钟信号为高电平。当 CPOL 被设为 0 时则正好相反。

CPHA: 时钟相位, 表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样。若 CPHA 被设置为 1, 则 SPI 设备在时钟信号变为下降沿时触发数据采样, 在上升沿时发送数据。当 CPHA 被设为 0 时也正好相反。


1 I2C

       I2C,基于两线(SDA和SCL)的串行通信协议。其最大的优点在于只需要两根线,降低了互联成本。

       其特点:

       某次通信过程中,主设备和从设备与硬件连线无关(对比SPI)。

       每个设备独立编址,广播地址为全0。

       有较为复杂的协议控制,如先发地址,而且地址最后一位代表是读还是写,然后每发送完1字节从设备需要回复一个ACK。也正是基于上述几点使得I2C适合组建小型的网络。

       开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

       结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。


       应答信号: Master每发送完8bit数据后等待Slave的ACK。即在第9个clock,若从IC发ACK,SDA会被拉低。若没有ACK,SDA会被置高,这会引起Master发生RESTART或STOP流程,如下所示:


I2C写流程

写寄存器的标准流程为:
1.    Master发起START
2.    Master发送I2C addr(7bit)和w操作0(1bit),等待ACK
3.    Slave发送ACK
4.    Master发送reg addr(8bit),等待ACK
5.    Slave发送ACK
6.    Master发送data(8bit),即要写入寄存器中的数据,等待ACK
7.    Slave发送ACK
8.    第6步和第7步可以重复多次,即顺序写多个寄存器
9.    Master发起STOP

写一个寄存器

写多个寄存器


I2C读流程

1.    Master发送I2C addr(7bit)和w操作1(1bit),等待ACK
2.    Slave发送ACK
3.    Master发送reg addr(8bit),等待ACK
4.    Slave发送ACK
5.    Master发起START
6.    Master发送I2C addr(7bit)和r操作1(1bit),等待ACK
7.    Slave发送ACK
8.    Slave发送data(8bit),即寄存器里的值
9.    Master发送ACK
10.    第8步和第9步可以重复多次,即顺序读多个寄存器
读一个寄存器


读多个寄存器

       具体以AT24C02为例,讲解其传输逻辑,如下图所示。

 

2 UART

       通用异步传输协议,收发器。较为简单,由两线组成,TxD和RxD,设备交叉连接。由起始们、奇偶校验位、数据位、停止位组成。同时如果使用了RTS、CTS等流控信号线则更为复杂,有待补充。

       它使用的电平标准是TTL/CMOS逻辑电平标准,(0~5v、0~3.3v、0~2.5v或0~1.8v)来表示数据,高电平表示1,低电平表示0。为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOD逻辑电平转换为RS-232逻辑电平,3~12v表示0,-3~-12v表示1。这也就是UART和RS232的区别和联系。数据传输流程如下:

(1)平时数据线处于空闲状态(1状态)

(2)当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间,这样接收方检测到开始位后,在等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。

(3)UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将他们发送出去,首先发送最低位。

(4)如果使用校验功能,UART在发送完数据后,还要发送1位校验位。有两种校验方法:奇校验、偶校验——数据位连同校验位中,1的数据等于奇数或偶数。

(5)最后,发送停止位,数据线恢复到空闲状态(1状态)。停止位的长度有3种:1位、1.5位、2位。

3 对比

       如下表所示。

 

SPI

I2C

UART

电气信号线

4线:SS、SCLK、SDO和SDI

2线:SCL、SDA

2线:TXD、RXD

工作模式

全双工

半双工

全双工

组网

规模有限

支持128个设备组成的网络(地址是7位)

 

寻址模式

通过片选信号

发送具体地址

 

传输速率2

几Mbps但是比I2C快

标准速度:100kbps

快速模式:400kbps

高速模式:3.4Mbps

RS232:<20kbps

RS422:最高10Mbps

RS485:最高10Mbps

注:关于传输速率,其实SPI应该根据Master芯片能发起的频率以及Slave能接受的频率,但是肯定的是它一般大于I2C传输频率。对于其它总线传输频率,如下。

l  USB总线

   USB1.1:

-------低速模式(low speed):1.5Mbps

-------全速模式(full speed): 12Mbps

USB2.0:向下兼容。增加了高速模式,最大速率480Mbps。

-------高速模式(high speed): 25~480Mbps 

USB3.0:向下兼容。

-------super speed :理论上最高达4.8Gbps,实际中,也就是highspeed 的10倍左右。

Ethernet,也就是通常的网速。

--------早期的以太网传输速率只有10Mbps

--------百兆网:理论上最大100Mbps

--------千兆网:理论上最大1Gbps

l  SD总线:最高能达10Mbps。

l  SATA接口:

--------SATA1.0:理论传输速度是150MB/s(或者1.5Gb/s),实际也就30MBps。

--------SATA2.0: 300MBps,即3Gbps。实际也就80MBps。

--------SATA3.0: 600MBps,即6Gbps。

--------eSATA:理论传输速度可达到1.5Gbps或3Gbps。

l  PCI总线

--------PCI:32位,33MHz时钟频率,速率是33*4 = 133MBps,即1Gbps。

-------- PCI 2.1:64位,66MHz时钟频率来说:速率是66*8 = 528MBps,即4Gbps。

4 参考文献

[1] http://blog.csdn.net/skyflying2012/article/details/11710801

[2] http://blog.chinaunix.net/uid-20672257-id-3072937.html

[3] http://blog.csdn.net/xukai871105/article/details/15028117

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值