嵌入式系统可使用一个或多个处理器或微控制器,在更复杂的系统中执行专用操作。这些嵌入式控制器需要与其他系统元件、传感器甚至其他控制器进行通信。虽然复杂的串行接口和协议很常见,但可能很难进行编程和故障排除,特别是在与之通信的设备数量较少时尤其如此。
设计人员需要具有简单的设备到设备数字接口的微控制器、外设和传感器,以便可以高速处理任意长度的数据,并且省去与协议相关的复杂编程任务。
简单的解决方案是选择带有串行外设接口 (SPI) 的控制器,这样可将控制器连接到一些本地的外设 IC 或传感器。这种接口是一种简单的同步接口,使用硬件寻址并以高达 50 兆赫兹 (MHz) 的时钟速率运行。SPI 不使用需要寻址和状态检查的复杂协议,相反,它是适用于快速数据传输的基本接口,无需复杂接口总线的编程开销。
本文将介绍 SPI 接口的基础知识(包括多种工作模式),然后介绍具有 SPI 接口的微控制器和其他设备,并且说明如何使用 SPI 接口。
什么是 SPI?
SPI 是由摩托罗拉(现为 NXP Semiconductors 公司的一部分)于 1985 年前后开发,是一种适用于短距离、设备到设备通信的同步串行接口。从那时起,这种接口就已成为许多半导体制造商,特别是微处理器和微控制器采用的事实标准。
SPI 之所以广受欢迎,是因为它有很多优点。首先,SPI 是一种简单的硬件寻址接口,在传输的位数方面具有全面的灵活性。该接口采用具有单个主设备的主从模型,可使用以高达 50 MHz 时钟速率运行的全双工通信来处理多个从设备。它不使用标准协议,仅传输数据包,因此非常适合传输长数据流。
SPI 最多可使用四条信号线(图 1)。主设备(通常是处理器或控制器)为时钟 (SCK) 和片选 (CS) 信号线供电并进行控制。全多工操作由数据线“主出从入 (MOSI)”和“主入从出 (MISO)”进行处理。在简单的单主单从配置中,可以省去片选信号线,并将从设备的 CS 输入强制作为启用的逻辑条件。如果从设备只能发送数据(半双工通信),那么还可以省去 MOSI 线,进一步减少信号计数。数据按时钟信号输出,这样数据传输类似于移位寄存器,每个时钟移出一位。
图 1:基本 SPI 全双工连接使用两条数据线(MOSI、MISO)、一条时钟线 (SCK) 和一条片选线 (CS)。从设备上的 MOSI 有时标记为从设备数据输入 (SDI)。MISO 可标记为从设备数据输出 (SDO)。(图片来源:Digi-Key Electronics)
目前有两种方法可以处理多个从设备(图 2)。
图 2:两种处理多个从设备连接的配置。直接连接方式下每个从设备需要一个片选信号。菊花链连接方式仅使用一个片选信号,并将所有数据集中在一条线上。(图片来源:Digi-Key Electronics)
直接连接方式下每个从设备使用一条片选信号线。大多数微处理器都有三到四条片选线,这就将从设备的最大数量限制为片选线的数量。这在多数情况下不会出现问题,但如果某个设计需要总线上有更多的设备,这时可以使用菊花链方法配置一些设备。通过菊花链,多个从设备可使用一个共用的片选信号,而数据则通过共用数据线流出。这里再次将 SPI 从设备用作移位寄存器,来自从设备的数据可以在串行多路复用流中传播。
SPI 时钟模式
由主设备控制并生成时钟。时钟的两个属性分别是时钟极性 (CPOL) 和时钟相位 (CPHA)。这些属性控制从设备相对数据进行计时的有效时钟边沿。CPOL = 0 时,将时钟设为在逻辑 0 位置空闲。CPOL = 1 时,时钟在逻辑 1 位置空闲。CPHA = 0 时,数据在上升沿计时,CPHA = 1 时,数据在下降沿计时(图 3)。
图 3:SPI 时钟模式选择确定了进行数据采样的有效时钟边沿。(图片来源:Digi-Key Electronics)
主设备中的 CPOL 和 CPHA 线路设置决定了时钟极性以及进行数据计时的有效边沿。模式 1 是最常用的模式,但设计人员同样可以使用其他三种模式。
在示波器上可以观察 SPI 传输的三个信号分量(图 4)。在此示例中,传输的是 8 位数据包。用于观察数据传输的是 Teledyne LeCroy 的 HDO4104A 示波器及其 SPI 串行解码选件。
图 4:在 Teledyne LeCroy 的 HDO4104A 示波器(配有串行解码选件)上查看的 SPI 互换示例。波形如下:上面的轨迹是数据线,中间的轨迹是时钟,底部的轨迹是片选信号。数据轨迹上的蓝色覆盖区显示的是十六进制解码内容。(图片来源:Digi-Key Electronics)
模式 1 时钟由八脉冲组组成,其中空闲设置为 0 位 (CPOL = 0),数据在后沿或下降沿 (CPHA = 1) 计时。本示例中使用的示波器配有串行解码选件,用于对数据内容进行解码。在数据轨迹上的蓝色覆盖区读出十六进制的数据内容。解码仅与片选信号线被断言(0 电平)时发生的数据有关。总共有 17 个时钟猝发,但只有其中 5 个猝发对应有效片选状态。
波形显示栅格下方的表格中列出了有效数据内容,还有每个数据包相对于示波器触发器的时间以及测量的时钟速率(本例中的速率为 100 kb/s)。每个猝发中的时钟周期数可设定从设备按时钟输出的数据位数。
微处理器 I/O 选择
Microchip Technology 的 ATtiny816-MNR 是多种微控制器的典型代表,因为它支持多个 I/O 接口(图 5)。这款特别的控制器采用高性能、低功耗的 AVR®RISC 架构,运行频率高达 200 MHz。该控制器可由 4 或 8 KB 闪存、256 或 512 字节的 SRAM 以及 128 字节的 EEPROM 进行支持,所有这些存储器均集成在一个 20 引脚封装内。
图 5:Microchip Technology 的 ATtiny816 微控制器框图突出显示了 I/O 端口。该控制器配有一个 SPI 端口和一个 USART 端口,其中 USART 端口可配置为第二个 SPI。(图片来源:Microchip Technology)
此微控制器的接口侧配有一个通用同步和异步收发器 (USART)、一个 I2C 兼容型双线接口 (TWI) 和 SPI。USART 可配置为第二个 SPI 端口。
SPI 可使 AVR 设备和外围设备之间,或几个微控制器之间实现全双工通信。SPI 外设可以配置为主设备或从设备,从而实现微控制器之间的通信。
基于 SPI 的传感器
各种通过 SPI 提供数字数据的传感器可以与集成了 SPI 的大量微处理器和微控制器配套使用。例如,Microchip Technology 的 TC77-3.3MCTTR 数字温度传感器是一种可串行访问的数字温度传感器,适用于小外形尺寸、低成本的应用。TC77 的温度范围为 -55°C 至 +125°C。该传感器采用 2.7 V 至 5.5 V 电源,运行时消耗 250 微安 (μA) 电流,并具有仅消耗 1μA 电流的低功耗关断模式。
在典型应用中,此传感器可通过标准 SPI 连接与处理器相连,其温度数据可格式化为 13 位数字值,如图 6 所示。
图 6:Microchip Technology 的 TC77 是一款易于使用的温度传感器,不仅外形小巧,而且成本低廉。此温度传感器可以快速连接到控制器或处理器,将温度读数转换为 13 位数字值。如时序图所示,通过将 CS 信号线断言为逻辑 0 可启动通信。(图片来源:Microchip Technology)
该图显示了 T77 温度寄存器读取操作的时序图。通过断言 CS 信号线并将其置于逻辑 0,可以启动通信。然后,传感器会发送第一位数据。微控制器在 SCK 的上升沿读取数据。随后使用 SCK 的下降沿输出传感器的其余数据。与前面的示例一样,此图也是模式 1 传输,只不过数据字较长。
扩大 SPI 的使用范围
除了在许多微处理器和微控制器中包含 SPI 之外,一些 IC 制造商还增强了该总线的功能。Analog Devices 的 LTC6820 isoSPI 隔离式通信接口就是个很好的例子。该 IC 为使用差分信号并通过一条双绞线连接进行通信的两个 SPI 设备提供电流隔离(图 7)。尽管时钟速率比 10 米距离时的 1 Mb/s 标称速率有所降低,但这种信号模式将 LTC6820 SPI 接口的可用范围延长到远达 100 米 (m)。
图 7:一对 LTC6820 隔离器在两个 SPI 设备之间提供电流隔离。该 IC 在 10 米距离支持高达 1 Mb/s 的数据传输速率,在最远 100 米的距离内,时钟速率有所降低。(图片来源:Analog Devices)
隔离由脉冲变压器提供,这种技术通常用于工业网络应用以及读取远程传感器。
结论
SPI 解决了一些应用中对简单、低成本、低开销接口的需求。在这些应用中,可将源描述为数据流,而不是将数据读写到地址位置。这一特性使之成为处理微控制器和传感器、数字化仪、数字信号处理设备以及其他处理器之间的设备到设备通信的理想选择。