SPI通信时钟极性模式介绍

目录

概述

1 SPI通信介绍

2 极性模式

2.1 极性模式概念

2.2  四种工作模式

 2.3 SPI通信时序流程

2.4 SPI通信数据有效性

 2.5 SPI通信起始和停止信号

3 Zephyr OS中SPI极性配置方法

3.1 配置方法

 3.2 使用示例


概述

本文主要介绍SPI的通信结构及其时钟极性相关内容。SPI通信协议采用主从架构,包含4条信号线:SCK时钟线、MOSI主发从收线、MISO主收从发线以及CS_N片选线。协议支持4种工作模式(模式0-3),由时钟极性CPOL和相位CPHA组合决定。模式0和3空闲时SCK为低电平,模式1和2为高电平;数据采样边沿取决于CPHA设置。在ZephyrOS中,可通过spi_config结构体的operation字段配置模式,使用SPI_MODE_CPOL和SPI_MODE_CPHA宏定义组合实现不同模式选择。通信以CS_N下降沿开始,上升沿结束,数据传输时MSB或LSB先行需主从设备保持一致。

1 SPI通信介绍

SPI通讯协议包含: 1条时钟信号线、2条数据总线和1条片选信号线, 时钟信号线为SCK,2条数据总线分别为MOSI(主输出从输入)、MISO(主输入从输出),片选信号线为,它们的作用介绍如下:

  1. SCK (Serial Clock):时钟信号线,用于同步通讯数据。由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不同,两个设备之间通讯时,通讯速率受限于低速设备。

  2. MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,数据方向由主机到从机。

  3. MISO (Master Input,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,数据方向由从机到主机。

  4. (Chip Select):片选信号线,也称为CS_N,以下用CS_N表示。

当有多个SPI从设备与SPI主机相连时,设备的其它信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同使用这3条总线;而每个从设备都有独立的这一条CS_N信号线,本信号线独占主机 的一个引脚,即有多少个从设备,就有多少条片选信号线。I2C协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而SPI协议中没有设备地址,它使用CS_N信号线来寻址,当主机要选择从设备时,把该从设备的CS_N信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行 SPI通讯。

所以,SPI通讯以CS_N线置低电平为开始信号,以CS_N线被拉高作为结束信号

2 极性模式

2.1 极性模式概念

SPI_MODE_CPOL (Clock Polarity) 是SPI通信中控制时钟极性(Clock Polarity)的重要参数,它决定了SPI时钟信号在空闲状态时的电平。

SPI通讯协议一共有四种通讯模式,模式0、模式1、模式2以及模式3,这4种模式分别由时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)来定义,其中:

1) CPOL参数规定:空闲状态(CS_N为高电平,设备未被选中)时SCK时钟信号的电平状态,

2)CPHA规定: 数据采样是在SCK时钟的奇数边沿还是偶数边沿

2.2  四种工作模式

SPI有四种工作模式,由CPOL和CPHA组合决定:

模式CPOLCPHA描述
000空闲状态时SCK串行时钟为低电平;数据采样在SCK时钟的奇数边沿,本模式中,奇数边沿为上升沿;数据更新在SCK时钟的偶数边沿,本模式中,偶数边沿为下降沿。
101空闲状态时SCK串行时钟为低电平;数据采样在SCK时钟的偶数边沿,本模式中,偶数边沿为下降沿;数据更新在SCK时钟的奇数边沿,本模式中,偶数边沿为上升沿。
210CPOL= 1,CPHA=0。空闲状态时SCK串行时钟为高电平;数据采样在SCK时钟的奇数边沿,本模式中,奇数边沿为下降沿;数据更新在SCK时钟的偶数边沿,本模式中,偶数边沿为上升沿。
311CPOL= 1,CPHA=1。空闲状态时SCK串行时钟为高电平;数据采样在SCK时钟的偶数边沿,本模式中,偶数边沿为上升沿;数据更新在SCK时钟的奇数边沿,本模式中,偶数边沿为下降沿。

 2.3 SPI通信时序流程

以模式0为例,介绍SPI基本的通讯过程。SPI模式0通讯时序图如下:

2.4 SPI通信数据有效性

SPI通信的数据传输特性如下:

1)SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步

2)MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。

3)数据传输时,MSB先行或LSB先行并没有作硬性规定,但要保证两个SPI通讯设备之间使用同样的协定,一般都会采MSB先行模式。

 2.5 SPI通信起始和停止信号

起始信号: CS_N信号线由高变低,是SPI通讯的起始信号。CS_N是每个从机各自独占的信号线,当从机在的CS_N线检测到起始信号后,就知道slave被主机选中了,开始准备与主机通讯。

停止信号: CS_N信号由低变高,是SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

3 Zephyr OS中SPI极性配置方法

3.1 配置方法

在Zephyr RTOS中,CPOL通常与CPHA(时钟相位)一起配置:

#include <drivers/spi.h>

/* 配置SPI模式 */
struct spi_config cfg = {
    .frequency = 1000000,  // 1MHz
    .operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8) | 
                SPI_MODE_CPOL | SPI_MODE_CPHA,
    .slave = 0,
};

 3.2 使用示例

1).配置SPI模式0 (CPOL=0, CPHA=0)

.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8) | 
             SPI_TRANSFER_MSB  // 默认就是模式0

2)配置SPI模式1 (CPOL=0, CPHA=1)

.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8) | 
             SPI_MODE_CPHA

3)配置SPI模式2 (CPOL=1, CPHA=0)

.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8) | 
             SPI_MODE_CPOL

4)配置SPI模式3 (CPOL=1, CPHA=1)

.operation = SPI_OP_MODE_MASTER | SPI_WORD_SET(8) | 
             SPI_MODE_CPOL | SPI_MODE_CPHA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值