1、简介
SPI协议是一种高速全双工同步串行通信协议,由一个主设备和一个或多个从设备组成。
四线协议:MISO(Master Input Slave Output)/SDI(Serial Data Input)、MOSI(Master Output Slave Input)/SDO(Serial Data Output)、SCLK(Synchronous Clock)、CS(Chip Select)
1、MISO,主设备数据输入,从设备数据输出;
2、MOSI,主设备数据输出,从设备数据输入;
3、SCLK,同步时钟信号,由主设备产生;
4、CS,从设备使能(片选)信号,由主设备控制,低电平为选中。当总线上有多个从设备的时候,主设备如果需要和某个从设备通信,就将该设备对应的片选引脚拉低使能;
相比于I2C协议,SPI更加快速,但是由于没有相应的流控和应答机制,所以数据的可靠性上有一定的缺陷。
2、SPI总线传输模式
主设备根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse),时钟脉冲组成时钟信号(Clock Signal),时钟信号通过时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)控制两个SPI设备何时交换数据以及何时对接收的数据进行采样。
- CPOL(Clock Polarity,时钟的极性): 规约 SPI 总线在空闲时, SCK时钟信号是高电平1还是低电平0;
- CPHA(Clock Phase,时钟的相位): 规约 SPI 设备是在SCK时钟信号上升沿还是下降沿触发数据采样;
SPI 总线传输一共有 4 种模式:
-
模式 0:CPOL= 0,CPHA=0。SCK 串行时钟线空闲是为低电平,数据在 SCK 时钟的上升沿被采样, 数据在 SCK 时钟的下降沿切换;
-
模式 1:CPOL= 0,CPHA=1。SCK 串行时钟线空闲是为低电平,数据在 SCK 时钟的下降沿被采样, 数据在 SCK 时钟的上升沿切换;
-
模式 2:CPOL= 1,CPHA=0。SCK 串行时钟线空闲是为高电平,数据在 SCK 时钟的下降沿被采样, 数据在 SCK 时钟的上升沿切换;
-
模式 3:CPOL= 1,CPHA=1。SCK 串行时钟线空闲是为高电平,数据在 SCK 时钟的上升沿被采样, 数据在 SCK 时钟的下降沿切换;
3、SPI总线数据交换
一个 Slave 设备要想能够接收到 Master 发过来的控制信号, 必须在此之前能够被 Master 设备进行访 问 (Access). 所以, Master 设备必须首先通过拉低 SS/CS 管脚对 Slave 设备进行片选, 把想要访问的Slave 设备选上。
SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 "发送者(Transmitter)" 或者 "接收者(Receiver)". 事实上SPI 设备在通信时两边各有 1 个移位寄存器,这样在发送一个 bit 的同时将会收到对方 1 个 bit 的数据,当发送完 8bit 数据后,也将收到对方的 8bit 数据,这也就意味着完成了 1 个 byte 的数据交换。
SPI 数据传输过程实际上就是主从设备两个移位寄存器的数据交换过程,所以 SPI 的读功能实际上可以由 SPI 的写功能实现,即随便写一个字节的无效数据(Dummy Data)即可。
标签:协议,SCK,Clock,SPI,设备,数据,时钟 From: https://www.cnblogs.com/LiBlog--/p/18359844