SPI

什么是SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,在芯片的管脚上占用四根线。
所谓同步,即数据收发双方共用一个时钟;
所谓串行,即待传输的数据排成一行,一位一位地传送出去。
是一种数据通信方式,实现Arduino与外界传情达意
优点
全双工通信、高速、通信简单
缺点
【SPI】没有指定的流控制,没有应答机制确认是否接收到数据。
详细介绍
SPI以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要4根线。
它们是:

  • MISO(主设备数据输入)
  • MOSI(主设备数据输出)
  • SCLK(时钟)
  • CS(片选)
(1)MISO– Master Input Slave Output
主设备数据输入,从设备数据输出;
(2)MOSI– Master Output Slave Input
主设备数据输出,从设备数据输入;
(3)SCLK – Serial Clock
时钟信号,由主设备产生;
(4)CS – Chip Select
从设备使能信号决定选取哪个周边设备,由主设备控制
SPI
文章图片
一主一从 SPI
文章图片
一主多从 SPI是串行通讯协议,就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,SCLK信号线只由主设备控制,从设备不能控制信号线,至少要有一个主控设备。
SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
arduino中如何使用?
Arduino以SPIClass类的形式对SPI进行了封装
SPI 库主要有以下几个函数:
(1)begin()
(2)end()
(3)setBitOrder()
(4)setClockDivider()
(5)setDataMode()
(6)transfer()
  • begin():
功能:初始化SPI总线,设置SCK,MOSI和SS为输出:将SCK和MOSI拉低,将SS拉高。
形式:SPI.begin()
返回值:none
  • setBitOrder():
功能:设置进入和输出SPI总线比特(bit)的顺序:LSBFIRST (least-significant bit first) 或者 MSBFIRST (most-significant bit first)。
形式:SPI.setBitOrder(order)
参数:order: LSBFIRST 或者 MSBFIRST
返回值:none
  • setDataMode():
功能:设置数据模式;(具体请见百科)
形式:SPI.setDataMode(mode)
参数:mode:SPI_MODE0
SPI_MODE1
SPI_MODE2
SPI_MODE3
  • setClockDivider():
功能:设置SPI时钟为系统的分频。在AVR的板子上,分频系数可以为2,4,8,16,32,64或者128。默认设置为SPI_CLOCK_DIV4,即设置SPI时钟为系统时钟的1/4(如果板子为16MHz则SPI为4MHz)。
形式:SPI.setClockDivider(divider)
参数:divider:SPI_CLOCK_DIV2
SPI_CLOCK_DIV4
SPI_CLOCK_DIV8
SPI_CLOCK_DIV16
SPI_CLOCK_DIV32
SPI_CLOCK_DIV64
SPI_CLOCK_DIV128
返回值:none
  • transfer():
功能:在SPI上传输一个字节(byte),发送和接收都是用这个函数;
形式:SPI.transfer(val)
参数:val:要发送的字节
返回值:从bus上读取的字节。(读操作使用的时候)
  • end():
功能:结束传输
后序将介绍如何利用SPI实现两块arduino板子之间通信

    推荐阅读