其他分享
首页 > 其他分享> > 基于FPGA实现SPI接口协议(一)

基于FPGA实现SPI接口协议(一)

作者:互联网

UART,IIC以及SPI作为三个基本的低速接口协议,是我们经常使用的,本系列将简单介绍SPI的接口协议,然后用几个简单的demo案例(对flash的操作)对SPI接口进行熟悉。
本文介绍SPI通信协议的基本内容以及FLASH芯片的相关基本的知识。

基于FPGA实现SPI接口协议(一)

一,SPI通信协议的基本介绍

SPI(Serial Peripheral Interface,串行外围设备接口)通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、Flash、RTC(实时时钟)、ADC(数模转换器)、DSP(数字信号处理器)以及数字信号解码器上,是常用的也是较为重要的通讯协议之一。
SPI 通讯设备的通讯模式是主从通讯模式,通讯双方有主从之分,根据从机设备的个数,SPI通讯设备之间的连接方式可分为一主一从和一主多从。
在这里插入图片描述
在这里插入图片描述
SPI 通讯协议包含
1 条时钟信号线、2 条数据总线和 1 条片选信号线, 时钟信号线为SCK,2 条数据总线分别为 MOSI(主输出从输入)、MISO(主输入从输出),片选信号线为CS,它们的作用介绍如下:
(1) SCK (Serial Clock):时钟信号线,用于同步通讯数据。由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不同,两个设备之间通讯时,通讯速率受限于低速设备。
(2) MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,数据方向由主机到从机。
(3) MISO (Master Input,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,数据方向由从机到主机。
(4) CS(Chip Select):片选信号线,也称为 CS_N,以下用 CS_N 表示。当有多个 SPI从设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI 及 MISO 同时并联到相同的 SPI总线上,即无论有多少个从设备,都共同使用这 3 条总线;而每个从设备都有独立的这一条 CS_N 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。
I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而 SPI协议中没有设备地址,它使用 CS_N 信号线来寻址,当主机要选择从设备时,把该从设备的 CS_N 信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行 SPI 通讯。所以 SPI 通讯以 CS_N 线置低电平为开始信号,以 CS_N 线被拉高作为结束信号。

二,SPI 通讯协议工作模式

SPI 通讯协议一共有四种通讯模式,模式 0、模式 1、模式 2 以及模式 3,这 4 种模式分别由时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)来定义,其中CPOL参数规定了空闲状态(CS_N 为高电平,设备未被选中)时 SCK时钟信号的电平状态,CPHA规定了数据采样是在 SCK时钟的奇数边沿还是偶数边沿。

模式 0:CPOL= 0,CPHA=0。空闲状态时 SCK 串行时钟为低电平;数据采样在 SCK时钟的奇数边沿,本模式中,奇数边沿为上升沿;数据更新在 SCK 时钟的偶数边沿,本模式中,偶数边沿为下降沿。
模式 1:CPOL= 0,CPHA=1。空闲状态时 SCK 串行时钟为低电平;数据采样在 SCK时钟的偶数边沿,本模式中,偶数边沿为下降沿;数据更新在 SCK 时钟的奇数边沿,本模式中,偶数边沿为上升沿。
模式 2:CPOL= 1,CPHA=0。空闲状态时 SCK 串行时钟为高电平;数据采样在 SCK时钟的奇数边沿,本模式中,奇数边沿为下降沿;数据更新在 SCK 时钟的偶数边沿,本模式中,偶数边沿为上升沿。
模式 3:CPOL= 1,CPHA=1。空闲状态时 SCK 串行时钟为高电平;数据采样在 SCK时钟的偶数边沿,本模式中,偶数边沿为上升沿;数据更新在 SCK 时钟的奇数边沿,本模式中,偶数边沿为下降沿。
在这里插入图片描述
在这里插入图片描述
CPOL为时钟极性,也就是在信号片选未选中时,时钟信号的高低,CPOL = 0 时,片选未选中 SCK = 0。反之。而CPHA为时钟相位。CPHA = 0 是,数据采样为计数沿,否则为偶数沿采样。
这里的介绍就到这里,具体的细节将在使用时了解学习。

三,FLASH芯片的简单介绍

这里笔者使用的是黑金AX309开发板自带的FLASH,型号为M25P16。支持SPI 接口方式。接口的时钟速率最大可以达到50Mhz。FLASH 的容量由 32 个 Sectors 组成,每个 Sector 包含 256 个 Pages, 每个 Page 由 256-byte 组成。M25P16 支持两种擦除方法,一种为 Sector 擦除(512Kbit),一种为 Block 擦除(16Mbit)。

1,芯片容量与分布

在这里插入图片描述
在这里插入图片描述

分为32个扇区,每一个扇区包含256页,每一页有256bytes。
可以简单计算下芯片的存储量,约为16Mbit。
在这里插入图片描述

2,芯片接口

在这里插入图片描述
在这里插入图片描述

3,支持模式

在这里插入图片描述
支持模式一与模式三

4,相关时序

1)最大时钟速率

在这里插入图片描述

2)基本操作时序

这里特别需要关注的是这几个时间
在这里插入图片描述

片选信号自下降沿始到第一个有效数据写入时止,这一段等待时间定义为片选信号有效建立时间 tSLCH
片(实际上就是在片选拉低之后,时钟有效沿必须要延时的时间,也就是数据写入或者读出所需要的延时)
选信号自最后一个有效数据写入时始到片选信号上升沿止,这一段等待时间定义为片选信号有效保持时间 tCHSH (实际上就是片选拉高,确保最后一个数据写入必须保证的延时)
片选信号自上一个上升沿始到下一个下降沿止,这一段等待时间定义为片选信号高电平等待时间 tSHSL(实际上就是对于一个芯片,每次片选拉低的时间间隔)
这样就可以进行后续相关的demo练习啦!!

标签:信号线,FPGA,SCK,接口协议,模式,SPI,边沿,时钟
来源: https://blog.csdn.net/qq_41467882/article/details/113705030