基于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