第6章 SPI接口及其应用¶
SPI(Serial Peripheral Interface),即串行外设接口。SPI最早由Motolora半导体部门提出,最初出现在M68系列单片机上用于连接片外的EEPROM、ADC和DAC等外设。 SPI是一种伪共享的全双工/半双工的同步串行通讯接口,仅支持单主多从的系统结构。伪共享的总线结构是受到并行总线的影响,要求主机必须为每一个从机提供一个片选信号(CS), 当某个从机的片选信号被主机置为有效电平时,主机和被选中的从机之间实现全双工/半双工的同步串行通讯。同步串行通讯,意味着SPI接口具有专用的同步时钟信号。 全双工,意味着SPI接口拥有独立的“主机写-从机读”和“主机读-从机写”串行数据传输线。半双工只需要一根串行数据线双向传输数据。
SPI接口经历多次改进,目前不仅支持单个串行数据信号,也支持2位和4位宽度的串行数据信号,在同样的时钟频率条件下串行数据线越多数据吞吐量越大。 QSPI(Quad SPI)接口的数据信号达4个,假设同步时钟信号的频率为32MHz,QSPI实际的位时钟频率达128MHz。高速的QSPI接口已经用于嵌入式系统内的大容量FlashROM、 伪静态RAM等存储器扩展,借助于MCU片上Cache单元甚至可以直接从QSPI接口的FlashROM中执行(XIP)程序。显然,SPI接口是嵌入式系统内十分重要的一种扩展接口, 与I2C接口一样,SPI也是绝大多数MCU标配的片上功能单元。
本章将了解SPI接口的信号、时序和协议规范,以及MCU片上SPI功能单元的主机模式和从机模式,并以SPI接口的显示器和协处理器、QSPI接口的FlashROM等为例讨论SPI接口的结构组成、接口电路和软件编程控制。
Note
SPI接口相关的基础概念:
- SPI (Serial Peripheral Interface),一种高速同步串行外设接口,同步时钟频率可达64MHz或更高,常用于嵌入式系统内高速外设的拓展,如TFT-LCD/RGB-LCD、Ethernet、SD卡、NOR-FlashROM/NAND-FlashROM等。
- DSPI (Dual SPI),DSPI仍使用4线接口,除了NSS和SCLK之外,MOSI/SDI和MISO/SDO被用作2位宽的双向串行数据线(即SDIO0、SDIO1),在保持同步时钟频率不变的情况下,该接口的数据传输速度是SPI接口的2倍。
- QSPI (Quad SPI),4位SPI(相当于4倍速传输),QSPI使用4位宽度的双向数据线(D0~D3),在保持同步时钟频率不变的情况下,该接口的数据传输速度是SPI接口的4倍,常用于系统内扩展大容量闪存。一般的QSPI接口使用FIFO缓存机制,而SPI接口则使用寄存器直接寻址。
- SPI master,SPI接口的主设备端,也是同步时钟信号(SCLK)的驱动端。SPI master控制整个传输过程,以及通讯时序(有效的时钟边沿、空闲状态的相位等)。
- SPI slave,SPI接口的从设备端,在传输过程中根据SPI master发出的指令或同步时钟移出或移入串行数据。
- D/C (Data/Command),改进型SPI的控制信号,由SPI master驱动,该信号为高电平时表示正在传输数据帧,该信号为低电平时表示正在传输命令帧。
- Busy,改进型SPI的握手信号,由SPI slave驱动,该信号为高电平时表示从设备处于忙状态,不希望继续传输数据或指令;反之则表示从设备处于空闲状态,可以传输数据或指令。