I2C和SPI - 图文

更新时间:2023-12-04 05:45:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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是一个写周期的详细例子。

本文来源:https://www.bwwdw.com/article/7kwt.html

Top