SPI 是一款高速同步串行输入/输出 (I/O) 端口,其允许以编程的比特传输速率将编程长度(1 至 16 位)的串行位流移入和移出器件。SPI 通常用于微控制器与外部外设或另一控制器之间的通信。典型应用包含通过移位寄存器、显示驱动器和 ADC 等器件进行外部 I/O或外设扩展。多器件通信由 SPI 的主/从操作支持。该端口支持 16 级接收和发送 FIFO,以减少 CPU 服务开销。
SPI 模块的功能包括:
- SPISOMI:SPI 从器件输出/主器件输入引脚
- SPISIMO:SPI 从器件输入/主器件输出引脚
- SPISTE:SPI 从器件发送使能引脚
- SPICLK:SPI 串行时钟引脚
- 两个运行模式:主模式和从模式
- 波特率:125 个不同的可编程速率
- 数据字长度:1 至 16 数据位
- 四种时钟方案(由时钟极性和时钟相位的位控制)包含:
- 无相位延迟的下降沿:SPICLK 高电平有效。SPI 在 SPICLK 信号的下降沿上发送数据,在 SPICLK 信号的上升沿上接收数据。
- 有相位延迟的下降沿:SPICLK 高电平有效。SPI 在 SPICLK 信号下降沿提前半个周期发送数据,在 SPICLK 信号的下降沿上接收数据。
- 无相位延迟的上升沿:SPICLK 低电平无效。SPI 在 SPICLK 信号的上升沿上发送数据,在 SPICLK 信号的下降沿上接收数据。
- 有相位延迟的上升沿:SPICLK 低电平无效。SPI 在 SPICLK 信号上升沿的半个周期之前发送数据,而在 SPICLK 信号的上升沿上接收数据。
- 同时接收和发送操作(可在软件中禁用发送功能)
- 发送器和接收器操作通过中断驱动或轮询算法完成。
- 16 级发送和接收 FIFO
- 延迟的发送控制
- 3 线 SPI 模式
- 在带有两个 SPI 模块的器件上实现数字音频接口接收模式的 SPISTE 反转
- DMA 支持
- 高速模式,可实现高达 50MHz 的全双工通信
SPI 在主模式或从模式下工作。主器件通过发送 SPICLK 信号来启动数据传输。对于主器件和从器件而言,数据都是从 SPICLK 一个边沿上的移位寄存器移出,并锁存到相反的 SPICLK 时钟边沿上的移位寄存器中。如果 CLOCK PHASE 位 (SPICTL.3) 为高电平,则在 SPICLK 转换前的半个周期内发送和接收数据。因此,两个控制器同时发送和接收数据。应用软件确定数据是有意义的数据还是虚拟数据。可以通过三种方法发送数据:
- 主器件发送数据,从器件发送虚拟数据
- 主器件发送数据,从器件发送数据
- 主器件发送虚拟数据,从器件发送数据
主器件控制着 SPICLK 信号,故其可随时启动数据传输。然而,当从器件准备好广播数据时,软件确定了主器件如何进行检测。
图 6-74 显示了 SPI CPU 接口。