一、技术性能
SPI 接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave 模式应用,一般仅支持单Master。时钟由 Master 控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSBfirst);SPI 接口有2 根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。
二、接口定义
SPI 接口共有4 根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301152634930-576568579.png)
(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK :时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301153335022-288486774.png)
四、传输时序
SPI 接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8 位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK
的下降沿上数据改变,上升沿一位数据被存入移位寄存器。
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301153531143-542014424.png)
SPI 接口没有指定的流控制,没有应答机制确认是否接收到数据。
SPI 接口时钟配置:在主设备这边配置 SPI 接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,由于主设备的SDO 连接从设备的SDI,从设备的SDO 连接主设备的SDI,从设备SDI 接收的数据是主设备的SDO 发送过来的(MOSI),主设备SDI 接收的数据是从设备SDO 发送过来的(MISO),所以主设备这边SPI 时钟极性的配置(即SDO 的配置)跟从设备的SDI 接收数据的极性是相反的,跟从设备SDO 发送数据的极性是相同的。
下面这段话是SychipWlan8100 Module Spec 上说的,充分说明了时钟极性是如何配置的:
The 81xx module will always input data bits at the rising edge of the clock, and the
host will always output data bits on the falling edge of the clock.
意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设
备这边SPI 时钟极性应该配置为下降沿有效。
又如,下面这段话是摘自 LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of
data bit 7, data bit 6 …… data bit 0.
意思是:从设备SSD1289 在时钟的上升沿接收数据,而且是按照从高位到低位
的顺序接收数据的。因此主设备的SPI 时钟极性同样应该配置为下降沿有效。
通过 SPI_CR1 寄存器中的 CPOL 和 CPHA 位,可以用软件选择四种可能的时序关系。CPOL(时钟极性)位控制不传任何数据时的时钟电平状态。此位对主器件和从 器件都有作 用。如果复位 CPOL,SCK 引脚在空闲状态处于低电平。如果将 CPOL 置 1,SCK 引脚在 空闲状态处于高电平。
如果将 CPHA(时钟相位)位置 1,则 SCK 引脚上的第二个边沿(如果复位 CPOL 位,则 为下降沿;如果将 CPOL 位置 1,则为上升沿)对 MSBit 采样。即,在第二个时钟边沿锁存 数据。如果复位 CPHA 位,则 SCK 引脚上的第一个边沿(如果将 CPOL 位置 1,则为下降 沿;如果复位 CPOL 位,则为上升沿)对 MSBit 采样。即,在第一个时钟边沿锁存数据。
CPOL(时钟极性)和 CPHA(时钟相位)位的组合用于选择数据捕获时钟边沿。
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301165451092-1296615887.png)
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
一、技术性能
SPI 接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave 模式应用,一般仅支持单Master。时钟由 Master 控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSBfirst);SPI 接口有2 根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。
二、接口定义
SPI 接口共有4 根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301152634930-576568579.png)
(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK :时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301153335022-288486774.png)
四、传输时序
SPI 接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8 位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK
的下降沿上数据改变,上升沿一位数据被存入移位寄存器。
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301153531143-542014424.png)
SPI 接口没有指定的流控制,没有应答机制确认是否接收到数据。
SPI 接口时钟配置:在主设备这边配置 SPI 接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,由于主设备的SDO 连接从设备的SDI,从设备的SDO 连接主设备的SDI,从设备SDI 接收的数据是主设备的SDO 发送过来的(MOSI),主设备SDI 接收的数据是从设备SDO 发送过来的(MISO),所以主设备这边SPI 时钟极性的配置(即SDO 的配置)跟从设备的SDI 接收数据的极性是相反的,跟从设备SDO 发送数据的极性是相同的。
下面这段话是SychipWlan8100 Module Spec 上说的,充分说明了时钟极性是如何配置的:
The 81xx module will always input data bits at the rising edge of the clock, and the
host will always output data bits on the falling edge of the clock.
意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设
备这边SPI 时钟极性应该配置为下降沿有效。
又如,下面这段话是摘自 LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of
data bit 7, data bit 6 …… data bit 0.
意思是:从设备SSD1289 在时钟的上升沿接收数据,而且是按照从高位到低位
的顺序接收数据的。因此主设备的SPI 时钟极性同样应该配置为下降沿有效。
通过 SPI_CR1 寄存器中的 CPOL 和 CPHA 位,可以用软件选择四种可能的时序关系。CPOL(时钟极性)位控制不传任何数据时的时钟电平状态。此位对主器件和从 器件都有作 用。如果复位 CPOL,SCK 引脚在空闲状态处于低电平。如果将 CPOL 置 1,SCK 引脚在 空闲状态处于高电平。
如果将 CPHA(时钟相位)位置 1,则 SCK 引脚上的第二个边沿(如果复位 CPOL 位,则 为下降沿;如果将 CPOL 位置 1,则为上升沿)对 MSBit 采样。即,在第二个时钟边沿锁存 数据。如果复位 CPHA 位,则 SCK 引脚上的第一个边沿(如果将 CPOL 位置 1,则为下降 沿;如果复位 CPOL 位,则为上升沿)对 MSBit 采样。即,在第一个时钟边沿锁存数据。
CPOL(时钟极性)和 CPHA(时钟相位)位的组合用于选择数据捕获时钟边沿。
![](https://images2018.cnblogs.com/blog/1318049/201803/1318049-20180301165451092-1296615887.png)
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
举报