SPI详解(二)

数据传输

要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。片选通常是低电平有效信号。 SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线MISO/SDI上的数据)同时进行,通常都是MSB位先传输。串行时钟沿同步数据的移位和采样。 SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样和/或移位数据。


时钟极性和相位

SPI通信中,主机可以选择时钟极性和时钟相位,可以将工作模式分为4种。

  • CPOL:Clock Polarity 决定时钟空闲状态电平是高电平还是低电平
    1=时钟空闲时为高,时钟低电平有效
    0=时钟空闲时为低,时钟高电平有效
  • CPHA:Clock Phase 决定数据传输采样和移位方式
    1=数据采样发生在时钟偶数(2,4,6,…,16)边沿(包括上下边沿)
    0=数据采样发生在时钟奇数(1,3,5,…,15)边沿(包括上下边沿)

根据这种分配,4种SPI工作模式如下所示:

SPI模式 CPOL CPHA 空闲状态时钟极性 采样/移位时钟相位
0 0 0 低电平 上升沿采样下降沿移位
1 0 1 低电平 上升沿移位下降沿采样
2 1 0 高电平 上升沿移位下降沿采样
3 1 1 高电平 上升沿采样下降沿移位

在这里插入图片描述


时序

以下是4种工作模式下的通信示例,在这些示例中,数据显示在MOSI和MISO线上。传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。 请注意,这些图形仅供参考。要成功进行SPI通信,用户须参阅产品数据手册并确保满足器件的时序规格。

  1. 模式0:
    在这里插入图片描述

  2. 模式1:
    在这里插入图片描述

  3. 模式2:
    在这里插入图片描述

  4. 模式3:
    在这里插入图片描述


注:

  1. SPI是一个很开放的接口,指令解析、帧大小、LSB/MSB(Least Significant Bit/Most Significant Bit)、传输速率等规则并没有一个完善的定义,不同的SPI设备在这些方面的定义会有不同。
  2. 不同SPI芯片,每次连续传输的数据量的大小(取决于MASTER、SLAVE中缓存最小的那个)常常不同。当一次连续通讯的的数据量超过帧的大小时,会出现数据丢失的现象。所以,每完成1帧的传输后,MASTER会停止接口时钟输出,master、slave读取处理收到的数据,然后进行下一帧的传输。
  3. 在SPI接口协议中,并没有中断的定义,但是实际应用中,我们可以使用接口中断提高接口通讯速度。比如SLAVE是负责数据数据加解密的,MASTER下发一组明文给SLAVE加密,如果此时有个SLAVE输出到MASTER的中断信号,那么MASTER可以清楚的知道何时SLAVE完成了数据处理并读出处理结果,不必通过查询一遍遍的等待结束。

参考
1. Serial Peripheral Interface - wikipedia
2. TI数字接口(续)— SPI 总线
3. Sparkfun-Serial Peripheral Interface (SPI)
4. SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL)
5. SPI详解
6. SPI Block Guide V04.01

猜你喜欢

转载自blog.csdn.net/sternlycore/article/details/86161913