SPI通信协议

简介       

SPI 协议是由摩托罗拉公司提出的通讯协议 ,即串行外围设备接口(Serial Peripheral Interface),是一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率
较高的场合。
特色:
  • 全双工,同步通信
  • 提供高速的传输(>=100MHZ)
  • 可提供一对多的接线,但同一时间只能与一个从机通信,其余从机的MISO必须设定为高阻抗输出(High Impedance)
  • 高位先行(MSB First)
  • 通过设置CPOL与CPHA,加上弹性的主频(时钟频率)和位元变化(数据帧可变),可应对多样的装置需求

引脚说明

        SPI通常由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据的交换。SPI是一个环形结构,通信时需要至少4根线(事实上在单向传输时3根线也可以),即3条总线及片选线。3条总线分别为 SCK、MOSI、MISO,片选线为 SS ,它们的作用介绍如下:
 
  • SSx(x Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSSCS,以下用 NSS 表示。当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI 及 MIS O 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每 个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。SPI 协议中没有设备地址,它使用 NSS 信号线来寻址,当主机要选择从设备时,把该从设备的 NSS 信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行 SPI 通讯。所以 SPI 通讯以 NSS 线置低电平为开始信号,以NSS 线被拉高作为结束信号。
  • SCK (Serial Clock):时钟信号线,用于通讯数据同步。它由通讯主机产生,这样的传输方式有一个优点,在数据位的传输过程中可以暂停,也就是时钟的周期可以为不等宽,因为时钟线由主设备控制,当没有时钟跳变时,从设备不采集或传送数据。时钟信号决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为 fpclk/2,
    个设备之间通讯时,通讯速率受限于低速设备。
  • MOSI (Master OutputSlave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
  • MISO(Master Input,Slave Output):主设备输入/从设备输出引脚。主机从这条信线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。需要注意的是,在下图的信号线中,只有MISO的信号来源于多个从机,其余信号线的信号都由一个主机发出,因此SPI规定,当从机未被选中时,MISO引脚输出高阻抗,防止干扰主机与被选中的从机的通信;同时,输出高阻抗这一特性也会影响到SPI在实际传输上的一些动作。
 

1b00d03e7a504993ad81eccd67ab9c15.png

 

 

 

 
 

时序解析

基于时钟极性与时钟相位的采样设置

        SPI接口有四种不同的数据传输时序,取决于CPOL(Clock Polarity 时钟极性)和CPHA(Clock Phase 时钟相位)这两位的组合,在实际应用中要根据主从设备的时序要求选择正确的时序。

        时钟极性 CPOL 是指 SPI 通讯设备处于空闲(IDLE)状态时,SCK 信号线的电平信号 (即 SPI 通讯开始前、NSS 线为高电平时 SCK 的状态)。CPOL=0 时,SCK 在空闲状态时为低电平,CPOL=1 时,则为高。
        
        时钟相位 CPHA 是指数据的采样的时刻,当 CPHA=0 时,MOSI 或 MISO 数据线上的信号将会在 SCK 时钟线的“奇数边沿”被采样。当 CPHA=1 时,数据线在 SCK 的“偶数边沿”采样。
 

a9827a0ef6c4473b9cdb9d383f05a3cd.png

CPHA=0 时的 SPI 通讯模式

 97cce2a7f4e74a3681b2c0e8881cd60c.png

 CPHA=1 时的 SPI 通讯模式

SPI 的四种采样模式
SPI模式 CPOLCPOA空闲时SCK电平采样时刻
000低电平奇数边沿(上升沿)
101低电平偶数边沿(下降沿)
210高电平奇数边沿(下降沿)
311高电平

偶数边沿(上升沿)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值