SPI的基本概念

串行外设接口SPI是原摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器和外围扩展芯片之间的串行连接,目前已发展为一种工业标准。

目前各半导体公司推出大量带有SPI接口的芯片,为用户的外围扩展提供灵活和廉价的选择。

SPI一般使用4条线:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和从机选择线SS。

主机与从机:一个SPI系统,由一个主机和一个或多个从机构成,主机启动一个与从机的同步通讯,从而完成数据的交换。提供SPI串行时钟线的SPI设备称为SPI主机或主设备,其他设备则称为SPI从机或从设备。

主出从入引脚MOSI与主入从出引脚MISO:

主出从入引脚MOSI即主机输出、从机输入数据线。

主入从出引脚MISO即主机输入、从机输出数据线。

SPI串行时钟引脚SCK:

控制主机与从机之间的数据传输。串行时钟信号由主机的内部总线时钟分频获得,主机的SCK引脚输出给从机的SCK引脚,控制整个数据的传输速度。

时钟极性与时钟相位:

时钟极性表示时钟信号在空闲时是高电平还是低电平。

时钟相位表示时钟信号SCK的第一个边沿出现在第一位数据传输周期的开始位置还是中央位置。

从机选择引脚SS:

一些芯片带有从机选择引脚SS,也称为片选引脚。若一个MCU的SPI工作于主机方式,则该MCU的引脚设为高电平。若一个MCU的SPI工作于从机方式,当SS=0时表示主机选中了该从机,反之则未选中该从机。

SPI的数据传输原理

一个SPI的基本连接图

MCUXpresso 外设功能组配置错误 外设模块_嵌入式

从主机CPU发出启动传输信号开始,将要传输的信号装入8位移位寄存器,并同时产生8位时钟信号依次从SCK引脚送出。在SCK信号的控制下,主机中8位移位寄存器中的数据一次从MOSI引脚送出,到从机的MOSI引脚后送入他的8位移位寄存器;在此过程中,从机的数据也可通过MISO引脚传送到主机中。 

SPI的时序

SPI的数据传输是在时钟信号SCK的控制下完成的,该过程涉及时钟极性和时钟相位,主机和从机必须使用一致的时钟极性和相位才能正常通信,

对时钟极性于时钟相位的设置总体要求:

确保发生数据在一周期开始的时刻上线,接收方在½周期的时刻从线上取数,这样是最稳定的通信方式。

对发送方编程必须明确要求:

接收方要求的时钟空闲电平是高电平还是低电平;接收方在时钟的上升沿取数还是下降沿取数。

时钟极性由CPOL控制,时钟相位由CPHA来控制。二者结合起来共有四种可能取值情况。

一、当CPOL=0,CPHA=0时

设置CPOL=0,表征空闲电平位低电平,然后设置CPHA=0,表征第一位数据提前半个时钟周期上线,这样设置保证了逐句与从机之间采用同样的时钟极性和时钟相位,才能正常通信。

MCUXpresso 外设功能组配置错误 外设模块_寄存器_02

二、当CPOL=0,CPHA=1时

MCUXpresso 外设功能组配置错误 外设模块_寄存器_03

三、当CPOL=1,CPHA=0时

MCUXpresso 外设功能组配置错误 外设模块_嵌入式_04

四、当CPOL=1,CPHA=1时

MCUXpresso 外设功能组配置错误 外设模块_嵌入式_05

SPI驱动构件及使用方法

初始化函数,发送一个字节函数,发送n个字节函数,接收一个字节函数,接收n个字节函数,关接收中断函数,开接收中断函数

SPI构件使用方法:

第一步:在SPI驱动构件头文件中宏定义引脚组

第二步:在主函数main中,初始化SPI模块,具体的参数包括SPI所用的口号,波特率,时钟极性,时钟相位;

第三步:开SPI1的接收中断

第四步:在主循环中,通过SPI发送一个字节函数,把一个字节数据通过主机发送出去,然后把数据加一

第五步:在中断函数服务例程中,通过SPI1:接收中断服务程序,接收主机发送过来的一个字节数据,然后就可以通过串口把接收到的数据发送到PC机。

即可实现主机从机通信,

实现简单的SPI数据传输主要涉及的寄存器:

控制寄存器(SPI0_C1):用于设置SPI中断使能,SPI使能,主/从模式的选择,时钟极性和时钟相位的配置

控制寄存器(SPII0_C2):用于硬件匹配中断功能使能和主模式故障功能使能的设置

波特率寄存器(SPI0_BR):用于为一个主机设定预定标器和位速率分频因子

状态寄存器(SPI0_S):用于判断SPI接收和发送缓冲区是否已满

数据寄存器(SPI0_D):主要完成数据的传输。读该寄存器返回接收寄存器中的数据,写该寄存器,把数据写入发送寄存器。