[总线]SPI通信

SPI总线

(1)MOSI – 主器件数据输出,从器件数据输入
(2)MISO – 主器件数据输入,从器件数据输出
(3)SCLK –时钟信号,由主器件产生,最大为fPCLK/2,从模式频率最大为fCPU/2
(4)NSS/CS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)

1. 接线

主设备——从设备
SCLK——SCLK
NSS/CS——NSS/CS
MOSI——SDI
MISO——SDO
[总线]SPI通信_第1张图片

2. 协议

  1. 一对多(单主设备,通过多个使能端,连接多个SPI从设备)
  2. 当SS为低电平时有效(0),选中从设备

2.1 四种模式

  1. CPOL(时钟极性)和CPHA(时钟相位)意义

    CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
    CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
    CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
    CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

  2. 通过CPOL和CPHA来控制我们主设备的通信模式
    发送和接收设备需要根据实际情况分析 (发送设备 ≠ 主设备)
    Mode0:CPOL=0,CPHA=0
    SCLK(0)空闲;
    当SCLK由低到高跳变(上升沿),(接收设备)进行数据的读取;
    当SCLK由高到低跳变(下降沿),(发送设备)进行数据的发送;
    Mode1:CPOL=0,CPHA=1
    SCLK(0)空闲;
    当SCLK由高到低跳变(下降沿),(接收设备)进行数据的读取;
    当SCLK由低到高跳变(上升沿),(发送设备)进行数据的发送;
    Mode2:CPOL=1,CPHA=0
    SCLK(1)空闲;
    当SCLK由高到低跳变(下降沿),(接收设备)进行数据的读取;
    当SCLK由低到高跳变(上升沿),(发送设备)进行数据的发送;
    Mode3:CPOL=1,CPHA=1
    SCLK(1)空闲;
    当SCLK由低到高跳变(上升沿),(接收设备)进行数据的读取;
    当SCLK由高到低跳变(下降沿),(发送设备)进行数据的发送;
    [总线]SPI通信_第2张图片

2.2传输数据步骤如下

  1. 开始条件:NSS为低电平(0)
  2. 发送数据:从最高位开始(MSB)
    Mode0和Mode2
    是在第一个边沿时就进行数据的读取,所以bit1的输出是在第一个边沿之前就发送
    Mode1和Mode3
    是在第二个边沿时就进行数据的读取,所以bit1的输出是在第一个边沿时就发送
    发送的数据需要看相应的Datasheet,我遇到过数据一部分从最低位LSB开始(坑的要死,可能是大小端问题?)
  3. 结束条件:NSS为高电平(1)

你可能感兴趣的:(总线协议)