对于需要经常进行数据流传输的系统数据,SPI是首选,因为它拥有较快的时钟速率,速率可从几兆赫兹到几十兆赫兹。然而,对于系统管理活动,如读取温度传感器的读数和查询多个从器件的状态,或者需要多个主器件共存于同一系统总线上(系统冗余常会要求这一点),或者面向低功耗应用,这时I2C 或 SMBus将是首选接口。
图1:数字温度传感器简化框图
下面几部分将介绍每种串行总线及其优缺点。1、SPI
SPI 是一种四线制串行总线接口,为主/从结构,四条导线分别为串行时钟(SCLK)、主出从入(MOSI)、主入从出(MISO)和从选(SS)信号。主器件为时钟提供者,可发起读从器件或写从器件操作。这时主器件将与一个从器件进行对话。当总线上存在多个从器件时,要发起一次传输,主器件将把该从器件选择线拉低,然后分别通过 MOSI 和 MISO 线启动数据发送或接收。
SPI 时钟速度很快,范围可从几兆赫兹到几十兆赫兹,且没有系统开销。SPI 在系统管理方面的缺点是缺乏流控机制,无论主器件还是从器件均不对消息进行确认,主器件无法知道从器件是否繁忙。因此,必须设计聪明的软件机制来处理确认问题。同时,SPI 也没有多主器件协议,必须采用很复杂的软件和外部逻辑来实现多主器件架构。每个从器件需要一个单独的从选择信号。总信号数最终为 n+3 个,其中 n 是总线上从器件的数量。因此,导线的数量将随增加的从器件的数量按比例增长。同样,在 SPI 总线上添加新的从器件也不方便。对于额外添加的每个从器件,都需要一条新的从器件选择线或解码逻辑。图 2 显示了典型的 SPI 读/写周期。在地址或命令字节后面跟有一个读/写位。数据通过 MOSI 信号写入从器件,通过 MISO 信号自从器件中读出。图 3显示了 I2C总线/SMBus以及SPI的系统框图。
图2:SPI 典型读/写周期
图3:(a)I2C总线/SMBus系统接口;(b)SPI 系统接口