SPI系列文章主要介绍SPI接口的一些基础知识,并用DAC芯片81416的配置为例来具体说明SPI接口的具体FPGA实现。
一、SPI的基础
SPI的全称是Serial Peripheral Interface,直译过来就是串行外围接口。一般情况下,FPGA连接各种DAC和ADC,都是用的SPI接口。
SPI分为3线型和4线型。用得最多的是4线型,4线型的信号包括SCLK(同步时钟),MOSI(Master输出Slave输入),MISO(Master输入Slave输出)、SS(Slave Select,一般也叫做CS,Chip Select,片选信号),信号传输方向如图1所示。3线型就是把MISO和MOSI合并成一根线MISO/MOSI,合并后的这根线信号可以双向传输信号,Mater和Slave分时驱动这根线,一样可以通信。因此,可以看出4线型的SPI是全双工的,3线型的SPI是半双工的。
因为3线型和4线型在原理上并没有区别,所以本文仅介绍4线型,对于3线型注意在写Verilog代码时声明MISO/MOSI为inout类型信号,并且保证在FPGA不驱动它的时间它赋一个高阻值就行了。
下面两图是一般情况下我们会使用到的SPI连接方式。此外,还有一种菊花链的一对多连接方式,不太常用,有兴趣的读者可以阅读另一个博主的文章,点这里。


二、SPI的时序图
SPI的时序图是很简单的,一般情况下根据CPOL(Clock Polarity,时钟极性)和CPHA(Clock Phase,时钟相位)来规定4种传输模式,也就是说CPOL规定了SCK时钟信号空闲时的电平(CPOL=0表示低电平),CPHA规定了当片选信号SS有效时,接收数据端是按SCK的上升沿还是下降沿采样(CPHA=0表示上升沿采样)。本人根据自己接触到的AD/DA,发现一般情况下,CPHA=1,CPOL=0,下面以DAC81416的datasheet中的波形图为例进行时序说明。

从上面的波形图上,我们可以看到片选信号CS低电平有效,DAC芯片下降沿采样SDI(也就是MOSI),主机端也是下降沿采样SDO(也就是MISO),无论SDI还是SDO,数据传输都是高位在前,低位在后。至于CS为高电平时SCLK处于什么电平都无所谓的,只是一般我们还是将它设置成低电平。下一篇文章我会结合具体datasheet继续分析上面的时序图。
本文图2来源于博主碎碎思的一篇博客。