SPI 函式库

引用 SPI 函式库可使得 86Duino 成为 SPI Master 的通讯设备

SPI 简介

串列週边界面(SPI)使微处理器快速与一个以上近距离周边设备进行同步串列资料协定通讯;也可以应用于两个微处理器之间的通讯。

Master设备控制SPI通讯串列上的周边设备。这些设备都具有下列四支通讯脚位:

  • MISO (Master In Slave Out) Slave 设备传送资料到 Master 设备的脚位。
  • MOSI (Master Out Slave In) Master 设备传送资料到 Slave 设备的脚位。
  • SCK (Serial Clock) 由 Master 设备产生同步讯号,连接至每个周边设备的脚位。
  • SS (Slave Select) Master 选择要连结的周边设备的脚位。

Slave 侦测到 Slave Select 为低电位时,会接收 Master 传送的资料 ; Slave 侦测到 Slave Select 为高电位时会忽略 Master。这样的机制使得 Master 连接多个 SPI 设备时可以共用 MISO、MOSI 与 SCK。

撰写使用 SPI 与设备通讯的程式码要注意下列事项:

  • 资料传送的顺序是先送高位元还是低位元?资料传送的顺序可以用 SPI.setBitOrder() 函式设定。
  • 资料传送 clock 等待时为高或低电位?资料取样为 clock 上缘或下缘触发?以上可由 SPI.setDataMode() 函式设定。
  • SPI 资料传送速率如何设定?可由 SPI.setClockDivider() 函式设定。

SPI 的标准较宽鬆,造成每个设备的实施的方式有点差异。撰写 SPI 设备应用程式前必须查阅设备的数据表选用参数。

一般而言,有四种转输模式。这些模式规划传送数据与 clock 之间的关係例如数据在 clock 上缘或下缘取样(称为时脉相位) 。非传送数据时 clock 维持在高或低电位(称为时脉极性)。根据时脉与极性可组合四种模式如下表所示:

Mode Clock Polarity (CPOL) Clock Phase (CPHA)
SPI_MODE0 0 0
SPI_MODE1 0 1
SPI_MODE2 1 0
SPI_MODE3 1 1

SPI.setDataMode() 函式可依上表设定时脉相位与极性。

每个 SPI 设备允许的最高速率不同,使用 SPI.setClockDivider() 设定 SPI 的时脉速率,使 SPI 装置正常运作。撰写 SPI 週边程式码除了要设定 SPI 参数外,也要依 SPI 设备的 data sheet,按所需功能设定暂存器。

Wiki 上可以看到更多的资讯。

连接埠

不同版本的 86Duino SPI 对映脚位如下表所示

86Duino Board MOSI MISO SCK SS
Zero SPIDO SPIDI SPICLK SPICS
One SPIDO SPIDI SPICLK SPICS
Educake

注意:设计 SPI 专案时可参考下图 MISO、MOSI、SCK 及 SS 脚位都在 SPI 接头上。

86Duino SPI Connector

函式

begin()
end()
setBitOrder()
setClockDivider()
setDataMode()
setSS()
transfer()

范例

Arduino 的 SPI 函式库教程,可在 86Duino 执行(但要注意范例中的 Arduino 的 SPI 脚位与 86Duino 不同)

BarometricPressureSensor:SPI 使用 SPI 界面读取感测器的压力及温度
SPIDigitalPot::使用 SPI 界面设定数位电位计

See also

shiftOut()
shiftIn()


函式库参考主页面

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.