关于SPI协议,看这一篇文章就够了!

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

SPI协议是一种高速、全双工的总线协议,常用于板卡内不同芯片间通讯。SPI通信由SCLK、CS、MOSI和MISO四根线组成,有4线和3线两种工作模式。SPI协议的工作模式通过CPOL和CPHA的不同组合来确定。SPI的传输速率取决于器件本身支持的速率。SPI协议还有升级版,如Dual SPI、Quad SPI和QPI。SPI和IIC相比,SPI是全双工、没有响应机制,而IIC是半双工、有响应机制。使用FPGA实现SPI时序灵活,但需要调试和仿真。

🔎

延伸解读

SPI模式选择:从器件手册出发

SPI的四种工作模式由CPOL和CPHA组合决定,但实际应用中,从机器件通常只支持特定模式。例如,文章提到Cypress铁电存储器FM25V05同时支持模式0和模式3,而大多数SPI器件也以这两种模式为主。因此,主机配置时必须与从机模式一致,具体采用哪种模式应直接查阅器件手册,而非凭经验猜测。

SPI速率:灵活但受限于器件

与IIC有标准速率等级不同,SPI没有固定的速率规范,其SCK时钟频率完全取决于器件本身支持的最高速率。例如,FM25V05在不同电源电压下支持的最大SCK频率不同,需参考数据手册。这种灵活性意味着设计时需根据从机器件和系统需求来设定速率,不能一概而论。

FPGA实现SPI:灵活性与复杂度并存

FPGA实现SPI时序的最大优势是灵活,可精确定制时序并实现高速率,尤其适合同时驱动多片芯片或高速AD采集等场景。但难点在于需要手动处理数据对齐、建立保持时间及异常状态跳转,调试和仿真工作量大。相比之下,MCU通过硬件外设和库函数配置更简单,但灵活性较低。选择时应权衡需求与开发成本。

SPI与IIC对比:全双工与响应机制的取舍

SPI是全双工、无响应机制,每个SCK周期都能传输数据,因此速率可达上百兆,但主机无法确认从机是否接收成功,可能丢帧,需借助CRC等校验。IIC是半双工、有响应机制,可靠性更高,但速率较低。此外,SPI通过CS选择从机,每增加一个从机就多占用一个GPIO,而IIC通过器件地址选择,更节省引脚。两者均适用于板内短距离通讯。

❓

Q&A

SPI协议是什么?它和IIC协议的主要区别有哪些?

SPI(Serial Peripheral Interface)是由Motorola公司推出的一种高速、全双工的总线协议,常用于板卡内不同芯片间通讯。与IIC相比,SPI是全双工,没有响应机制,而IIC是半双工,有响应机制。SPI只能有一个主机,IIC支持多主机多从机。SPI通过CS选择从机,每增加一个从机就要多占用一个GPIO,而IIC通过器件地址选择从机,不增加GPIO。SPI没有固定速率,可以做到上百兆,IIC有标准模式100K、快速模式400K、高速模式3.4M。SPI在SCLK边沿采样,IIC在SCL高电平期间采样。

SPI通信需要哪几根线?3线制和4线制有什么区别?

标准SPI通信由SCLK、CS、MOSI和MISO四根线组成,有时也用SCK、SS、SDI、SDO等名称。4线制支持全双工传输。3线制有两种类型:一种是只有SCLK、CS和DI或DO,适用于单工通讯;另一种是只有SCLK、SDIO和CS,SDIO作为双向端口,适用于半双工通讯。

SPI有哪几种工作模式?如何确定使用哪种模式?

SPI有4种工作模式,由CPOL(时钟极性)和CPHA(时钟相位)组合决定。CPOL=0表示SCK空闲为低电平,CPOL=1表示空闲为高电平;CPHA=0表示在SCK第一个边沿采样,CPHA=1表示在第二个边沿采样。应用最广泛的是模式0和模式3,大多数SPI器件都支持这两种模式。具体采用哪种模式需要查看器件手册,主机必须与从机采用相同的工作模式。

SPI协议的传输速率是固定的吗?如何确定?

SPI协议没有固定的传输速率,不像IIC有标准模式100K、快速模式400K、高速模式3.4M。SPI的传输速率取决于器件本身支持的速率,SCK的速率就是SPI的传输速率,具体数值需要查看器件手册。例如FM25V05铁电存储器在不同电源电压下有不同的最大SCK时钟频率。

SPI协议有哪些升级版?它们如何提高数据传输效率?

SPI协议的升级版包括Dual SPI、Quad SPI和QPI等。传统标准SPI一个SCLK周期只能传输1Bit数据,而这些升级版通过增加数据线位数的方式,在一个SCLK周期内传输多个Bit数据,从而大大提高数据传输效率。例如W25Q128FW Flash ROM支持标准4线SPI、Dual SPI、Quad SPI和QPI模式,在这些模式下IO0/1/2/3作为双向端口,增加了数据读写速率。

用FPGA实现SPI协议有什么优缺点?和MCU相比如何选择?

FPGA实现SPI时序的最大好处是灵活,时序可以根据需要精确定制,可以实现非常高的速率,特别是在同时驱动多片芯片或高速AD采集场合有优势。难点是做起来比较麻烦,需要一点点的调试和仿真,虽然有一些现成IP但不够灵活。而MCU(如STM32)有现成的库函数和寄存器,简单几行代码配置一下就可以实现主从模式、SPI模式、数据位宽、多种速率、单线双线、半双工全双工、DMA等。总之,FPGA和MCU各有优点和不足,根据需求选择。

🏷️

标签

➡️

继续阅读