SPI 协议介绍
你的电脑或者手机里面有很多小零件,它们需要互相交流信息。SPI 总线就像是这些小零件之间的“聊天线”。这个聊天线有四根,就像是一个四人聊天小组。
1. SPI 总线
SPI 是一种让电脑里的小零件互相聊天的方式,最初是由摩托罗拉公司发明的。因为它用起来很简单,所以很多其他的公司也开始用它。现在,它已经成为连接电脑内部各种小零件的标准方式了。比如,它可以连接 CPU 和键盘、屏幕、传感器、存储卡等。
SPI是同步的,就像大家聊天时需要听一个人指挥一样。它有四根线,分别是:
- MOSI:主设备输出/从设备输入,就像一个人说话,其他人听。
- MISO:主设备输入/从设备输出,就像其他人说话,那个人听。
- SCLK:时钟线,就像指挥大家聊天的人。
- CS或SS:从设备选择线(片选),就像点名,告诉谁现在可以说话。
SPI是全双工的,意味着大家可以同时说话和听,就像打电话一样。它的聊天速度可以从很慢到很快,比如从几Mb/s到几十Mb/s。
设备使用主从架构进行通信,有一个主设备,就像聊天小组的组长。组长开始聊天,其他的从设备就像是小组成员,每个成员都有自己的名字(从设备选择线),组长可以通过点名来和特定的成员聊天。
2. 接线
SPI总线就像是有四根线的聊天小组。这四根线分别是:主输出/从输入 (MOSI)、主输入/从输出 (MISO)、时钟 (SCLK) 和从选择 (SS) 或片选 (CS)。
3. 信号
当两个设备聊天时,一个就像是组长(主设备),另一个就像是小组成员(从设备)。组长控制聊天的节奏(主设备驱动时钟),数据同时传输和接收,所以这是一个全双工的聊天方式。SPI 用 CS(或SS)线来指定现在和哪个设备聊天,所以每个设备都需要有自己的 CS 信号。如果有 3 个设备,就有 3 根 CS 线从组长(主设备)连接到每个从设备。
开始聊天时,组长设置聊天的节奏(时钟),这个节奏要大家都能接受,通常是几MHz或几十MHz。然后组长通过点名(主设备选择选择线上具有逻辑电平0的从设备)来选择要聊天的成员。
在每个 SPI 时钟周期内,会发生全双工数据传输。组长在 MOSI 线上发送一个 bit,成员读取它,同时成员在 MISO 线上发送一个 bit,组长读取它。
传输就像是两个寄存器(给定字大小的移位寄存器)之间(一个在主机中,一个在从机中)的聊天,比如八位。数据通常从最重要的部分开始聊,同时接收新的最不重要的部分(数据通常首先移出最高有效位,同时将新的最低有效位移入同一寄存器。寄存器完全移出后,主机和从机就交换了寄存器。)。
如果还有更多要聊的,寄存器重新加载(重新加载移位寄存器并重复该过程),然后继续聊。聊天可以持续任意数量的时钟周期。完成后,组长停止聊天的节奏(停止时钟信号)并结束聊天(取消 CS)。
组长一次只能和一个成员聊天(主设备一次只能选择一个从设备)。那些没有被点名的成员必须忽略聊天的节奏和MOSI信号,而且不能在MISO上说话(总线上尚未使用其片选线激活的从设备必须忽略输入时钟和 MOSI 信号,并且不得驱动 MISO)。
4. 引用
https://www.picotech.com/library/knowledge-bases/oscilloscopes/serial-protocol-decoding-spi