Arduino--SPI协议官方库官方文档

 串行外围设备接口(SPI)是微控制器使用的同步串行数据协议,用于在短距离内快速与一个或多个外围设备通信。它也可以用于两个微控制器之间的通信。通过SPI连接,总是有一个主设备(通常是微控制器)来控制外围设备。通常,所有设备都有三根线:

  • MISO(Master In Slave Out)-用于将数据发送到主机的从机线路,
  • MOSI(Master Out Slave In)-主机线路,用于向外围设备发送数据,
  • SCK(串行时钟)-同步主设备生成的数据传输的时钟脉冲

每条设备专用一条线:

  • SS(从设备选择)-主设备可用来启用和禁用特定设备的每个设备上的引脚。

当设备的从选择引脚为低电平时,它与主机通信。高时,它将忽略主节点。这使您可以让多个SPI器件共享相同的MISO,MOSI和CLK线。

要为新的SPI器件编写代码,需要注意以下几点:

  • 您的设备可以使用的最大SPI速度是多少?这由SPISettings中的第一个参数控制。如果使用的芯片的额定频率为15 MHz,则使用15000000。Arduino将自动使用等于或小于SPISettings的数字的最佳速度。
  • 数据是先移位最高有效位(MSB)还是最低有效位(LSB)?这由第二个SPISettings参数MSBFIRST或LSBFIRST控制。大多数SPI芯片使用MSB优先数据顺序。
  • 数据时钟为高电平还是低电平时是空闲的吗?采样是在时钟脉冲的上升沿还是下降沿上?这些模式由SPISettings中的第三个参数控制。

SPI标准比较宽松,每个设备在实现上都略有不同。这意味着在编写代码时必须特别注意设备的数据表。

一般来说,有四种传输方式。这些模式控制数据是否在数据时钟信号的上升沿或下降沿移入和移出(称为时钟相位),以及在高电平或低电平时时钟空闲(称为时钟极性)。四种模式根据此表将极性和相位组合在一起:

模式 时钟极性(CPOL) 时钟相位(CPHA) 输出边 数据抓取
SPI_MODE0 0 0 坠落 升起
SPI_MODE1 0 1个 升起 坠落
SPI_MODE2 1个 0 升起 坠落
SPI_MODE3 1个 1个 坠落 升起

有了SPI参数后,请使用SPI.beginTransaction()开始使用SPI端口。SPI端口将使用所有设置进行配置。使用SPISettings的最简单,最有效的方法是直接在SPI.beginTransaction()内部。例如:

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

如果其他库通过中断使用SPI,则在您调用之前,它们将无法访问SPI SPI.endTransaction()。SPI设置在事务开始时应用,并且SPI.endTransaction() 不会更改 SPI设置。除非您或某些库再次调用 beginTransaction ,否则将保持设置。SPI.endTransaction()如果您的程序与其他使用SPI的库一起使用,则应尝试最大程度地缩短调用之间的时间,以实现最佳兼容性。

对于大多数SPI器件,之后SPI.beginTransaction(),您需要将从选择引脚写为LOW,调用SPI.transfer()任意次以传输数据,然后将SS引脚写为HIGH,最后调用SPI.endTransaction()。

有关SPI的更多信息,请参见Wikipedia的SPI页面。

连接引脚

下表显示了不同Arduino板上的SPI线的针脚:

Arduino / Genuino Board MOSI MISO SCK SS (slave) SS (master) Level
Uno or Duemilanove 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3 10 - 5V
Mega1280 or Mega2560 51 or ICSP-4 50 or ICSP-1 52 or ICSP-3 53 - 5V
Leonardo ICSP-4 ICSP-1 ICSP-3 - - 5V
Due ICSP-4 ICSP-1 ICSP-3 - 4, 10, 52 3,3V
Zero ICSP-4 ICSP-1 ICSP-3 - - 3,3V
101 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3 10 10 3,3V
MKR1000 8 10 9 - - 3,3V

关于基于AVR的板上的从选择(SS)引脚的说明
所有基于AVR的板都有一个SS引脚,当它们充当由外部主机控制的从机时,该引脚很有用。由于该库仅支持主模式,因此该引脚应始终设置为OUTPUT,否则硬件会自动将SPI接口置于从模式,从而使库无法工作。

但是,可以将任何引脚用作设备的从选择(SS)。例如,Arduino以太网屏蔽使用引脚4控制到板载SD卡的SPI连接,并使用引脚10控制到以太网控制器的连接。

函数

SPISettings
begin()
end()
beginTransaction()
endTransaction()
setBitOrder()
setClockDivider()
setDataMode()
transfer()
usingInterrupt()
Due Extended SPI usage

你可能感兴趣的:(arduino)