一、实验目的
- 实验任务
基于SPI协议,实现主机和从机之间交互一字节数据,将接收和发送的数据通过数码管显示出来。
本次实验两人一组,一人负责主机部分,一人负责从机部分,SPI主从机数据交互实验中,每次传输数据量为8bit,传输时钟SCLK为100khz,SPI总线工作模式为:时钟极性CPOL为1,时钟相位CPHA为1,采用MSB高位先发。主机发送数据为8’h11,从机发送数据为8’h22。六位数码管,前两位显示发送数据,后两位显示接收数据。
二、实验原理
- 理论原理
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总线四种工作模式示意图
- 硬件原理
数码管作为一种常见的数字显示装置,已经在各种电子设备和仪器中广泛应用。其简单而直观的数字展示方式使其成为信息传递和数据显示的理想选择。在现代科技飞速发展的时代,数码管技术也在不断创新与进步,为各行各业带来了更多的可能性和便利性。
共阳数码管:指将所有发光二极管的阳极接到一起形成公共阳极 (COM)的数码管
共阴数码管:指将所有发光二极管的阳极接到一起形成公共阴极 (COM)的数码管
三、系统架构设计
- 系统框图
主机部分包括按键消抖模块、主机控制模块和数码管显示模块;从机部分包括从机控制模块和数码管显示模块。
模块名称 | 功能描述 |
key_fliter | 按键消抖模块 |
spi_master | 主机控制模块 |
seg_drive | 数码管动态显示模块 |
表1 主机部分模块简介
模块名称 | 功能描述 |
key_fliter | 按键消抖模块 |
spi_slave | 从机控制模块 |
表2 从机部分模块简介
图3 整体模块系统框图
- 端口信号列表
(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;
四、仿真波形图
- Quartus生成RTL视图
图5 Quartus生成RTL视图
- 仿真波形图
图6 主从机联合仿真波形图
从图中可以看出,主机根据SPI协议的要求正常发送8’h11,从机正确收到数据,从机根据SPI协议正常发送8’h22,主机正确接收到数据。
图7 从机采样仿真波形图
从机在传输时钟的上升沿对主机传入的数据进行采样,由图可知,从机正常采样和发送数据。
五、实验结果
图8 上板验证成功
成功完成实验要求,实现主机和从机之间交互一字节数据,将接收和发送的数据通过数码管显示出来。