学习回顾:SPI

本文介绍了SPI(SerialPeripheralInterface)数据总线的特性,与IIC的比较,硬件连接方式,以及工作原理,特别强调了时序逻辑和不同芯片的指令规定。例如,W25Q64的写数据过程需要遵循特定步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SPI简介

        spi是由Motorola公司开发的一种通用数据总线,它由4根线组成,分别是SCK、MOSI、MISO和SS,它支持同步、全双工的模式,支持一主多从。

        相较于IIC,SPI通信协议通信速度更快,由于IIC上拉电阻的原因,导致其高电平驱动能力较弱,这就会导致从低电平转换到高电平的时间较长,导致其通信速率下降。

二、硬件电路

  • 所有SPI设备的SCK、MOSI、MISO分别接在一起。
  • 主机另外引出多条SS线,分别接在各个从机的SS引脚。
  • 输出引脚配置为推挽输出,输入引脚配置为浮空或者上拉输入。

        从这个图中我们可以看出,SCK时钟线由主机引出接入从机中,MOSI是主机输出从机输入,而MISO是主机输入从机输出,SS分别接在各个从机设备中。相对于IIC来说,SPI线更多,但是输入和输出是分开的两根线,控制线也是单独引出的,不需要像IIC一样需要寻址。但是SPI一次也只能控制一个从机设备,否则就会造成数据冲突。

        接下来我们详细了解一下SPI的工作原理:

        上图中SCK代表时钟线,分别接入主机和从机中,这样保证了同步的工作模式。既然有时钟,那么在时钟上升沿时,主机中的移位寄存器(高位先行)通过MOSI向从机发送1,而从机同样通过MISO向主机发送0,在时钟的下降沿,主机读取MISO中的数据0,从机读取MOSI的数据1, 从而完成“互换”。而SPI本质就是互换数据。那么互换,在单独接收和发送的时候呢?这个时候我看通过看SPI的官方协议可知,单独接收和发送也是互换数据,只不过这个时候一方会发送0x00或者0xFF。

三、时序单元

  • 起始条件:SS从高电平转换到低电平。
  • 终止条件:SS从低电平转换到高电平。

        接下来我们看上面的时序图:

  • 在SS从高电平转换到低电平的时候,代表传输开始,这时在时钟的变化周期中就会进行数据“移出和移入”。我们运用的最多的模式是在SCK的第一个边沿移出数据,第二个边缘移入数据,也就是数据采样。但是在图中我们可以看到MISO两端是居于高低电平之间的。这个代表高阻态。
  • 为什么要有高阻态呢?我们知道在选择从机的时候,我们SS要置为低电平,这个时候为了防止数据冲突,在SS高电平的时候,从机的MISO要置为高阻态,这样就可避免数据冲突。
  • SPI还有其他的时序逻辑,这里我们不予讨论。

四、时序逻辑

        在分析时序逻辑之前,我们先要知道,SPI交换数据过程中,第一个数据一般都是指令码,在对应的从机中一般都会有指令集用于对应,比如我们经常用到的写数据,写数据使能,写数据失能等。比如在写数据失能和使能的时候,我们只需要向其发送一个字节的指令码即可。但是在写数据的时候,我们就需要给指令码之后继续发送写入的信息。知道这个之后我们来分析一下时序:

这里我们抓取一段波形来分析一下:

  • 在SS高电平进入低电平的时候,时序开始。
  • SCK时钟周期变化的时候,上升沿进行数据采样,下降沿变换数据,我们可以看到在一个周期内完成了一次数据的变换0x06。

        知道了逻辑之后,我们便可正常使用SPI通信了。但是需要注意的是,不同从机芯片的指令规定一般都是不同的,这个需要我们根据数据手册来对应去开发。比如项目中用到的W25Q64芯片,我要写数据的时候,一般先是写使能,然后写数据指令,在W25Q64的芯片手册的规定,在写数据之林之后的字节是地址高位,然后依次地址低位,在地址发送完毕之后,在跟着的要写入的数据。这个需要注意一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值