SPI协议 您所在的位置:网站首页 基于fpga的spi串行接口设计 SPI协议

SPI协议

2023-08-23 20:48| 来源: 网络整理| 查看: 265

SPI协议_Verilog实现

概述: 通过Verilog代码+仿真的形式来理解SPI的时序,此处只写了主机发送,从机接收的代码,后待续。。。

文章目录 SPI协议_Verilog实现●SPI接口介绍●SPI接口连接图●SPI数据传输方向●SPI传输模式 SPI_verilog实现✯主机发送代码✯发送波形✯从机接收代码✯从机接收波形

## **SPI协议简介** ●SPI接口介绍

SCK:时钟信号,由主设备产生,所以主设备SCK信号为输出模式,从设备的SCK信号为输入模式。   CS:使能信号,由主设备控制从设备,,所以主设备CS信号为输出模式,从设备的CS信号为输入模式。   MOSI:主设备数据输出,从设备数据输入,所以主设备MOSI信号为输出模式,从设备的MOSI信号为输入模式。   MISO:主设备数据输入,从设备数据输出,所以主设备MISO信号为输入模式,从设备的MISO信号为输出模式。

●SPI接口连接图

在这里插入图片描述   注意:MOSI和MISO不能交叉连接(可以把主从机理解为一个整体系统,MOSI为系统主机发送从机接收的数据线,MISO为主机接收从机发送的数据线)。

●SPI数据传输方向

SPI作为全双工的的串行通信协议,数据传输时高位在前,低位在后。主机和从机公用由主机产生的SCK信号,所以在每个时钟周期内主机和从机有1bit的数据交换(因为MOSI和MISO数据线上的数据都是在时钟的边沿处被采样)。   如下图:  在这里插入图片描述  SPI协议规定数据采样是在SCK的上升沿或下降沿时刻(由SPI模式决定,下面会说到),观察上图,在SCK的边沿处,主机会在MISO处采样(接收来从机的数据),从机会在MOSI处采样(接收来自主机的数据),所以每个时钟周期中会有一bit的数据交换。  SPI数据交换

●SPI传输模式

SPI总线传输一共有4种模式,这4种模式分别由时钟极性(CPOL)和时钟相位(CPHA)来定义。    在这里插入图片描述

CPOLCPHA规定了SCK时钟信号空闲状态的电平规定了数据是在SCK时钟的上升沿还是下降沿被采样-----------------------------------------------模式0:CPOL=0,CPHA =0SCK空闲为低电平,数据在SCK的上升沿被采样(提取数据)模式1:CPOL=0,CPHA =1SCK空闲为低电平,数据在SCK的下降沿被采样(提取数据)模式2:CPOL=1,CPHA =0SCK空闲为高电平,数据在SCK的下降沿被采样(提取数据)模式3:CPOL=1,CPHA =1SCK空闲为高电平,数据在SCK的上升沿被采样(提取数据)

以模式0为例: SCK空闲为低电平,数据在SCK的上升沿被采样(提取数据)。 在这里插入图片描述   ◐在时钟的第1个上升沿(游标1处)(采样点)   MOSI上数据为1,则在此边沿从机采样(提取)数据为1,采样点在MOSI数据线的中间(游标1处)。   MISO上数据为0,则在此边沿主机采样(提取)数据为0,采样点在MISO数据线的中间(游标1处)。   ◐在时钟的第1个下降沿(游标2处)(切换点)   MOSI上数据由1切换为0,数据在时钟下降沿时切换数据。   MISO上数据由0切换为1,数据在时钟下降沿时切换数据。   ◐在时钟的第2~8个上升沿(采样点),主机在MISO上采样数据,从机在MOSI上采样数据。   ◐在时钟的第2~8个下降沿(切换点),主机在MISO上切换数据,从机在MOSI上切换数据。

SPI_verilog实现 ✯主机发送代码 //采用SPI模式0:上升沿采样数据,下降沿切换数据 module SPI_MasterToSlave(CLK_50M,RST_N,SCK,CS,MOSI); input CLK_50M; input RST_N; output reg SCK; output reg CS; output reg MOSI; reg[7:0] Send_Data = 8'hA5;//所要发送的数据 /*构造状态机*/ reg[3:0] Data_State = 4'd0; parameter D7_State = 4'd0;//发送最高位数据-状态 parameter D6_State = 4'd2; parameter D5_State = 4'd4; parameter D4_State = 4'd6; parameter D3_State = 4'd8; parameter D2_State = 4'd10; parameter D1_State = 4'd12; parameter D0_State = 4'd14;//发送最低位数据-状态 always@(posedge CLK_50M or negedge RST_N) begin if(RST_N == 0)//复位 begin SCK


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有