
IIC与SPI接口.pdf
14页可控制多外设的SPI/IIC总线( 转) 摘要本应用笔记对两种模拟IC 中常用的串行、数字接口(SPI 或 3线、I2C 或 2 线) 进行了比较,每种接口在不同的设计中都表现出其优点和缺点, 具体取决于数据速率、 可提供的设计空间以及噪声环境等 本应用笔记给出了两种接口的区别, 并举例详细说明了这些观点引言虽然现实世界中的信号都是模拟信号,但是现在越来越多的模拟IC采用数字接口进行通信串行接口的数据通信介于主机( 提供串行时钟) 和从机/ 外设之间目前,大多数微控制器提供SPI (3 线)和 I2C (2 线) 接口,用于发送、接收数据微处理器通过几条总线控制周边的设备,比如:模 /数转换器 (ADC)、数/ 模转换器 (DAC)、智能电池、端口扩展、 EEPROM以及温度传感器与通过并口传输数据不同的是:串行接口通过2 条、3 条或 4 条数据/ 时钟总线连续传输数据虽然并行接口具有传输速度快的特点,但是串行接口占用较少的控制和数据线串行接口的基础知识串行接口有三种: 3 线、2 线和单线本文主要讨论3 线和 2 线串行接口串行外设接口(SPI) 、队列串行外设接口(QSPI) 和MICROWIRE ( 或 MICROWIRE PLUS)接口标准均采用3 线接口。
芯片间总线 (I2C) 和系统管理总线 (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 线接口2 线接口2 线接口包括一条数据线(SDA 或 SMBDATA) 和一条时钟线 (SCL 或SMBCLK) 。
2 线接口的优点是使用更少的连线,这一点对于结构紧凑的设计尤为重要,比如:、 光纤的应用因为 2 线接口为每个从机分配唯一的地址, 所以可以在一条总线连接多个从机而不需要片选信号 2 线接口在成功完成一次读操作后会传输一个应答位因为2线接口只有一条数据线,所以它只能工作在半双工模式( 数据的读写不可以同时进行 ) 因为 2 线接口是电平触发,所以在嘈杂环境中如果发生数据位错误,可能造成问题表 1. 3/2线接口优缺点的对比Interface Advantages Disadvantages 3-Wire: SPI, 1. Speed 1. Larger number of bus line QSPI, and MICROWIRE PLUS 2. No pullup resistors required 3. Full-duplex operation 4. Noise immunity 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: I2C 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; I2C 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 和 MAXQ7654SPI 接口需要两条控制线 ( 低电平有效 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 和MAXQ7654 微处理器可一次传送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 线接口在时钟的上升沿将数据移入外设,在时钟的下降沿将数据移出外设图 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 标准没有规定最大数据速率芯片间电路接口 (I2C)不同于全双工的 3 线制接口,由 Philips制定的 I2C 接口通过一条数据线(SDA)和一条时钟线 (SCL)实现半双工通信 I2C 接口定义了一个简单的主 / 从双向通信接口在这个体系中,MCU 决定自己为主机 ( 写模式) 或为从机 (接收模式 ) 每个从机具备专有、唯一的地址,使主机可以和多个从机通过一条总线进行通信,而不需要为每一个从机提供单独的片选线如图3 所示,从机的数目只受限于最大线上电容(400pF) ,I2C 接口的机制基于7 位或 10 位地址, 7 位的地址更为常见在 7 位地址的机制中,总线上可以接127 个不同的外设 SCL和SDA线为漏极开路结构,所以闲置时必须为高。
当电源电压为3V时,连接一个 1kΩ 或更大阻值的上拉电阻; 当电源电压为 5V时,连接一个 1.6k Ω 或更大阻值的上拉电阻图 3. 利用数据输入 / 输出和时钟信号进行通信的2 线接口当 SCL为高,SDA从高变为低,即发出了一个开始命令,启动I2C 通信图 4a 所示,每个 SCL时钟传输一个数据位,传输一个字节至少需要 9 个数据位一个写周期包括8 个数据位和一个应答位 (ACK)或者非应答位 (NACK) 如图 4b 所示,当数据在I2C 总线上传输时,在SLK的上升沿写入从机,在SLK的下降沿从机输出在SCL时钟周期为高电平的时间内, SDA线的数据不可以改变一次传输的完成必须跟随着一个中止或重新开始的命令,既 SCL为高时,SDA由低变为高当总线空闲时, SDA和 SCL都为高图 4a. 开始条件和停止条件, 2 线接口采用开始、 重复开始和停止命令在主机和从机之间传输数据图 4b. I2C应答位,应答数据时, 2 线接口将 SDA拉低I2C 的写周期起始于开始命令,随后是7 位从机地址和第 8 位用于标识读、写操作将第 8 位置低,表示写操作;将第8 位置高,表示读操作。
主机在第 8 个时钟周期后释放总线如果从机应答数据传输,则在第 9 个时钟周期将SDA拉低如果从机不应答写命令,则释放SDA (该数据线通过上拉电阻置于高电平) 随后,主机写入 8 位命令字节,然后是第二个ACK/NACK 位接下来,主机写入 8 位数据字节并跟随第三个ACK/NACK 位数据字节和最后的应答位完成一个读 / 写周期,更新外设输出, 图 5a 是一个写周期的详细例子I2C 读周期起始于开始命令,随后是需要写入数据的从。












