回到通信协议概述

SPI

概述

SPI(串行外设接口),是Motorola最初开发的一种有用的通信方式。它使用4个通信引脚以及电源和接地引脚,因此SPI很容易与6引脚以及12引脚Pmod标准一起使用。在SPI中,通常有一个“主”设备(主板)和一个“从”设备(Pmod)相互通信。

为了做到这一点,“主”将选择它的一个“从”与它的从选择(SS)通信线,以指示Pmod它将与它进行通信。主机和从机将同时彼此通信(全双工操作)莫西人(Master Out Slave In)和味噌(主入从出)数据线。当主端在SCK线上发出一个时钟脉冲后,主端和从端互相发送一位信息,以确保数据传输的时间是正确的。一旦一个完整的字节,或八个比特的信息已经相互发送,主设备(基于程序员选择的任何代码)可以再次与从设备通信或停止与从设备通信。

由于具有全双工功能,SPI是一种快速通信标准。它也可以支持有多个slave设备,但额外的SS数据线将需要被添加,占用主机板上的输入/输出引脚,可以用于其他操作。


实际上是发送数据

在这里,我们将解释如何从微控制器的立场,实际得到他们的系统板使用SPI协议。请注意,此示例仅适用于一般情况,并不保证适用于所有情况;详情请参阅您的Pmod或模块参考手册。

为了让板上芯片知道它将与主控机通信,主控板必须使芯片选择线处于低电压状态,并在整个通信会话中保持低电压状态。数据可以同时在两个设备之间传输,每次传输一位,主控板控制传输的时间。

通常,SPI协议在主设备产生的串行时钟信号下降沿上传输一位数据。因此,数据必须在下降的时钟边缘之前可用/准备好放置到数据线上,以及时钟线必须在能够“下降”到低电压状态之前处于高电压状态的必要性。这可以通过微控制器改变电压状态来实现莫西人将时钟信号带到低电压状态之前的数据线。

改变数据线上的位值(电压)和脉冲串行时钟线的周期可以继续,直到根据板上芯片预期发送/接收的适当位数已经传输。然后需要将芯片选择线调到高电压状态,以让板上芯片知道通信已被终止,以便它可以处理信息以进行另一次传输。

为了使SPI协议按照设计工作,主设备和从设备都必须相互发送一个比特,即使您作为用户只打算接收或发送数据。然而,将“垃圾数据”作为传入(或传出)位所需的对等物发送是完全可行的。也可以简单地将不需要的数据线断开,让两个设备读取浮动线路上的“垃圾电压值”。

与其他通信协议不同,SPI非常通用,因为它能够以各种方式传输数据。当然,这将取决于Pmod上的每个板上芯片如何接收数据,但是信息可以以最高有效位(MSB)优先或最低有效位(LSB)优先发送。

额外的多功能性伴随着四种不同的SPI时钟模式,可供选择。如果时钟信号从高电压值或低电压值开始,并且当时钟信号转换到高状态或当时钟转换到低状态时传输数据位元,这些模式将进行调整。下表列出了每种时钟模式的配置。同样,每一种模式的选择都是基于设备期望接收信息的方式。

时钟开始的位置 数据放置在 数据是在
SPI模式0 时钟下降的边缘 时钟随后上升的边缘
SPI模式1 时钟上升的边缘 时钟随后下降的边缘
SPI模式2 时钟下降的边缘 时钟随后上升的边缘
SPI模式3 时钟上升的边缘 时钟随后下降的边缘

所以,如果我们想让两个设备通过SPI给对方发送一个210的值,最高有效位在前,数据放在下降的时钟边缘,我们会首先让主芯片选择线低,然后时钟信号高,让每个设备“加载”适当的位到数据线上(以确保数据线上有可用的数据),然后让主机把时钟信号调低。两种设备都可以“收集”在线上的数据位。这将重复,直到所有的位被转移,然后主人将最终把芯片选择线再次高,以结束通信。下面提供了一个(不可否认的)夸大的时间图,展示了这种情况可能会是什么样子。

SPI信号图


我用什么别针

虽然了解SPI如何工作和知道它是全双工的,甚至是不同的可能的SPI模式是一回事,但如果您不知道如何或在哪里将您的SPI兼容模块连接到主机板,那么所有这些知识几乎是无用的。我们将重点讨论如何确定我们需要将SPI模块连接到微控制器的位置,因为您能够自己为FPGA分配引脚位置。

有两种方法可以实现SPI单片机:您可以使用的硬件实现SPI(这是单片机的好处之一,拥有共同的接口的硬件实现SPI等)或“bit-bang SPI通过实现通过软件和控制每个SPI的行。与比特敲打,您可以选择哪个数字引脚来实现您的SPI引脚。在硬件实现中,您需要使用一组特定的引脚来实现通信协议。要确定需要在主机板上使用哪些引脚,最好查看系统板的参考手册。

假设你有一个DigilentchipKIT WF32.如果你去参考手册,你可以去外围输入输出函数找到SPI部分。在这里,我们可以看到默认的DSPI0 (Digilent SPI0)位于引脚10,11,12和13的SS,莫西人味噌,SCLK,分别。


更多的信息

关于SPI协议的更多细节超出了本文的范围,可以在下面找到SPI的维基百科页面

下面列出了使用SPI协议(或相关变体)的Digilent Pmods列表(并将在不久的将来填写):

SPI兼容Pmods
Pmod名字 变体在协议?
PmodACL 没有
PmodACL2 没有
PmodAD1 没有
PmodAD5 没有
PmodALS 只向主机发送数据
PmodCLS 没有
PmodDA1 只接收来自主机的数据
PmodDA3 只接收来自主机的数据
PmodDA4 只接收来自主机的数据
PmodDPOT 只接收来自主机的数据
PmodJSTK 没有
PmodMIC 只向主机发送数据
PmodNIC100 没有
PmodOLED On从主机接收数据
PmodRF2 没有
PmodSD 没有
PmodSF 没有
PmodSF2 没有
PmodTC1 只向主机发送数据
PmodWiFi 没有