基于SPI协议的主从机单字节数据交互(从机)

一、实验目的

  1. 实验任务

基于SPI协议,实现主机和从机之间交互一字节数据,将接收和发送的数据通过数码管显示出来。

本次实验两人一组,一人负责主机部分,一人负责从机部分,SPI主从机数据交互实验中,每次传输数据量为8bit,传输时钟SCLK为100khz,SPI总线工作模式为:时钟极性CPOL为1,时钟相位CPHA为1,采用MSB高位先发。主机发送数据为8’h11,从机发送数据为8’h22。六位数码管,前两位显示发送数据,后两位显示接收数据。

二、实验原理

  1. 理论原理

SPI (Serial Peripheral interface,串行外围设备接口)总线是由Motorola公司推出的一种全双工、同步串行总线接口,只需要四根信号线即可实现多个芯片之间的主从连接结构,节约引脚,同时有利于PCB的布局。它可以支持一个主机与多个从机之间的连接,如Flash存储器、EEPROM存储器、ADC、DAC、RTC等,实现主控器与芯片之间的串行数据传输。

SPI通信一般有4种不同的工作模式,不同的从设备在出厂时被厂家配置为其中几种通信模式,通信模式是不允许用户修改的。主设备和从设备必须在同一模式下进行通信,否则数据传输会出现错误。SPI的通信模式是由CPOL(时钟极性)和 CPHA(时钟相位)来决定的;CPOL表示空闲状态下sclk的状态;CPHA表示设备在哪个时钟边沿采样数据。即:

CPOL: 0--空闲时,sclk为低电平;1--空闲时,sclk为高电平;

CPHA: 0--奇数个跳变沿采样数据;1--偶数个跳变沿采样数据。

图1 SPI总线四种工作模式示意图

  1. 硬件原理

数码管作为一种常见的数字显示装置,已经在各种电子设备和仪器中广泛应用。其简单而直观的数字展示方式使其成为信息传递和数据显示的理想选择。在现代科技飞速发展的时代,数码管技术也在不断创新与进步,为各行各业带来了更多的可能性和便利性。

共阳数码管:指将所有发光二极管的阳极接到一起形成公共阳极 (COM)的数码管

共阴数码管:指将所有发光二极管的阳极接到一起形成公共阴极 (COM)的数码管

三、系统架构设计

  1. 系统框图

主机部分包括按键消抖模块、主机控制模块和数码管显示模块;从机部分包括从机控制模块和数码管显示模块。

模块名称

功能描述

key_fliter

按键消抖模块

spi_master

主机控制模块

seg_drive

数码管动态显示模块

表1  主机部分模块简介

模块名称

功能描述

key_fliter

按键消抖模块

spi_slave

从机控制模块

表2 从机部分模块简介

图3 整体模块系统框图

  1. 端口信号列表

(1)顶层模块:top

     input               rst_n   ,

    input               cs_n    ,   //使能信号

    input               sclk    ,   //传输时钟

    input               mosi    ,   //主机发送从机接收

    output              miso    ,   //主机接收从机发送

    output   [5:0]      seg_sel ,   //数码管位选信号

    output   [7:0]      seg_dig     //数码管段选信号

(2)从机控制模块:spi_slave

     input               rst_n   ,

    input      [7:0]    data_tx , //顶层赋值8’h22

    input               sclk    ,

    input               cs_n    ,

    input               mosi    , //主机发送从机接收

    output  reg         miso    , //主机接收从机发送

    output      [23:0]  data_seg  //数码管显示数据

(3)数码管显示模块:seg_drive

     input               clk     ,

    input               rst_n   ,

    input       [23:0]  din     ,//输入显示的数据

    input       [5:0]   point_n ,//小数点控制信号 6‘b011_110

    input       [5:0]   din_mask,//数据掩码6’b11_00_11

    output  reg [5:0]   seg_sel ,//位选

    output  reg [7:0]   seg_dig  //段选

2.从机时序图

图4 从机时序图

3.核心代码

采用1-1模式,在SCLK下降沿时将数据发送出去。在sclk上升沿时采集数据。

    //发送数据
    always @(negedge sclk or negedge rst_n)begin 
        if(!rst_n)begin
            miso <= 1'b0;
        end 
        else if(!cs_n)begin 
            miso <= data_tx[7-cnt_bit];             //sclk下降沿时将数据按MSB发送出去
        end 
    end
    //接收数据
    always @(posedge sclk or negedge rst_n)begin    //sclk上升沿采集数据
        if(!rst_n)begin
            data_rx <= 8'h00;
        end 
        else begin 
            data_rx[8-cnt_bit] <= mosi;
        end 
    end

需要注意的是,由于使用1-1模式,bit计数器cnt_bit的加一条件为cs_n为低电平,且sclk的下降沿到来。所以会造成在时钟刚产生的第一个下降沿计数器的值为1,但此次数据还未更新的现象,所以计数器计数最大值为8,在数据采样时的描述为:data_rx[8-cnt_bit] <= mosi;

四、仿真波形图

  1. Quartus生成RTL视图

图5 Quartus生成RTL视图

  1. 仿真波形图

图6 主从机联合仿真波形图

从图中可以看出,主机根据SPI协议的要求正常发送8’h11,从机正确收到数据,从机根据SPI协议正常发送8’h22,主机正确接收到数据。

图7 从机采样仿真波形图

从机在传输时钟的上升沿对主机传入的数据进行采样,由图可知,从机正常采样和发送数据。

五、实验结果

图8 上板验证成功

成功完成实验要求,实现主机和从机之间交互一字节数据,将接收和发送的数据通过数码管显示出来。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值