创客百科

姿势共享,有节操无门槛参与的创客百科,创客动力之源 \ (^_^) /

用户工具

站点工具


arduino:libraries:spi

SPI库

这个库可以让你将Arduino作为主设备,其他外围设备作为从设备与主设备以串行方式进行通信及交换信息。

同步串行外设接口总线(SPI)的简介

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

  • Master In Slave Out (MISO) -主设备数据输入,从设备数据输出,
  • Master Out Slave In (MOSI) -主设备数据输出,从设备数据输入,
  • Serial Clock(SCK)-串行时钟,数据传输的时钟基于主处理器产生的时钟脉冲,
  • Slave Select(SS) -从属选择,从设备的管脚控制信号线,由主设备进行使能控制。当从设备的SS引脚置为低电平时,它与主设备进行通信。当从设备的SS引脚置为高电平时,断开与主设备的通信。因此,SPI允许一个主设备和多个从设备进行通信,主设备通过不同的SS信号线选择不同的从设备进行通信。

给一个新的SPI设备写程序,你需要注意以下几点:

  • 串行数据传输时,是先传输高位(MSB)还是先传输低位(LSB),这是由 SPI.setBitOrder()函数来控制的。
  • 数据时钟SCK在空闲时,是高电平还是低电平?
  • 采样时,是在时钟脉冲的上升沿还是下降沿?这是由 SPI.setDataMode() 函数来控制的
  • SPI是在怎样速度下运行的,即SCLK提供多大的时钟脉冲使SPI运行?这是由 SPI.setClockDivider() 函数来控制的。

SPI标准是不严格的,所以每个设备实现功能时稍有不同。这意味着当你写代码时,要特别注意设备的数据表。一般来说,有三种传输模式。这些模式控制着数据是在SCK的上升沿采样,还是在SCK的下降沿采样(称为时钟相位),时钟信号在空闲时,是高电平还是低电平(称为时钟极性)。由相位和极性组合得到三种模式。SPI.setDataMode() 函数用于控制时钟极性和相位,根据此表:

模式时钟极性(CPOL)时钟相位 (CPHA)
000
101
210
311

当你的SPI参数设置正确,你只需要选择好需要的函数去控制你的设备,然后开始你的作品制作。这将被解释为您的设备数据表。

连接

在Arduino Duemilanove和其他基于ATmega168 / 328的板子上,SPI总线使用引脚10(SS),引脚11(MOSI),引脚12(MISO)和引脚13(SCK)。而在Arduino Mega板上,使用的是引脚50(MISO),引脚51(MOSI),引脚52(SCK)和引脚53(SS)。需要注意的是,即使你不使用SS引脚,必须将它的模式设置为输出;否则,SPI系统将会认为有一个外部主机将自己选择为从设备(从属模式),从而使库文件的控制失效。

它有可能使用其他脚比10脚,作为从机选择引脚SS。例如,Arduino的以太网扩展板使用引脚4来控制的SPI连接到主板上的SD卡,用引脚10来控制连接到以太网控制器。

函数

例子

  • BarometricPressureSensor: Read air pressure and temperature from a sensor using SPI
  • SPIDigitalPot: Control a digital potentiometer using SPI

参见

  • shiftOut()
  • shiftIn()

返回主菜单

本页面的其他翻译:
arduino/libraries/spi.txt · 最后更改: 2016/12/25 22:15 (外部编辑)