SPI协议


1. 一点基础介绍

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

2. 引脚说明

引脚 解说
MOSI 主设备数据输出,从设备数据输入
MISO 主设备数据输入,从设备数据输出
SCLK 时钟信号,由主设备产生
CS 从设备使能信号,由主设备控制(一般是低电平选中)

3. SPI 时序操作

  1. 数据输出: 通过 MISO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输
  2. 一个SPI时钟周期内,会完成如下操作:
    1. 上升沿发送、下降沿接收、高位先发送
    2. 上升沿到来的时候,MOSI上的电平将被发送到从设备的寄存器中
    3. 下降沿到来的时候,MISO上的电平将被接收到主设备的寄存器中

SPI 主从传输

4. SPI 一主机对多从机图

一对多

4. SPI总线四种工作方式

SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性(CPOL)和相位(CPHA)可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。

  1. CPOL是用来决定SCK时钟信号空闲时的电平
    1. CPOL = 0,空闲电平为低电平;
    2. CPOL = 1,空闲电平为高电平;
  2. CPHA是用来决定采样时刻
    1. CPHA = 0,在每个周期的第一个时钟沿采样;
    2. CPHA = 1,在每个周期的第二个时钟沿采样;

      SPI主模块和与之通信的外设备时钟相位和极性应该一致。

CPHA & CPOL

5. 协议心得体会

SPI接口时钟配置心得:

  1. 主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。
  2. 主设备这边SPI时钟极性的配置(即SDO的配置)跟从设备的SDI接收数据的极性是相反的,跟从设备SDO发送数据的极性是相同的。

下面这段话是Sychip Wlan8100 Module Spec上说的,充分说明了时钟极性是如何配置的:
The 81xx module will always input data bits at the rising edge of the clock, and the host will always output data bits on the falling edge of the clock.
意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设备这边SPI时钟极性应该配置为下降沿有效。
又如,下面这段话是摘自LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.
意思是:从设备SSD1289在时钟的上升沿接收数据,而且是按照从高位到地位的顺序接收数据的。因此主设备的SPI时钟极性同样应该配置为下降沿有效。
时钟极性和相位配置正确后,数据才能够被准确的发送和接收, 因此应该对照从设备的SPI接口时序或者Spec文档说明来正确配置主设备的时钟。


文章作者: Alex.Lin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex.Lin !
 上一篇
Docker系列-基础入门 Docker系列-基础入门
[ TOP ] 官网 https://www.docker.comhttps://hub.docker.com/
2017-10-09
下一篇 
Hexo插件-Hexo Admin Hexo插件-Hexo Admin
Hexo Admin官网链接:https://jaredforsyth.com/hexo-admin/ 插件可以直接在网页端创建、编辑markdown文章内容,并将内容发布到_posts里。另外,对我而言,最方便的是可以很方便的给文章加标
2017-08-08
  目录