spi协议简单总结

spi简单的总结

几篇文章总结来的。。。

  1. Spi介绍
    SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。

  2. 简单的通讯协议
    它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时),也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCK(时钟)、CS(片选)。

    (1)SDI – SerialData In,串行数据输入;

    (2)SDO – SerialDataOut,串行数据输出;

    (3)SCK – Serial Clock,时钟信号,由主设备产生;

    (4)CS – Chip Select,从设备使能信号,由主设备控制。

  3. 下面为信号名的含义描述
    SCK ,即Serial Clock(时钟信号线)为Master 设备往 Slave 设备传输时钟信号, 同步控制数据交换的时机以及速率。

    MOSI 即Master Ouput Slave Input 为主设备输出从设备输入数据线,在 Master 上面也被称为 Tx-Channel, 作为数据的出口, 用于SPI主设备发送数据。

    MISO 即Master Input Slave Ouput 为主设备输入从设备输出数据线 在 Master 上面也被称为 Rx-Channel, 作为数据的入口, 主要用于SPI从设备接收数据。

    SS_n 即Slave Select 为从机选择线,低电平有效,Master 设备片选 Slave 设备, 使被选中的 Slave 设备能够被 Master 设备所访问。

    需要注意的是,
     SS_n、SCK、MOSI信号均由主设备产生,MISO信号由从设备产生。在SS_n为低电平的前提下,MOSI和MISO信号才有效,在每个时钟周期MOSI和MISO传输一位数据。

  4. spi 简单的工作模式

一对一传输

一对多传输

多对一传输
  1. 传输特点和时序

SPI传输特点
同步、串行、全双工、主从结构。SPI是串行通讯协议,也就是说数据是一位一位的传输的,这也是sclk存在的原因。SCLK信号线只由主设备控制,从设备不能控制信号线。需要说明的是,SPI只有主模式和从模式之分,没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。
1. 同步传输数据
  Master设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的。
  
2. 主-从结构(Master-Slave) 的控制方式
  SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave)。一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock。
  
3. 串行、全双工方式数据交换(Data Exchanges)
  SPI 设备间的数据传输之所以又被称为数据交换(全双工通信), 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或者 “接收者(Receiver)”. 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据(串行通信)(不管主设备好还是从设备),相当于该设备有一个 bit 大小的数据被交换了。

SPI总线的传输速率需要一般为:400KHz~10MHz(AHB:100MHz,APB:50MHz)

SPI传输时序
SPI 设备在进行通信的过程中, Master 设备和 Slave 设备之间会产生一个数据链路回环(Data Loop)。SPI接口有四种不同的数据传输时序,取决于时钟极性(CPOL)和时钟相位(CPHA)的组合。

所谓时钟极性CPOL指当SCK为idle的时候(其就是当SCK在发送8个bit比特数据之前和之后的状态),其电平的值是低电平0还是高电平1;

在这里插入图片描述
上图中第一行SCK的idle状态(发送8个bit比特数据之前和之后的状态)为0,所以CPOL为0;时钟为高电平有效。
反之,上图中第二行SCK的idle状态(发送8个bit比特数据之前和之后的状态)为1,所以CPOL为1;时钟为低电平有效。

所谓**时钟相位(CPHA)**即数据采样是在第几个边沿,0对应着第一个边沿,1对应着第二个边沿。

在这里插入图片描述

根据上图,SI里面的1数据(MSB数据)的中间部分对应 SCK的第一个时钟沿,也就是说数据是在SCK的第一个时钟边沿保持稳定【数据被采样捕获】,在下一个边沿改变【SCK的下降沿数据改变】,此时CPHA=0;如果中间部分对着第一个下降沿,那么CPHA=1。

通过CPHA和CPOL的组合,可以得到以下表格来表示spi的逻辑。

在这里插入图片描述
在这里插入图片描述
当CPOL=0,CPHA=0时,在SCK的第一个时钟周期,上升沿采样数据,下降沿输出数据。
首先,主器件的输出口(MOSI)输出数据bit1,在时钟的前沿被从器件采样,那主器件是何时输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期,bit1的输出时刻与SS_n信号没有关系。
再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时输出bit1的呢?从器件是在SS_n信号有效后,立即输出bit1,尽管此时SCK信号还没有生效。