SPI总线协议

一、SPI协议

  1. SCK
    1. 时钟线,用于通讯数据同步,决定通讯速率(受限于低速设备),信号由master产生
  2. MOSI
    1. 主设备输出 / 从设备输入,数据方向:master --> slave,信号由master产生
  3. MISO
    1. 主设备输入 / 从设备输出,数据方向:slave --> master,信号由slave产生
  4. CS / NSS
    1. 片选信号线,拉低表示设备被选中,即低电平为开始信号,拉高作为结束信号,信号由master产生
  5. spi支持双线全双工、双线单向、单线模式
  • 基本通讯过程(先不谈4种通讯模式的情况下分析)

  1. 起始、停止信号
    1. ①处,NSS由高到低,是SPI起始信号。
    2. ⑧处,NSS由低到高,是SPI停止信号。
  2. 数据有效性
    1. MOSI、MISO数据线在SCK每个时钟周期传输一位数据,输入输出同时进行。数据传输MSB先行、LSB先行master、slave保持一直就行,一般为MSB先行。
    2. ②③④⑤处,SCK上升沿时MOSI、MISO可以准备数据,SCK下降沿时数据有效,可以被采样。且高电平为数据1,低电平为数据0。
    3. 每次传输的数据单位数8 / 16bit
  3. CPOL / CPHA及通讯模式
    1. CPOL时钟极性,SPI未通讯时,SCK的电平信号。(设备空闲:SPI开始前、NSS高电平时)
      1. CPOL=0,SCK空闲为低电平
      2. CPOL=1,SCK空闲为高电平
    2. CPHA时钟相位,MOSI、MISO数据线被采样时刻
      1. CPHA=0,在SCK“奇数边沿”被采样
      2. CPHA=1,在SCK“偶数边沿”被采样
    3. 四种通讯模式
      1. 由CPOL、CPHA的不同状态,SPI分成四种模式,master、slave需要在相同的模式下才能正常通信。

  1. CPHA=0时的SPI通讯模式
    1. 奇数边沿采样,不受CPOL影响

  1. CPHA=1时的SPI通讯模式
    1. 偶数边沿采样,不受CPOL影响

二、SPI通信

  • 初始化结构体
typedef struct
{
    uint16_t SPI_Direction;         /*设置 SPI 的单双向模式 */
                                    
    uint16_t SPI_Mode;              /*设置 SPI 的主/从机端模式 */

    uint16_t SPI_DataSize;          /*设置 SPI 的数据帧长度,可选 8/16 位 */

    uint16_t SPI_CPOL;              /*设置时钟极性 CPOL,可选高/低电平*/

    uint16_t SPI_CPHA;              /*设置时钟相位,可选奇/偶数边沿采样 */

    uint16_t SPI_NSS;               /*设置 NSS 引脚由 SPI 硬件控制还是软件控制*/

    uint16_t SPI_BaudRatePrescaler; /*设置时钟分频因子, fpclk/分频数=fSCK */

    uint16_t SPI_FirstBit;          /*设置 MSB/LSB 先行 */

    uint16_t SPI_CRCPolynomial;     /*设置 CRC 校验的表达式 */

} SPI_InitTypeDef;

双线全双工 SPI_Direction_2Lines_FullDuplex
双线只接收 SPI_Direction_2Lines_RxOnly
单线只接收 SPI_Direction_1Line_Rx
单线只发送 SPI_Direction_1Line_Tx

主机模式 SPI_Mode_Master
从机模式 SPI_Mode_Slave

数据帧8位  SPI_DataSize_16b
数据帧16位 SPI_DataSize_8b

SPI_CPOL_Low
SPI_CPOL_High

SPI_CPHA_1Edge
SPI_CPHA_2Edge

SPI_NSS_Soft
SPI_NSS_Hard            

SPI_BaudRatePrescaler_2
SPI_BaudRatePrescaler_4         
SPI_BaudRatePrescaler_8       
SPI_BaudRatePrescaler_16        
SPI_BaudRatePrescaler_32        
SPI_BaudRatePrescaler_64       
SPI_BaudRatePrescaler_128       
SPI_BaudRatePrescaler_256

SPI_FirstBit_MSB
SPI_FirstBit_LSB
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值