持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
一、SPI总线协议简介
SPI接口(Serial Peripheral Interface)是由摩托罗拉公司设计的一种标准四线同步双向串行总线,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。在当前的嵌入式产品中有着广泛的应用。Exynos4412芯片包含三个SPI接口控制器。
SPI接口的主要特点如下:
- 全双工。
- 可以当做主设备或从设备工作。
- 提供可编程时钟。
- 发送结束中断标志。
- 写冲突保护。
- 总线竞争保护。
二、SPI总线协议内容
SPI总线引脚定义
SPI总线协议很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备。主设备是产生时钟信号,并发出片选信号的设备。从设备是接收时钟信号,并接收到片选信号的设备。 SPI总线主设备和从设备通信需要4条线连接(当单向传输时3条线也可以),每个SPI设备都有4个引脚供通信连接使用。SPI的四个引脚是:
- CLK(串行时钟引脚)
- MISO(主设备输入/从设备输出数据引脚)
- MOSI(主设备输出/从设备输入数据引脚)
- CS(从设备选择引脚,低电平有效)
SPI总线物理连接
SPI总线主设备和从设备的连接的四条线分别为:CS对应CS、CLK对应CLK、MOSI(主)对应MISO(从)、MISO(主)对应MOSI(从)。SPI总线可以同时并联多个外围设备,但一个时刻只能有一对主从设备通信。主设备通过CS片选引脚发出信号去选择从设备。
SPI总线时序
SPI数据通信起始由主设备发送CS片选信号并保持到通信的结束,同时主设备发出CLK时钟信号用于数据发送和接收的时序控制,SPI是串行通信协议,也就是说数据是一位一位地传输。数据在时钟上升沿或下降沿时发送,在紧接着的下降沿或上升沿被接收,完成一位数据传输。这样,在8次时钟信号的改变(上升沿和下降沿为一次)后,就可以完成8位数据的传输。发送设备在CLK的时钟信号的上升沿时发送一位数据,接收设备在CLK时钟信号的下降沿时接收一位数据。
需要注意的是,基于SPI总线的通信中,至少有一个主设备。SPI总线的信号CLK只能由主设备控制,从设备不能控制时钟信号。同样在一个基于SPI总线的通信中,至少有一个主控设备。与普通的串行通信不同,普通的串行通信一次连续传送至少8位数据。而SPI的传输方式有一个优点,即SPI也是一位一位地传送数据,但传输过程中允许暂停,因为CLK时钟线由主设备控制,当没有时钟跳变时,从设备不采集或传送数据。 也就是说,主设备通过对CLK时钟线的控制可以完成对通信的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上升沿或下降沿采集有不同定义。 在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立地使能信号,在硬件上要比I2C总线控制稍微复杂一些。