应用笔记 4024

可控制多外设的SPI/I²C总线


摘要 : 本应用笔记对两种模拟IC中常用的串行、数字接口(SPI™或3线、I²C或2线)进行了比较,每种接口在不同的设计中都表现出其优点和缺点,具体取决于数据速率、可提供的设计空间以及噪声环境等。本应用笔记给出了两种接口的区别,并举例详细说明了这些观点。

引言

虽然现实世界中的信号都是模拟信号,但是现在越来越多的模拟IC采用数字接口进行通信。串行接口的数据通信介于主机(提供串行时钟)和从机/外设之间。目前,大多数微控制器提供SPI (3线)和I²C (2线)接口,用于发送、接收数据。微处理器通过几条总线控制周边的设备,比如:模/数转换器(ADC)、数/模转换器(DAC)、智能电池、端口扩展、EEPROM以及温度传感器。与通过并口传输数据不同的是:串行接口通过2条、3条或4条数据/时钟总线连续传输数据。虽然并行接口具有传输速度快的特点,但是串行接口占用较少的控制和数据线。

串行接口的基础知识

串行接口有三种:3线、2线和单线。本文主要讨论3线和2线串行接口。串行外设接口(SPI)、队列串行外设接口(QSPI™)和MICROWIRE™ (或MICROWIRE PLUS™)接口标准均采用3线接口。芯片间总线(I²C)和系统管理总线(SMBus™)均为2线接口。这些串行接口拥有各自的优点和缺点,如表1所示。

3线接口

3线接口使用片选线(低电平有效CS或SS)、时钟线(SCLK)和数据输入/主机输出线(DIN或MOSI)。3线接口有时也包括一条数据输出/主机输入线(DOUT或MISO),这时也叫做4线接口。为了叙述的简便,本文将3线接口和4线接口统称为3线接口。

3线接口可以以更高的时钟频率工作,并且不需要上拉电阻。SPI/QSPI和MICROWIRE接口都可以工作在全双工模式(数据可以在同一时间发送和接收),一般在嘈杂环境下工作不成问题。3线接口是边沿触发,不是电平触发,因此具有更强的抗干扰能力。

3线接口的主要缺点是它要为每一个从机提供一条低电平有效的CS线,除非将从机用菊链形式连接,如图1所示(后续章节将详细讨论菊链方式)。另外一个缺点是3线接口没有应答机制去判断数据的收发是否正确。从软件设计看,在单主机/单从机应用中,3线接口比2线接口简单,效率更高。

图1. 利用数据输入、数据输出、时钟和片选信号进行通信的3线接口。
图1. 利用数据输入、数据输出、时钟和片选信号进行通信的3线接口。

2线接口

2线接口包括一条数据线(SDA或SMBDATA)和一条时钟线(SCL或SMBCLK)。2线接口的优点是使用更少的连线,这一点对于结构紧凑的设计尤为重要,比如:手机、光纤的应用。因为2线接口为每个从机分配唯一的地址,所以可以在一条总线连接多个从机而不需要片选信号。2线接口在成功完成一次读操作后会传输一个应答位。因为2线接口只有一条数据线,所以它只能工作在半双工模式(数据的读写不可以同时进行)。因为2线接口是电平触发,所以在嘈杂环境中如果发生数据位错误,可能造成问题。

表1. 3/2线接口优缺点的对比
Interface Advantages Disadvantages
3-Wire: SPI, QSPI, and MICROWIRE PLUS 1. Speed
2. No pullup resistors required
3. Full-duplex operation
4. Noise immunity
1. Larger number of bus line connections
2. Individual chip-select lines required to communicate with more than one slave at a time
3. No acknowledgment of received data
2-Wire: I²C and SMBus 1. Fewer bus line connections
2. Multiple devices share the same bus
3. Received data is acknowledged
1. Speed: SMBus limited to 100kHz; I²C limited to 3.4MHz
2. Half-duplex operation
3. Open-drain bus lines require pullup resistors
4. Reduced noise immunity

主机和从机经由多条总线通过串行接口进行通讯。在写周期,主机使用自己产生的时钟和数据将数据传至从机。在读周期,从机传输数据至主机。

SPI、QSPI和MICROWIRE设计

由Motorola®制定的SPI接口已被很多流行的处理器和微控制器采用,比如MAXQ2000。SPI接口需要两条控制线(低电平有效CS和SCLK)和两条数据线(DIN/SDI和DOUT/SDO)。Motorola的SPI/QSPI标准称DIN/SDI数据线为MOSI (主机出,从机入),DOUT/SDO数据线为MISO (主机入,从机出),CS线为SS (从机选择)。为了叙述的清晰,我们基于从机说明3线接口的数据线。DIN是从机的数据输入线,DOUT是从机的数据读出线。本文采用低电平有效CS、SCLK、DIN和DOUT来定义3线接口中的各条线,Maxim外设使用了这些引脚名称。

大多数的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接口一次传送8位数据(一个字节),有一些微处理器一次传送两个或多个字节。例如,MAXQ2000微处理器可一次传送8位或16位数据。当CPOL = 0、CPHA = 0,低电平有效CS由高跳变为低,开始一个主机到从机的传输过程。在SCLK信号高低变化的八个周期内,低电平有效CS信号必须保持为低。DIN数据锁定在SCLK信号的上升沿。在同样的8位周期内,DOUT线上的从机输出数据在SCLK的每个下降沿有效。图2a给出了CPHA = 1时的详细时序;图2b给出了CPHA = 0时的详细时序。

图2a. 3线接口时序(CPHA = 1),CPHA = 1、CPOL = 1时,3线接口在时钟的上升沿将数据移入外设,在时钟的下降沿将数据移出外设。
图2a. 3线接口时序(CPHA = 1),CPHA = 1、CPOL = 1时,3线接口在时钟的上升沿将数据移入外设,在时钟的下降沿将数据移出外设。

图2b. 3线接口时序(CPHA = 0),CHPA = 0、CPOL = 1时,3线接口在时钟的下降沿将数据移入外设,在时钟的上升沿将数据移出外设。
图2b. 3线接口时序(CPHA = 0),CHPA = 0、CPOL = 1时,3线接口在时钟的下降沿将数据移入外设,在时钟的上升沿将数据移出外设。

因为总线上的每一个IC需要专属的片选线,所以低电平有效CS被用做每个从机的使能信号。如果一条总线上有四个从机,则需要四条片选线。如果从机的低电平有效CS为高电平(禁止),该从机就忽略SCLK线上的数据,将DOUT置为高阻。

部分3线接口设备可以链接成菊链的方式,而不需要为每个从机提供低电平有效的CS线,菊链方式能够用一条低电平有效的CS线和一条数据线控制多个串联从机。在菊链结构中3线接口必须包含DOUT线,如图1所示,从机#1的DOUT连接到从机#2的DIN,如此反复。

SPI标准中没有定义最大数据速率。外部设备定义了自己的最大数据速率,通常为MHz量级。微处理器可以适应很宽范围的SPI数据速率。在利用SPI接口进行通讯时,从机无法降低主机的数据速率或确定一个适当的速率。

QSPI标准和SPI标准非常相似。事实上,外设无法区分QSPI总线和SPI总线。与SPI标准中的主机不同,QSPI中的主机允许数据通过可编程的片选线传输数据。QSPI的主机甚至可以传送长度在8位和16位之间的数据,而SPI的主机只可以传送8位的数据。可以配置QSPI的设备去连续传送长度超过16字节的数据(最大为256位)。这种传输完全由QSPI设备的配置来实现,不需要MCU的操作。与SPI接口相似,QSPI接口也没有规定最大数据速率。

由National Semiconductor公司制定的老的MICROWIRE标准和SPI标准非常相似。不同的是MICROWIRE标准的时钟极性和时钟相位是固定的(CPOL = 0和CPHA = 0)。DIN的数据读取总是锁定在SCLK的上升沿。DOUT的数据输出总是在SCLK的下降沿。MICROWIRE标准没有规定最大数据速率。

芯片间电路接口(I²C)

不同于全双工的3线制接口,由Philips制定的I²C接口通过一条数据线(SDA)和一条时钟线(SCL)实现半双工通信。I²C接口定义了一个简单的主/从双向通信接口。在这个体系中,MCU决定自己为主机(写模式)或为从机(接收模式)。每个从机具备专有、唯一的地址,使主机可以和多个从机通过一条总线进行通信,而不需要为每一个从机提供单独的片选线。如图3所示,从机的数目只受限于最大线上电容(400pF),I²C接口的机制基于7位或10位地址,7位的地址更为常见。在7位地址的机制中,总线上可以接127个不同的外设。SCL和SDA线为漏极开路结构,所以闲置时必须为高。当电源电压为3V时,连接一个1kΩ或更大阻值的上拉电阻;当电源电压为5V时,连接一个1.6kΩ或更大阻值的上拉电阻。

图3. 利用数据输入/输出和时钟信号进行通信的2线接口。
图3. 利用数据输入/输出和时钟信号进行通信的2线接口。

当SCL为高,SDA从高变为低,即发出了一个开始命令,启动I²C通信。图4a所示,每个SCL时钟传输一个数据位,传输一个字节至少需要9个数据位。一个写周期包括8个数据位和一个应答位(ACK)或者非应答位(NACK)。如图4b所示,当数据在I²C总线上传输时,在SLK的上升沿写入从机,在SLK的下降沿从机输出。在SCL时钟周期为高电平的时间内,SDA线的数据不可以改变。一次传输的完成必须跟随着一个中止或重新开始的命令,既SCL为高时,SDA由低变为高。当总线空闲时,SDA和SCL都为高。

图4a. 开始条件和停止条件,2线接口采用开始、重复开始和停止命令在主机和从机之间传输数据。
图4a. 开始条件和停止条件,2线接口采用开始、重复开始和停止命令在主机和从机之间传输数据。

图4b. I²C应答位,应答数据时,2线接口将SDA拉低。
图4b. I²C应答位,应答数据时,2线接口将SDA拉低。

I²C的写周期起始于开始命令,随后是7位从机地址和第8位用于标识读、写操作。将第8位置低,表示写操作;将第8位置高,表示读操作。主机在第8个时钟周期后释放总线。如果从机应答数据传输,则在第9个时钟周期将SDA拉低。如果从机不应答写命令,则释放SDA (该数据线通过上拉电阻置于高电平)。

随后,主机写入8位命令字节,然后是第二个ACK/NACK位。接下来,主机写入8位数据字节并跟随第三个ACK/NACK位。数据字节和最后的应答位完成一个读/写周期,更新外设输出,图5a是一个写周期的详细例子。

I²C读周期起始于开始命令,随后是需要写入数据的从机地址、第8位置高,表示读操作。在ACK/NACK之后,主机写入命令字节访问从机寄存器。在第二个ACK/NACK位后,主机重新写入从机地址。在第三个ACK/NACK位后,从机控制总线,一次输出8位数据到总线上。如图5b所示,当从与上次读操作相同的从机寄存器读取数据时,主机只需要在读取从机数据之前写入从机地址。

图5. 2线接口一次传输8位数据,图5a是I2C写周期的一个例子;图5b是I2C读周期的一个例子。
图5. 2线接口一次传输8位数据,图5a是I²C写周期的一个例子;图5b是I²C读周期的一个例子。

I²C接口支持低速(大于100kHz)、快速(大于400kHz)和高速(大于3.4MHz)三种数据速率。I²C接口的高低电平为CMOS逻辑电平(低电平为0.3x电源电压以下,高电平为0.7x电源电压以上)。

系统管理总线(SMBus)

Intel®制定了SMBus标准用于低速通信,SMBus 2线接口与I²C接口非常相似。SMBus也使用一条数据线(SMBDATA)和一条时钟线(SMBCLK)进行通信。SMBCLK和SMBDATA也需要上拉电阻,3V供电时上拉电阻大于8.5kΩ,5V供电时上拉电阻大于14kΩ。SMBus工作电压范围在3V和5V之间,大于2.1V为高电平,低于0.8V为低电平。

I²C接口和SMBus接口的最主要区别是最高/最低时钟速率,因为I²C总线为被动传输总线,不存在总线超时问题,速率可低至“静止”。SMBus接口则存在总线超时问题。如果时钟信号拉低之后的时间大于超时周期(最长为35ms)时,从机复位接口,认为发生总线超时。SMBus的超时周期限制了时钟的最小速率为19kHz。为了保证正常通信,SMBCLK的速率必须介于10kHz至100kHz之间,而I²C接口的主机或从机则可根据传输数据的需要将时钟保持在低电平。

外设举例

微处理器经常通过串行接口与外设通信,当微处理器通过2线或3线接口访问外设后,外设相应地改变其模拟或数字输出。例如,指使外设设置电池的充电的电流和电压、用温度传感器控制风扇、设置数模转换器的模拟输出等。

图6所示,通过2线接口连接微处理器和8位数/模转换器(MAX5115)。因为这个DAC有四个地址选择引脚,可以产生16个唯一的从机地址,因此可以在总线上并联16个DAC,因为MAX6641有不同的从机地址,同样的2线接口也可以设置SMBus温度传感器/风扇控制器(MAX6641),风扇控制器控制MOSFET的栅极,使其打开或关闭风扇。

图6. 由于微控制器采用的是I²C接口,与外设通信时,如DAC、温度传感器,总线只需要两条连线。
图6. 由于微控制器采用的是I²C接口,与外设通信时,如DAC、温度传感器,总线只需要两条连线。

3线接口需要单独的片选线实现微处理器与多个并行从机之间的通信,更简单的2线接口用一条时钟线和一条数据线与总线上的每个设备通信。可以通过设定不同的从机地址在总线上挂接多个IC。大多数I²C接口外设具备地址选择引脚,以实现从机地址的配置。外设可以使用的从地址数等于地址选择引脚数的平方。例如,若外有两个地址选择引脚,它就可以配置四个不同的地址。

新一代设计以更少的地址选择引脚提供更多的从地址。MAX7319是输入/输出扩展芯片,可以从两个地址选择引脚(AD2和AD0)扩展出16个从地址。这些引脚可以接GND、电源(VCC)、SDA或SCL。表2列出了这16个从地址的详细信息,A6、A5、A4固定为110,A3至A0可以通过AD2、AD0设置。

表2. MAX7319仅利用2个地址线(AD2和AD0)即可编译出16个不同地址
Pin Connection Device Address
AD2 AD0 A6 A5 A4 A3 A2 A1 A0
SCL GND 1 1 0 0 0 0 0
SCL VCC 1 1 0 0 0 0 1
SCL SCL 1 1 0 0 0 1 0
SCL SDA 1 1 0 0 0 1 1
SDA GND 1 1 0 0 1 0 0
SDA VCC 1 1 0 0 1 0 1
SDA SCL 1 1 0 0 1 1 0
SDA SDA 1 1 0 0 1 1 1
GND GND 1 1 0 1 0 0 0
GND VCC 1 1 0 1 0 0 1
GND SCL 1 1 0 1 0 1 0
GND SDA 1 1 0 1 0 1 1
VCC GND 1 1 0 1 1 0 0
VCC VCC 1 1 0 1 1 0 1
VCC SCL 1 1 0 1 1 1 0
VCC SDA 1 1 0 1 1 1 1

进一步改进

3线接口和2线接口有几点不同的要求,每种接口都有其特殊优势。近期内不可能用一种接口标准完全取代另一接口标准。具备I²C接口的器件发展较快,并开始融合一些SMBus接口的特点,支持诸如超时复位等功能,使接口可以根据需要关断。新的I²C从机地址长达10位,而不仅仅是7位,这给用户带来更多的灵活性。

3线接口和2线接口将并存,但I²C接口似乎占有更大的市场份额,大部分微处理器支持2线接口。I²C接口的易用性及更少的连线使其增长量超过了SPI接口。

其它信息请参考应用笔记3967:"选择串行总线"和应用笔记3438:"串行数字网络"。

类似文章发表在Portable Design网站,2006年3月。
下一步
EE-Mail 订阅EE-Mail,接收关于您感兴趣的新文档的自动通知。
© , Maxim Integrated Products, Inc.
The content on this webpage is protected by copyright laws of the United States and of foreign countries. For requests to copy this content, contact us.
APP 4024:
应用笔记 4024,AN4024, AN 4024, APP4024, Appnote4024, Appnote 4024