微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 同步串行外设接口总线(SPI)的简介

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

时间:12-15 来源:互联网 点击:
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)

0 0 0

1 0 1

2 1 0

3 1 1

当你的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来控制连接到以太网控制器。

函数

begin()

end()

setBitOrder()

setClockDivider()

setDataMode()

transfer()

例子

BarometricPressureSensor: Read air pressure and temperature from a sensor using SPI

SPIDigitalPot: Control a digital potentiometer using SPI

参见

shiftOut()

shiftIn()

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top