1 FPGA实现SPI接口--什么是SPI接口?

目录
1、什么是SPI协议
2、SPI协议详述
2.1、SPI协议物理层
2.2、SPI 协议层
2.3、SPI协议通信过程
2.4、SPI协议的特性
2.5、SPI协议的优势、劣势
3、驱动代码的设计实现
3.1、接口定义与整体设计
3.2、代码
4、及仿真结果
4.1、单个BYTE的仿真
4.2、多个BYTE的仿真
5、其他
1、什么是SPI协议
SPI(,串行外围设备接口)通讯协议,是公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 、Flash、RTC(实时时钟)、ADC(数模转换 器)、DSP(数字信号处理器)以及数字信号解码器上,是常用的、重要的低速通讯协议之一 。
SPI 通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制,在数据可靠性上有一定缺陷 。
2、SPI协议详述 2.1、SPI协议物理层
SPI 通讯设备的通讯模式是主从通讯模式,通讯双方有主从之分,根据从机设备的数量,SPI 通讯设备之间的连接方式可分为一主一从和一主多从 。
SPI总线传输只需要4根线就能完成,这四根线的作用分别如下:

1  FPGA实现SPI接口--什么是SPI接口?

文章插图
2.2、SPI 协议层
SPI总线传输一共有4种模式,这4种模式分别由时钟极性(CPOL,Clock )和时钟相位(CPHA,Clock Phase)来定义,其中CPOL参数规定了SCK时钟信号空闲状态的电平,CPHA规定了数据是在SCK时钟的上升沿被采样还是下降沿被采样 。
SPI总线的极性--时钟极性
时钟极性决定SPI总线空闲时的时钟信号是高电平还是低电平 。CPOL = 1:表示空闲时是高电平;CPOL = 0:表示空闲时是低电平 。
SPI总线的相位--时钟相位
时钟相位决定SPI总线从哪个跳变沿开始采样数据 。CPHA = 0:在时钟信号SCK的第1个跳变沿采样;CPHA = 1:在时钟信号SCK的第2个跳变沿采样 。
这四种模式的时序图如下图所示:
经常用到的是模式0和模式3(毕竟在下降沿采集数据的还是少) 。下图描述了4种模式数据线MOSI和MISO的数据切换()位置和数据采样位置的关系 。
2.3、SPI协议通信过程
下面以模式 0 为例,讲解一下 SPI 基本的通讯过程:
SCK、MOSI、CS_N 信号均由主机控制产生,SCK 是时钟信号,用以同步数据,MOSI 是主机输出从机输入信号,主机通过此信号线传输数据给从机,CS_N 为片选信号,用以选定从机设备,低电平有效;而 MISO 的信号由 从机产生,主机通过该信号线读取从机的数据 。MOSI 与 MISO 的信号只在 CS_N 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据 。
在图中的标号1处,CS_N 信号线由高变低,是 SPI 通讯的起始信号 。CS_N 是每 个从机各自独占的信号线,当从机在自己的 CS_N 线检测到起始信号后,就知道自己被主 机选中了,开始准备与主机通讯 。在图中的标号6处,CS_N 信号由低变高,是 SPI 通讯的停止信号,表示本次通讯结束,从机的选中状态被取消 。
SPI 使用 MOSI 及 MISO 信号线来传输数据,使用 SCK 信号线进行数据同步 。MOSI 及 MISO 数据线在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的 。数据传输时,MSB 先行或 LSB 先行并没有作硬性规定,但要保证两个 SPI 通讯设备之间使用同样的协定,一般都会采用MSB 先行模式 。MOSI 及 MISO 的数据在 SCK 的下降沿期间变化输出,在 SCK 的上升沿时被采样 。即在 SCK 的上升沿时刻,MOSI 及 MISO 的数据有效,高电平时表示数据“1”,为低电平时表示数据“0” 。在其它时刻,数据无效,MOSI 及 MISO 为下一次表示数据做准备 。