同步串行外设接口总线(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()
同步串行外设接口总线SP 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)