SPI总线是微处理器和外设之间进行数据交互的常用串行总线接口。本文主要介绍了SPI的接口类型、数据传输(时钟极性、时钟相位)、读、写操作的具体代码,最后是一个完整的xpt2046实现ADC的代码实现及注意事项。
1 、接口简介
串行外设接口(SPI)是微控制器(MCU)和外围IC(如传感器、ADC、DAC、移位寄存器、SRAM等)之间使用较广泛的接口之一。SPI是一种同步、全双工、主从式接口。来自主机或者从机的数据在时钟上升沿或下降沿同步。主机和从机可以同时传输数据。SPI接口可以是三线式或者4线式。本文主要介绍4线式SPI接口。

图1 SPI总线:单一主机对单一从机模式
4线SPI总线有四个信号:
时钟(SPI CLK,SCLK)。
片选(CS)。
主机输出、从机输入(MOSI)。
主机输入、从机输出(MISO)。
产生时钟信号的器件称为主机(MCU)。主机和从机之间传输的数据与主机产生的时钟同步。SPI接口只能有一个主机,但可以有多个从机。

图2 SPI总线:单一主机对多从机模式(2个从机)
来自主机的片选信号用于选择从机。这通常是一个低电平有效的信号,拉高时,从机与主机断开连接。当使用多个从机时,主机需要为每个从机提供单独的片选信号。MOSI和MISO是数据线。MOSI将数据从主机发送到从机,MISO将数据从从机发送到主机,实现主机和从机的数据交互。
2、 数据传输
要开始SPI通信,主机通过使能CS信号选择从机,发送时钟信号。片选(CS)一般是低电平有效信号。因此,主机必须在该信号上发送逻辑“0”以选择从机。SPI是全双工通信接口,主机和从机可以分别通过MOSI和MISO线路发送和接收数据(数据交互)。在SPI通信期间,数据的发送(串行移出到MOSI/MISO)和接收(MISO/MOSI)可以同时进行。串行时钟沿同步数据的移位和采样。SPI接口允许用户灵活选择上升沿或者下降沿采样(读操作,输入)或者移位(写操作,输出)。读、写操作字节都是从最高位(MSB)开始的。

图3 SPI通信读、写的bit顺序
3 、时钟极性(clock polarity,CPOL)与时钟相位(clock phase,CPHA)
在SPI通信接口中,主机可以选择时钟极性和时钟相位。空闲状态就是片选(CS)无效时的状态。在空闲状态期间,CPOL位设置时钟信号(SCLK)的极性。
![]()
表1 CPOL极性规定
CPHA位选择时钟相位,规定主机采样数据时的时钟边沿,包括第一个跳变沿和第二个跳变沿。
![]()
表2 CPHA极性规定
根据CPOL位和CPHA位的不同组合,有四种SPI模式可用。

表3 CPOL位和CPHA位的不同

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

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



