SPI协议通讯

本文详细介绍了SPI协议的基本内容,包括SPI接口组成部分、四种模式选择及其数据收发方式。讨论了SPI的优点和缺点,并展示了在FPGA中实现SPI通信的代码模块,包括主机模块、顶层模块和测试模块,以及读写数据的ROM代码文件设置和仿真波形分析。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、SPI基本内容

SPI接口有四部分组成,分别是SCLK(时钟)、MOSI(master向slave发送数据)、'MISO(从机向主机发送数据)、SS(片选段,主机选择从机进行通信)。
在这里插入图片描述
在这里插入图片描述

二、SPI模式选择

SPI 一共有四种模式

SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:
CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;
CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;

CPHA=0,表示第一个边沿:
对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;
CPHA=1,表示第二个边沿:
对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

在这里插入图片描述

不同模式 收写数据方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、SPI数据写入或者读取

主片在访问某一从片时,必须使该从片的片选信号有效;主片在SCK信号的同步下,通过MOSI线发出指令、地址信息;如需将数据输出,则接着写指令,由SCK同步在MOSI线上发出数据;如需读回数据,则接着读指令,由主片发出SCK,从片根据SCK的节拍通过MISO发回数据。

四、SPI优缺点

SPI通讯的优势
使SPI作为串行通信接口脱颖而出的原因很多;

全双工串行通信;
高速数据传输速率。
简单的软件配置;
极其灵活的数据传输,不限于8位,它可以是任意大小的字;
非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
SPI的缺点
没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
通常仅支持一个主设备;
需要更多的引脚(与I2C不同);
没有定义硬件级别的错误检查协议;
与RS-232和CAN总线相比,只能支持非常短的距离;

五、SPI编程实现及波形

SPI主机模块 代码

module spi_module #(
    parameter   CYCLE = 1000,
                DW = 35
) (
    input   logic               ACLK,
    input   logic               ARESETn,
    input   logic               TVALID,
    input   logic               RVALID,
    input   logic   [DW-1:0]    TDATA,
    output  logic   [DW-20:0]    RDATA,
    output  logic               TREADY,
    
    input   logic               MISO,
    output  logic               scl_out,
    output  logic               MOSI,
    output  logic               SCS_N
);
    localparam  BW = DW+13;
    
    logic   [BW-1:0]            data;
    logic   [$clog2(CYCLE)-1:0] cycle_cnt;
    logic   [$clog2(BW)-1:0]    bit_cnt;
    enum logic [4:0] {
        IDLE    = 5'b00001,
        START   = 5'b00010,
        WRITE   = 5'b00100,
        READ    = 5'b01000,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值