FPGA实现SPI接口(1)

您所在的位置:网站首页 超市元旦活动促销方案 FPGA实现SPI接口(1)

FPGA实现SPI接口(1)

2024-07-13 10:04:13| 来源: 网络整理| 查看: 265

目录

1、什么是SPI协议

2、SPI协议详述

2.1、SPI协议物理层

2.2、SPI 协议层

2.3、SPI协议通信过程

2.4、SPI协议的特性

2.5、SPI协议的优势、劣势

3、驱动代码的设计实现

3.1、接口定义与整体设计

3.2、Verilog代码

4、Testbench及仿真结果

4.1、单个BYTE的仿真

4.2、多个BYTE的仿真

5、其他

1、什么是SPI协议

        SPI(Serial Peripheral Interface,串行外围设备接口)通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、Flash、RTC(实时时钟)、ADC(数模转换 器)、DSP(数字信号处理器)以及数字信号解码器上,是常用的、重要的低速通讯协议之一。

        SPI 通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制,在数据可靠性上有一定缺陷。

2、SPI协议详述 2.1、SPI协议物理层

        SPI 通讯设备的通讯模式是主从通讯模式,通讯双方有主从之分,根据从机设备的数量,SPI 通讯设备之间的连接方式可分为一主一从和一主多从。

         

        SPI总线传输只需要4根线就能完成,这四根线的作用分别如下:

SCK (Serial Clock):时钟信号线,用于同步通讯数据。由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不同MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,数据方向由主机到从机MISO (Master Input,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,数据方向由从机到主机CS (Chip Select):片选信号线。当有多个 SPI 从 设备与 SPI 主机相连时,设备的其它信号线 SCK、MOSI 及 MISO 同时并联到相同的 SPI 总线上,即无论有多少个从设备,都共同使用这 3 条总线;而每个从设备都有独立的片选信号线,即有多少个从设备,就有多少条片选信号线。相当于由SPI构成的通信系统中,通过CS片选信号来决定通信的从机设备是哪一台。通信期间低电平有效,表示对应从机被选中 2.2、SPI 协议层

        SPI总线传输一共有4种模式,这4种模式分别由时钟极性(CPOL,Clock Polarity)和时钟相位(CPHA,Clock Phase)来定义,其中CPOL参数规定了SCK时钟信号空闲状态的电平,CPHA规定了数据是在SCK时钟的上升沿被采样还是下降沿被采样。

                SPI总线的极性--时钟极性

                        时钟极性决定SPI总线空闲时的时钟信号是高电平还是低电平。CPOL = 1:表示空闲时是高电平;CPOL = 0:表示空闲时是低电平。

                SPI总线的相位--时钟相位

                        时钟相位决定SPI总线从哪个跳变沿开始采样数据。CPHA = 0:在时钟信号SCK的第1个跳变沿采样;CPHA = 1:在时钟信号SCK的第2个跳变沿采样。

        这四种模式的时序图如下图所示:

模式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时钟的下降沿切换

        经常用到的是模式0和模式3(毕竟在下降沿采集数据的还是少)。下图描述了4种模式数据线MOSI和MISO的数据切换(Toggling)位置和数据采样位置的关系。

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 为下一次表示数据做准备。

        SPI 每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

2.4、SPI协议的特性 SPI协议是一主多从的架构,通过片选信号CS来区分不同的从机(寻址方式)SPI协议是一种同步(Synchronous)传输协议,通信双方通过主机生成的时钟信号SCK来作为数据交换的基准信号SPI协议是一种全双工的串行通信协议,通信过程中主从双方均可进行数据交换SPI协议具有4中通信模式,依据双方约定好的模式进行通信 2.5、SPI协议的优势、劣势

        优势:

全双工串行通信简单的硬件结构高速数据传输速率(相比UART、IIC)灵活的数据传输方式,不限于8位,可以是任意大小的字

        劣势:

仅支持一个主设备引脚略多(相比UART、IIC)没有硬件从机应答信号(主机可能在不知情的情况下无处发送) 3、驱动代码的设计实现

        接下来实现的SPI驱动代码特性如下:MSB 先行;仅限模式0;每次传输8位(1个BYTE)。

3.1、接口定义与整体设计

        SPI驱动的整体框图、输入输出信号如下所示:

    其中信号描述如下: 

     

        该模块的使用方法如下:

拉高SPI传输开始信号spi_start一个周期,同时发送要传输的数据给data_send,等待数据发送完成后,该模块会将发送完成标志信号 send_done拉高一个周期,标志一个BYTE的数据通过SPI总线发送给了从机同样的,当接收完成标志信号rec_done被该模块拉高后,则意味着,主机成功接收了一个BTYE从机发送过来的数据当主机希望结束这次传输时,可将SPI结束信号spi_end拉高一个周期,则该模块会在发送最后一个模块后结束SPI传输,这也意味着,如果没有结束到SPI结束信号,则SPI传输会一直进行,以便实现多个BYTE的SPI传输 3.2、Verilog代码

        Verilog代码并不复杂,结合下图的SPI通信过程,可以发现以下要点:

SCK很适合使用系统时钟的4分频时钟,因为在一个SCK内需要对其进行4次操作分别使用生成的SCK的上升沿、下降沿对其移位发送数据、接收数据即可此外从下图可知,SPI的驱动非常适合使用状态机编写,有兴趣可以自己尝试一下

`timescale 1ns/1ns //时间单位/精度 // 模式0 module spi_drive ( // 系统接口 input sys_clk , // 全局时钟50MHz input sys_rst_n , // 复位信号,低电平有效 // 用户接口 input spi_start , // 发送传输开始信号,一个高电平 input spi_end , // 发送传输结束信号,一个高电平 input [7:0] data_send , // 要发送的数据 output reg [7:0] data_rec , // 接收到的数据 output reg send_done , // 主机发送一个字节完毕标志位 output reg rec_done , // 主机接收一个字节完毕标志位 // SPI物理接口 input spi_miso , // SPI串行输入,用来接收从机的数据 output reg spi_sclk , // SPI时钟 output reg spi_cs , // SPI片选信号,低电平有效 output reg spi_mosi // SPI输出,用来给从机发送数据 ); reg [1:0] cnt; //4分频计数器 reg [3:0] bit_cnt_send; //发送计数器 reg [3:0] bit_cnt_rec; //接收计数器 reg spi_end_req; //结束请求 // 生成片选信号spi_cs always @(posedge sys_clk or negedge sys_rst_n)begin if(!sys_rst_n) spi_cs


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭