I2C和SPI

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SPI/I2C总线
虽然现实世界中的信号都是模拟信号,但是越来越多的模拟IC产品通过数字接口实现通讯。

微处理器通过几条总线控制周边的设备,比如:模/数转换器(ADC),数/模转换器(DAC),智能电池,端口扩展,EEPROM以及温度传感器。

与数据的平行传输接口不同,串行数据通过两条、三条或者四条数据/时钟总线连续地传输比特数据。

虽然并行的总线具有传输速度快的特点,但是串行总线具有使用较少的控制和数据线的优点。

2线和3线的总线在大多数微处理器上应用于收发数据。

串行接口在提供串行时钟的主设备和从设备/周边设备之间的进行通讯。

串行接口有三种:三线、二线和单线。

本文着眼于二线和三线的串行接口。

三线的接口包括:片选线(CS或SS)、时钟线(SCLK)和数据输入/主设备输出线(DIN 或MOSI)。

三线接口有时也包括一条数据输出/主设备输入线(DOUT或MISO)。

包含DOUT线的三线接口有时也叫做四线接口。

为了叙述的简便,本文将三线接口和四线接口统称为三线接口。

二线接口包括一条数据线(SDA或SMBDATA)和一条时钟线(SCL或SMBCLK)。

串行外设接口(SPI),队列串行外设接口(QSPI)和MicroWire(或MicroWire/Plus)接口都是三线接口。

芯片间总线(I2C)和SMBUS都是二线接口。

这些串行接口拥有各自的优点和缺点,见表1。

三线接口可以以更高的时钟频率工作,并且不需要上拉电阻。

SPI/QSPI和MicroWire接口都可以工作在全双工模式(数据可以在同一时间发送和接收)。

而且三线接口是边沿触发的而不是电平触发,因此具有更强的抗干扰能力。

三线接口的主要缺点是它要为每一个从设备提供一条片选线,除非将从设备用菊链形式连接。

另外一个缺点是三线接口没有应答机制去判断数据的收发是否正确。

二线接口的优点是使用更少的连线,这一点在紧凑的设计中尤为重要,比如:手机、光纤的应用,因为二线接口为每个从设备分配唯一的地址,所以可以实现一根总线连接多个从设备而不需要片选线。

二线接口在成功读写之后传输一个应答位,因为二线接口只有一条数据线,所以它只能工作在半双工模式(数据的读写不可以同时进行)。

二线接口是电平触发的,所以在嘈杂的环境中如果数据认证错误,可能造成问题。

主设备和从设备经由多条总线通过串行接口进行通讯。

在写周期,主设备使用自身的时钟和数据将数据传至从设备。

在读周期,从设备传输数据至主设备。

当多个从设备接入总线时,每个三线接口的从设备需要专属的片选线(CS)。

如图1所示,从软件的角度出发,对于单一主设备和单一从设备之间的通讯,三线制的接口比二线制的接口更简单、有效。

串行外设接口(SPI)、队列串行外设接口(QSPI)和MicroWire(或MicroWire/Plus)接口由Motorola 制定的串行外设接口被很多流行的处理器和微控制器所采用,比如MAXQ2000和MAXQ7654。

SPI接口需要两条控制线(CS和SCLK)和两条数据线(DIN/SDI和DOUT/SDO)。

Motorola的标准称DIN/SDI数据线为MOSI(主设备出,从设备入),DOUT/SDO 数据线为MISO(主设备入,从设备出),CS线为SS(从设备选择)。

为了叙述的清晰,在这里从从设备的角度出发说明三线接口的数据线。

DIN是从设备的数据输入线,DOUT 是从设备的数据读出线。

这里我们使用CS,SCLK,DIN和DOUT来定义三线接口中的各条线。

大多数的SPI接口有两位设置位,时钟极性(CPOL)和时钟相位(CPHA)用于设定从设备何时采样数据。

CPOL决定SCLK为高时总线为空闲(CPOL=1)还是SCLK为低时总线为空闲(CPOL=0)。

CPHA决定在SCLK的哪一个边沿数据移入、移出。

当CPOL=0时,将CPHA设为0,表示在SCLK的上升沿将数据移入从设备;将CPHA设为1,表示在SCLK 的下降沿将数据移入从设备。

CPOL和CPHA的两个状态允许四种时钟极性和相位的不同组合。

每一种都与其他三种不兼容。

为了实现主、从设备间的通讯,主、从设备的CPOL和CPHA必须有相同的设置。

在SPI接口的大多数应用中,SPI接口一次传送八个比特(一个字节),有一些微处理器一次传送两个或多个字节。

例如,MAXQ2000和MAXQ7654微处理器可一次传送8或16个比特。

当CPOL=0、CPHA=0,CS由高跳变为低,开始一个主设备到从设备的传输过程。

在SCLK信号高低变化的八个周期内,CS信号必须保持为低。

DIN数据锁定在SCLK信号的上升沿。

在同样的八比特的周期内,DOUT线上的从设备输出数据在SCLK的每个下降沿有效。

图2a给出了CPHA=1时的详细时序。

图2b给出了CPHA=0时的详细时序。

因为总线上的每一个IC需要专属的片选线,所以CS被用做每个从设备的使能信号。

如果一条总线上有四个从设备,则需要四条片选线。

如果从设备的片选线CS为高,该从设备就忽略SCLK线上的数据,将DOUT置为高阻。

部分三线接口设备可以链接成菊链的方式。

区别于为每个从设备提供片选线,菊链方式实现用一根片选线和一根数据线控制多个串连的从设备。

在菊链结构中必须有DOUT线,如图1所示,从设备1的DOUT线连接到从设备2的DIN线,如此反复。

SPI标准中没有定义最大数据速率。

外部设备定义了自己的最大数据速率,通常为兆赫量级。

微处理器可以适应很宽范围的SPI数据速率。

在利用SPI接口进行通讯时,从设备无法降低主设备的数据速率或是声明一个适当的速率。

QSPI标准和SPI标准非常相似。

事实上,外设无法区分QSPI总线和SPI总线。

与SPI标准中的主设备不同,QSPI中的主设备允许数据通过可编程的片选线传递。

QSPI的主设备甚至可以传送长度在8位和16位之间的数据,而SPI的主设备只可以传送8位的数据。

可以配置QSPI的设备去连续传送长度超过16字节的数据(最大为256位)。

这种传输完全由QSPI 设备的配置来实现,不需要MCU的操作。

与SPI接口相似,QSPI接口也没有规定最大数据速率。

由国家半导体公司制定的旧的MircoWire标准和SPI标准非常相似。

不同的是MicroWire标准的时钟极性和时钟相位是固定的(CPOL=0和CPHA=0)。

DIN的数据读取总是锁定在SCLK的上升沿。

DOUT的数据输出总是在SCLK的下降沿。

MicroWire标准没有规定最大数据速率。

芯片间电路接口(I2C)
不同于全双工的三线制接口,由Philips制定的I2C接口通过一条数据线(SDA)和一条时钟线(SCL)实现半双工的通讯。

I2C接口定义了一个简单的主/从设备的双向通讯接口。

在这个体系中,MCU决定自己为主设备(写模式)或为从设备(接收模式)。

每个从设备具备专有、
唯一的地址,使主设备可以和多个从设备通过一条总线进行通讯,而不需要为每一个从设备提供单独的片选线。

如图3所示,从设备的数目只受限于最大线上电容(400pF)。

I2C接口的机制基于7位或10位的地址,7位的地址更为常见。

在7位地址的机制中,总线上可以接127个不同的外设。

图3 利用数据输入/输出和时钟信号线实现通讯的二线接口(略)
SCL和SDA线为漏极开路结构,所以闲置时必须为高。

当电源电压为3V时,连接一个1k 或更大阻值的上拉电阻;当电源电压为5V时,连接一个1.6k或更大阻值的上拉电阻。

当SCL为高,SDA从高变为低,即发出了一个开始命令,I2C接口开始通讯。

如图4所示,每一个SCL时钟传输一个数据位,传输一个字节至少需要9个数据位。

一个写周期包括8个数据位和一个应答位(ACK)或者非应答位(NACK)。

如图4b所示,当数据在I2C总线上传输时,在SLK的上升沿写入从设备,在SLK的下降沿从设备输出。

在SCL时钟周期为高电平的时间内,SDA线的数据不可以改变。

一次传输的完成必须跟随着一个中止或重新开始的命令,即SCL为高时,SDA由低变为高。

当总线空闲时,SDA和SCL都为高。

I2C的写周期开始于一个开始命令,随后是7位的从设备地址和第8位用于标识是读操作还是写操作。

将第8位设为低,说明是一个写操作;将第8位设为高,说明是一个读操作。

主设备在第8个时钟周期后将总线释放。

如果从设备要求通讯,则在第9个时钟周期将SDA 置低。

如果从设备不需要通讯,则将SDA线释放。

主设备就再次写入8位命令,并跟随着第二个ACK/NACK位。

然后,主设备再写入8位的命令,跟随着第三个ACK/NACK位。

数据位和最后的应答位完成了读/写周期,将外设的数据更新。

图5a是一个写周期的详细例子。

一个I2C读周期开始于一个开始命令,随后是要写入的从设备的地址和置高的第8位,表示为读操作。

在ACK/NACK位之后,主设备写入要寻址某个从设备寄存器的命令。

在第二个ACK/NACK位后,主设备重新写入一个从设备的地址。

在第三个ACK/NACK位后,从设备控制总线写8位数据在总线上。

如图5b所示,当从上一个读操作的从设备寄存器中读取数据时,主设备只需要在读取从设备之前写入从设备的地址。

I2C接口可支持慢速(大于100kHz),快速(大于400kHz)和高速(大于3.4MHz)三种数据速率。

I2C接口的高低电平为CMOS逻辑电平(低于0.3*电源电平为低电平,高于0.7*电源电压为高电平)。

I2C接口和SMBus接口的最主要区别是最大空闲时间和最小时钟速度。

因为I2C总线为被动形总线,所以不存在最大空闲时间问题,它可以以近似直流的速率工作。

SMBus接口则存在最大空闲时间问题。

当从设备的时钟信号为低的时间长于最大空闲时间(最长为35ms),从设备将接口复位。

SMBus的对最大空闲时间的定义意味着约定了数据的最小速率。

SMBus的最小速率是10kHz。

然而,I2C接口的主设备或从设备可根据传输数据的需要延长时钟周期。

系统管理总线(SMBus)
Intel制定了SMBus标准用于低速通讯。

SMBus二线接口与I2C接口非常相似。

SMBus也使用一条数据线(SMBDATA)和一条时钟线(SMBCLK)实现通讯。

I2C接口和SMBus 接口的主要区别是最大和最小时钟速度。

SMBCLK必须在10kHz和100kHz之间。

SMBCLK和SMBDATA线也需要上拉电阻。

3V供电时上拉电阻大于8.5k ,5V供电时上拉电阻大于14k 。

SMBus工作电压范围在3V和5V之间,大于2.1V为高电平,低于0.8V 为低电平。

外设举例
微处理器经常通过串行接口同外设进行通讯。

当微处理器通过二线或三线接口读写外设后,外设相应地改变其模拟或数字的输出。

例如,外设设置电池充电的电流和电压,用温度传感器控制风扇,设置数模转换的模拟输出。

如图6所示,通过二线接口连接微处理器和一个8位的数模转换器(MAX5115)。

因为这个数模转换器有四个地址选择引脚以产生16个唯一的从设备地址,所以可以并联16个数模转换器。

因为MAX6641有不同的从设备地址,所以同样的二线接口也可以设置SMBus温度传感器/风扇控制器(MAX6641)。

这个风扇控制器调制MOSFET的栅电压以打开或关断风扇。

图6 通过I2C接口通讯的MCU,数模转换器和风扇控制器(略)
三线接口需要单独的片选线实现微处理器和多个并行的从设备之间的通讯,更简单的二线接口用同一条时钟线和数据线与线上的每一个设备进行通讯。

可以通过设定不同的从设备地址在总线上连接多个IC。

大多数的I2C接口外设具备地址选择引脚,以实现从设备地址的分配。

外设可以使用的从地址数等于地址选择引脚数的平方。

例如,若外设有两个地址选择引脚,它就可以被分配四个不同的地址。

新的设计以更少的地址选择引脚提供更多的从地址。

MAX7319是输入/输出扩展芯片,可以从两个地址选择引脚(AD2和AD0)扩展出16个从地址。

这些引脚可以被接到GND,电源,SDA或SCL上。

表2详细描述了这16个从地址的信息。

虽然A6,A5和A4位固定为110,A3-A0位可以被AD2和AD0所设置。

未来的改进
三线接口和二线接口有几点不同的要求,每一点都带来特殊的优势。

在未来不会有一种接口标准可以完全取代其他的接口标准。

具备I2C接口的器件正以更快的速度发展,它们开始融合SMBus接口的特点,开始支持诸如最大空闲时间复位的功能,使接口可以根据需要实现关断。

新的I2C从设备地址长达10位,而不仅仅是7位,这给用户带来更多的灵活性。

三线接口和二线接口将并存,但是I2C接口似乎可以继续扩大市场份额,大部分的微处理器将支持二线接口。

I2C接口的易用性及更少的总线数可能使其超过SPI接口。

相关文档
最新文档