| 时间 | SCK | MOSI | MISO | CS/SS |
|-----------|------|------|------|-------|
| T0 (开始) | LOW | | | HIGH |
| T1 | LOW→HIGH | D7 | D7' | LOW | (主设备发送D7,从设备发送D7')
| T2 | HIGH→LOW | D6 | D6' | LOW | (主设备发送D6,从设备发送D6')
| ... | ... | ... | ... | LOW |
| T8 | LOW→HIGH | D0 | D0' | LOW | (主设备发送D0,从设备发送D0')
| T9 | HIGH→LOW | | | LOW | (准备下一个字节的传输)
| T10 | | | | HIGH | (结束通信,拉高CS/SS)
SPI(Serial Peripheral Interface,串行外围设备接口)总线技术是由Motorola公司推出的一种同步串行接口,广泛用于CPU与各种外围器件之间的全双工、同步串行通讯。
一、SPI总线基本特性
SPI总线主要包括以下几根线:
- SCK(Serial Clock):串行时钟线,由主设备产生,用于同步数据传输。
- MOSI(Master Output, Slave Input):主设备输出/从设备输入数据线,用于主设备向从设备发送数据。
- MISO(Master Input, Slave Output):主设备输入/从设备输出数据线,用于从设备向主设备发送数据。
- CS/SS(Chip Select/Slave Select):从设备使能信号,低电平有效,用于选择指定的从设备进行通信。
二、SPI总线的工作方式
SPI总线有四种工作方式(Mode 0, Mode 1, Mode 2, Mode 3),这些方式由时钟极性(CPOL)和时钟相位(CPHA)决定:
- CPOL:时钟极性,决定了SCK空闲时的电平状态。CPOL=0时,SCK空闲时为低电平;CPOL=1时,SCK空闲时为高电平。
- CPHA:时钟相位,决定了数据是在SCK的哪个跳变沿被采样。CPHA=0时,在SCK的第一个跳变沿(上升沿或下降沿,取决于CPOL)采样数据;CPHA=1时,在SCK的第二个跳变沿采样数据。
三、SPI传输数据的时序图详解(以Mode 0为例)
在Mode 0下,SPI的时序特点如下:
- SCK空闲状态:低电平。
- 数据采样:在SCK的上升沿采样数据。
- 数据发送:在SCK的下降沿发送数据。
以下是基于Mode 0的SPI传输数据的时序图详解:
- 初始化:
- 主设备拉低CS/SS信号线,选中从设备,开始通信。
- 时钟信号产生:
- 主设备开始产生SCK时钟信号,SCK从低电平跳变至高电平(上升沿),然后从高电平跳变至低电平(下降沿),如此循环。
- 数据发送与接收:
- 在SCK的每个上升沿,主设备通过MOSI线向从设备发送数据位(MSB在前),同时从设备通过MISO线向主设备发送数据位(MSB在前)。
- 在SCK的每个下降沿,主设备和从设备准备下一个数据位进行发送和接收。
- 数据交换完成:
- 当完成一个字节(8位)的数据传输后,主设备和从设备的移位寄存器中的内容被交换。
- 如果需要继续传输,则重复上述过程;如果传输完成,主设备拉高CS/SS信号线,结束通信。