本文目的
简单的介绍SPI通信一下是什么,有什么用,面试可能会问道的内容
前置知识点
- 基本数电时序电路,寄存器地址知识
- 单片机中断,外设基本知识
相关内容参考《CN_UM_N32G45x Series User Manual V3.1.0.pdf》SPI/I2S 接口,p517
SPI 接口简介
相关内容参考wiki关于SPI的介绍
串行外设接口 (SPI) 是同步串行通信的事实上的标准(有许多变体),主要用于嵌入式系统中集成电路之间的短距离有线通信。
典型应用包括将微控制器与安全数字卡、液晶显示器、模数和数模转换器、闪存和 EEPROM 存储器以及各种通信芯片的外围芯片连接起来。
引脚类型
SPI 有四个逻辑信号(有不同的命名):
- SCLK:串行时钟(来自主时钟信号)
- MOSI:Main Out Sub In(主输出数据)
- MISO:Main In Sub Out(子设备的数据输出)
-
C
S
‾
\overline {CS}
CS:片选(从主设备到地址子设备的低电平有效信号并启动传输),在接多个SPI从机的时候可能需要多个片选信号
主要特性
- 全双工和单工同步模式
- 支持主模式、从模式和多主模式
- 支持 8bit 或 16bit 数据帧格式
- 数据位顺序可编程
- 硬件或软件片选管理
- 时钟极性和时钟相位可配置
- 发送和接收支持硬件 CRC 计算及校验
- 支持 DMA 传输功能
- 没有应答机制(相比IIC)
- 本身没有规定最高速率
通信流程(时序)
比IIC简单一些,全双工同时收发。
时序模式选择
- 四种时序模式,由CLKPOL和CLKPHA决定
- CLKPOL,Clock Polarity时钟极性,决定总线空闲期间时钟的默认电平。
- CLKPHA,Clock Phase时钟相位,决定通信时,在时钟的前沿还是后沿采集数据。
- 0在前沿采样
- 1在后沿采样
- 一个完整的时钟周期由两个边沿组成,先上后下还是先下后上取决于时钟极性。
- 下图给出了CLKPOL和CLKPHA在不同的情况下的通信时序图。
- 主从机在这方面的选择必须一致,否则无法进行通信。
移位寄存器的数据流向
- 对于后面理解为什么收发数据缓存公用SPI_DAT寄存器可能有帮助。
- 在一次通信中,主从机的移位寄存器通过MISO和MOSI互换了可以说。
通信流程
- C S ‾ \overline {CS} CS拉低片选。
- CLK跳变同时进行MOSI数据的准备,以及MISO数据的接收。
- 8bit为一组或者16bit为一组,取决于SPI的配置。
给出了在实际的单片机中一个全双工的通信时序,以CLKPOL = 1,CLKPHA = 1,8bit一帧数据为例。
- 关注在通信的时候,什么时候会出现对应标志位的跳变,一般在非DMA的情况下会使用中断方式的通信节省CPU资源(有DMA就更好了)。
- 这个SPI硬件中,收发数据的缓冲区都是SPI_DAT
- 发数据前,SPI_DAT是待发送数据,会进入到移位寄存器中。
- 此时SPI_DAT是空的,会触发TE(Transmit Empty),主机写下一帧数据进去。
- 经过8个时钟,主从机移位寄存器呼唤,此时移位寄存器是收到的数据,触发RNE(Receive Not Empty)。
- 怀疑:此时SPI_DAT就已经和移位寄存器交换数据了,移位寄存器是待发送下一帧数据,SPI_DAT现在是接收的数据。
- 主机读SPI_DAT获得数据
- 继续通信,由于SPI_DAT的待发送数据已经在移位寄存器了,会触发TE,继续写数据进去,以此类推。
- 某次TE之后不写数据进去了,等待SPI_STS.BUSY然后关闭SPI模块结束通信。
- 主模式下,当数据写进发送缓存,发送过程开始。当前数据帧发送完成前,如果下个数据写进 SPI_DAT 寄 存器,连续发送可以实现。
其他
在某些SPI控制器或芯片中,可能会使用一个共用的寄存器来处理SPI数据的收发。这个寄存器可以是一个缓冲器或一个数据寄存器,用于在SPI总线上进行数据传输。
对于一些SPI控制器,可能存在一个寄存器(有时称为数据寄存器或数据缓冲器),在该寄存器中进行数据的收发。这种寄存器通常是一个双向的寄存器,可以用于写入要发送的数据,同时也可以读取接收到的数据。
在这种情况下,当要发送数据时,将数据写入这个寄存器,它会被发送到SPI总线上;同时,当接收到数据时,这个寄存器也会存储接收到的数据,供主机系统读取。
这样的设计使得收发数据能够通过同一个寄存器进行处理,简化了数据收发过程。但这种设计可能会有一些限制或特殊的操作要求,需要查阅相关的芯片手册或技术文档以了解具体的使用方法和操作细节。
参考文献
《CN_UM_N32G45x Series User Manual V3.1.0.pdf》SPI/I2S 接口,p517