文章目录
SPI 是什么
四条 “车道” 的作用
工作模式就像“舞蹈的节奏”
通信过程是“一场对话”
SPI 通信的“厉害之处和用途”
SPI 是什么
想象SPI是一个小小的数据高速公路,专门用于让STM32芯片和其他设备(比如传感器或者存储卡)之间快速地传递信息。这条高速公路有四条 “车道”,分别有不同的用途。

四条 “车道” 的作用
1. 主设备输出 / 从设备输入线(MOSI):
这就好比是主设备(STM32)的一个 “说话通道”。
主设备通过这条线把数据发送给从设备,就像你对着麦克风说话,声音通过电线传输到音响里一样。
2. 主设备输入 / 从设备输出线(MISO):
这是从设备回应主设备的 “说话通道”。
从设备通过这条线把数据发送给主设备,就好像音响通过另一条电线把它自己的状态信息(比如音量大小等)反馈给控制它的设备。
3. 时钟线(SCLK):
这条线就像是整个通信过程的 “指挥棒”。
主设备通过它发出有节奏的 “滴答” 声(时钟信号),来告诉其他设备什么时候该发送数据,什么时候该接收数据。
所有的数据传输都要跟着这个节奏来,就像大家一起跟着指挥家的指挥棒演奏音乐一样。
4. 片选线(SS):
这是一个 “点名通道”。
当主设备想要和某个特定的从设备通信时,就通过拉低(让电压变低)这个从设备对应的片选线来 “点名” 它;
就好像老师在教室里点名让某个学生回答问题一样。
只有被点名(片选线为低电平)的从设备才会参与通信。
工作模式就像“舞蹈的节奏”
SPI 有四种工作模式,这主要是由时钟信号的 “空闲状态”(时钟极性 CPOL)和数据采样的 “时机”(时钟相位 CPHA)来决定的。
– 时钟极性(CPOL):
如果 CPOL 是 0,那么时钟线在没有数据传输的时候(空闲状态)是低电平,就像指挥棒在休息的时候是放在下面的;
如果 CPOL 是 1,空闲状态时钟线就是高电平,指挥棒在休息的时候是举起来的。
– 时钟相位(CPHA):
这个决定了数据是在时钟信号的哪个 “滴答” 声(边沿)被接收或者发送。
比如 CPHA 是 0 的时候,数据可能在时钟信号的第一个 “滴答” 上升沿或者下降沿就开始传输;
如果 CPHA 是 1,数据可能在第二个 “滴答” 沿传输,就好像舞蹈的节奏不同,动作(数据传输)的时机也不同。
通信过程是“一场对话”
– 初始化准备:
就像你在打电话之前要先准备好手机一样,STM32 要先开启 SPI 通信的功能(使能 SPI 时钟),还要设置好通信的 “规则”。
比如数据是从高位开始发送还是低位开始发送,通信速度有多快(波特率),采用哪种工作模式等。
而且一开始所有的从设备都没有被选中(片选线为高电平),就像大家都在等待被点名一样。
– 开始对话(数据传输):
当 STM32 想要和某个从设备通信时,它会先拉低这个从设备对应的片选线(点名)。
然后它会检查一下发送缓冲区是不是空的(就像检查自己的嘴巴是不是可以说话了),如果空了,就把要发送的数据放到发送缓冲区(开始说话)。
同时,在这个过程中,从设备也会根据主设备的时钟信号,在合适的时候把自己的数据通过 MISO 线发送给主设备(回应)。
主设备会时刻注意接收缓冲区有没有收到从设备发来的数据(就像竖起耳朵听回应),如果收到了,就把数据从接收缓冲区拿出来。
– 结束对话:
当数据传输完了,STM32 就会拉高片选线,结束和这个从设备的通信,就像打完电话挂掉一样。
SPI 通信的“厉害之处和用途”
SPI 通信速度挺快的,就像高速公路上的车可以开得很快一样,能够快速地把数据从一个地方送到另一个地方。
而且它可以同时双向传输数据,就像两个人可以同时说话和听对方说话一样,效率很高。
另外,SPI 协议理解起来不是很难,在 STM32 里用软件和硬件实现起来也比较方便,占用的资源也不多,所以经常被用来连接一些需要快速获取数据的设备,比如传感器(获取环境数据)、存储卡(存储和读取数据)、显示屏(显示信息)等。
作者:Electron-er