回到通信协议概述

spi.

概述

SPI(串行外围接口)是最初由摩托罗拉开发的有用通信风格。它使用四个通信引脚以及电源和接地销,因此SPI易于使用6针以及12针PMOD标准。在SPI中,通常存在“主板”设备(主板)和彼此通信的“从属”设备(PMOD)。

为了做到这一点,“主”将选择它的一个“从”与它的从选择(SS)通信线,以指示Pmod它将与它进行通信。主机和从机将同时彼此通信(全双工操作)莫斯利(掌握奴隶)和味噌(奴隶介绍)数据线。在主机在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引脚。在硬件实现中,您需要使用一组特定的引脚来实现通信协议。要确定需要在主机板上使用哪些引脚,最好查看系统板的参考手册。

说你有一个数字化的chipkit wf32..如果你去参考手册,你可以去外设IO功能并找到SPI部分。在这里,我们可以看到默认的DSPI0(DigIlent SPI 0)位于SS的引脚10,11,12和13上,莫斯利味噌, 和SCLK, 分别。


更多信息

有关超出本文范围的SPI协议的更多详细信息,可以找到SPI的维基百科页面

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

SPI兼容Pmods
Pmod名字 协议中的变体?
pmodacl. 没有
PmodACL2 没有
PMODAD1. 没有
PmodAD5 没有
PmodALS 只向主机发送数据
PMODCLS. 没有
PMODDA1 只接收来自主机的数据
pmodda3. 只接收来自主机的数据
pmodda4. 只接收来自主机的数据
PMODDPOT. 只接收来自主机的数据
pmodjstk. 没有
PMODMIC. 只向主机发送数据
PmodNIC100 没有
pmodoled. On从主机接收数据
PmodRF2 没有
PMODSD. 没有
PMODSF. 没有
PMODSF2 没有
PMODTC1. 只向主机发送数据
pmodwifi. 没有