一、简述
SPI Bus(Serial Peripheral Interface Bus) 最早是由Motorola(摩托罗拉)公司开发的
全双工同步串行总线。实际它并没有统一的协议规范,只是随之其广泛的应用,形成了习惯性的标准。具体的还是要参考特定的器件手册。
二、连接方式
SPI一对一
SPI用于在单个主控制器和一个或多个从设备之间交换数据。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),对于单从设备连接使用四条信号线:
SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)
-
MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
-
MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
-
SCLK: 串行时钟信号,由主设备产生。
-
CS/SS: 从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
SPI一对多
三、通讯协议
当SPI主设备想读/写[从设备]时,它首先拉低[从设备]对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”,如下图:
-
首先确认是mode3,即sck的下降沿发送数据,上升沿采集数据。
-
SSEL(CS)拉低,选中对应的从设备
-
SCK第奇数个边沿(下降沿),MOSI(输出)改变数据(MISO也会类似的变化),例如,如果想要输出1,则此时需要从0变为1或者保持1不变
-
SCK的偶数个边沿(上升沿),此时会采集MISO上的数据,锁存到寄存器中。
-
主次三四步,对于从设备而言,主设备的MOSI和MISO在从设备上刚好是相反的。下面会通过一个例子详细解释过程。
例:
假设主机和从机初始化就绪:并且主机的sbuff=0x72,从机的sbuff=0xC7,下面将分步对spi的8个时钟周期的数据情况演示一遍
假设CPOL为0,SCPH为0,即mode 0,上升沿发送,下降沿接收
|
编号
|
脉冲
|
主机sbuff
|
从机sbuff
|
MOSI
|
MISO
|
|
0
|
0 初始状态
|
0111 0010
|
|

最低0.47元/天 解锁文章
32万+

被折叠的 条评论
为什么被折叠?



