spi四种工作模式时序图_关于SPI协议的详解和实现

SPI是一种高速同步通信总线,常用于与FLASH、DSP等通信。本文详细介绍了SPI的四种工作模式,依赖于CPOL和CPHA的设置,以及如何在51单片机中实现CPOL=1, CPHA=1的代码示例。通过理解SPI的时序,可以更好地掌握数据的采样和输出时机。" 47980363,3804447,Android 5.0以上版本安装apk报错:Only file:// URIs are supported,"['安卓开发', 'Android', '应用安装', '异常处理', 'Uri']
摘要由CSDN通过智能技术生成

SPI是一种高速的、全双工、同步通信总线,并且只占用四根线,常用来和FLASH、数字信号处理器等通信。SPI通信要比I2C简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,通常也只需要四根线,分别都是 CS(片选使能)、SCLK(时钟信号)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)

SPI使用也是非常灵活的也可以使用2根线或3根线进行通信。列如当主机只给从机发送命令,而从机福需要回复数据给主机的时候,就可以不要MISO,有时当变片选信号固定为有效电平时CS(片选使能)就可以不要,这样就可以实现2根线也可通信,3根线也可以通信了。一般标准的还是4根线进行SPI通信。

SPI接口有四种不同的数据通信时序,取决于CPOL和CPHL这两位的组合。

CPOL:Clock Polarity 是时钟的极性。,什么是时钟极性,在通信的过程中分为空闲时刻和通信时刻,如果在空闲时刻为高电平那么CPOL=1,如果空闲时刻为低电平那么CPOL=0;

CPHA: Clock Phase 是时钟的相位,时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。

当CPHA=0 表示数据的采样是在一个时钟周期的第一个沿上(至于是上升沿或下降沿由CPOL决定),那么数据的输出就是在第二个沿上了。

当CPHA=1表示数据的采样是在一个时钟周期的第二个沿上(至于是上升沿或下降沿由CPOL决定),那么数据的输出就是在第一个沿上了。

如下图:

31ad3c52f22d2e5cb47daf7e9a3c9caa.png

CPOL=0,CPHA=0,空闲状态下SCK为低电平,数据采集是在第一个沿上(SCK由低电平变为高电平)所以数据采集是在上升沿,数据的输出是在第二个沿上的下降沿。

a6b3c18dc3b6d5d02fe08499e465d7d6.png

CPOL=1,CPHA=0,空闲状态下SCK为高电平,数据采集是在第一个沿上(SCK由高电平变为低电平)所以数据采集是在下将沿,数据的输出是在第二个沿上的上升沿。

48bc6917c3b52ae3924ef35febf4244b.png

CPOL=0,CPHA=1,空闲状态下SCK为低电平,数据采集是在第二个沿上(SCK由高电平变为低电平)所以数据采集是在下将沿,数据的输出是在第一个沿上的上升沿。

5bb058d19217770cb75e734a6dd9102f.png

CPOL=1,CPHA=1,空闲状态下SCK为高电平,数据采集是在第二个沿上(SCK由低电平变为高电平)所以数据采集是在上升沿,数据的输出是在第一个沿上的下降沿。

下面我们以51单片机为例编写CPOL=1,CPHA=1时相应的代码

Unsigned char SPI_ReadWriteByte(unsigned char Dat)

{

unsigned char temp=0;

unsigned char i=0;

SPI_SCK =1;//空闲高电平

for(i=0;i<8;i++)

{

if((Dat&0X80))

MOSI_OUT=1; //输出高电平1

else

MOSI_OUT=0; //输出低电平0

Dat<<=1; //数据左移一位

SPI_SCK =0; //第一个下降沿输出数据

Temp<<=1; //数据左移一位

if(MISO)temp++; //采集从设备返回来的数据,然后拉高时钟

SPI_SCK =1; 第二个上升沿采集数据

}

SPI_SCK=1;//空闲高电平

return temp;

}

写数据首先要片选使能从设备然后给从设备发送数据,等数据传输完成后,取消片选

Void SPI_Write_Data(unsigned char dat)

{

Unsigned char value=0;

SPI_CS=0;

value=SPI_ReadWriteByte(dat);//主设备向从设备发送数据,并返回从设备发送过来的数据。

SPI_CS=1;

}

喜欢的朋友支持关注和转发。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值