0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

配置芯片寄存器的SPI通信协议的verilog实现

冬至配饺子 来源:Bug记录 作者:woodfan 2023-06-16 09:50 次阅读

最近正在调试一个芯片的评估板,其中配置寄存器使用的是SPI通信协议。其实很多芯片寄存器的配置都用到了SPI通信协议,我们今天就需要实现这个SPI通信协议。

首先,我们需要了解SPI协议的基本内容,SPI主要有四根传输线,分别为SPI_CLK, SPI_EN, SPI_DI, SPI_DO。

主设备会将数据时钟通过SPI_CLK传送给从设备,从设备根据SPI_CLK进行接收发送工作;SPI需要注意的是极性CPOL和相位CPHA;CPOL指的是时钟极性,CPHA指的是时钟相位。一个时钟周期内,会有两个跳变沿,它既有可能是上升沿也有可能是下降沿;CPOL的值决定了SPI数据时钟在空闲状态下保持为高电平(CPOL=1)还是低电平(CPOL=0),CPHA的值决定了SPI的采样边沿是第一个边沿(CPHA=0)还是第二个边沿(CPHA=1)。

举个例子,从某芯片手册上看,该芯片手册SPI的时序图如下:

图片

芯片SPI写时序

可以看到,SPI_CLK在开始和结束时都保持了低电平状态,所以CPOL=0,而每次SPI_DI在SPI_CLK的上升沿改变电平值,在SPI_CLK的下降沿保持电平不变,所以可以推断,SPI的采样边沿是第二个边沿,CPHA=1;

从图中我们还可以知道,SPI需要工作的时候,SPI_ENB需要拉低,这就是SPI的片选信号,由于SPI没有寻址机制,所以需要使用片选信号选择总线上不同的设备。

所以说,SPI_EN的工作最为轻松,在需要发送数据的时候将SPI_EN反相,在发送结束后再反相回来;SPI_CLK就是在不断地发送周期性方波;SPI_DI则是在恰当的时机根据要发送的数据进行高低电平转换,然后保持不变。

图片

芯片SPI读时序

这里简单说一下这个芯片SPI的协议内容,发送的第一位(MSB)决定了SPI读写操作,为1是写入,为0是读取;接下来发送5位0,接着发送10位的寄存器地址;如果SPI是写操作,继续写入8位数据,否则开始接收SPI_DO上的数据。

图片

指令解释

这里我列出了状态机跳转的状态:

图片

首先状态机不管在任何状态都会回到IDLE空闲状态,在IDLE空闲状态下,接收到发送数据的命令就会跳转到WRITE_ADDR写地址状态,在写完前16位数据后,根据第一位的值决定是跳转到WRITE_DATA状态接着向芯片寄存器写入数据还是转向READ状态读取寄存器的值;操作结束后最终状态机回到IDLE空闲状态。

其实只需要理解芯片手册上SPI的时序图,并用verilog将其描述出来,就已经成功了一大半。这里我们实操前的准备工作都做完了,接下来就是开始码verilog代码并进行仿真,上板测试等等。待我整理出来之后,再与大家一同讨论吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5334

    浏览量

    120208
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27518
  • SPI通信
    +关注

    关注

    0

    文章

    35

    浏览量

    11357
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8224
  • MSB
    MSB
    +关注

    关注

    0

    文章

    13

    浏览量

    8256
收藏 人收藏

    评论

    相关推荐

    Verilog设计寄存器

    现代逻辑设计中,时序逻辑设计是核心,而寄存器又是时序逻辑的基础,下面将介绍几种常见的寄存器Verilog设计代码供初学者进行学习理解。
    的头像 发表于 07-27 09:03 3497次阅读
    <b class='flag-5'>Verilog</b>设计<b class='flag-5'>寄存器</b>

    fpga与spi通信协议

    fpga通过spi通信协议在与外围设备实现通信的过程中程序代码该怎么写?新手勿喷
    发表于 04-09 12:44

    SPI通信协议

    EEPROM,FLASH,实时时钟,AD转换,还有数字信号处理和数字信号解码之间。SPI,是一种高速的,全双工,同步的通信总线,并且
    发表于 10-12 11:30

    SPI通信协议

    LOTO虚拟示波器采集到的数据波形并进行对比分析,方便大家的理解。SPI通信协议一般只需要四根线将主控芯片与从芯片连接起来,其中四根线分别为:(1)SDO– 主设备数据输出,从设备数据
    发表于 08-09 07:49

    对串口中断的通信协议理解与应用

    双向通信。本文主要讲解对正点原子的串口通信实验中串口中断的通信协议的理解与应用,关于串口的初始化配置等这里略过不讲。在正式开始之前,先把涉及到的寄存
    发表于 02-14 07:18

    STM32如何模拟SPI通信协议

    STM32模拟SPI通信协议SPI的简介:SPI是串行外设接口的缩写,是一种高速的,全双工、同步的串行通信总线;
    发表于 02-17 08:03

    SPI通信协议及实例打包

    本文是SPI通信协议及实例打包分享。
    发表于 11-16 13:24 47次下载

    SPI通信协议

    SPI接口简介SPI内部结构SPI工作原理SPI特征SPI的四种工作方式SPI时序图
    发表于 12-22 19:17 5次下载
    <b class='flag-5'>SPI</b><b class='flag-5'>通信协议</b>

    SPI通信协议讲解

    SPI通信协议讲解SPI通信概念SPI通信SPI
    发表于 12-22 19:19 26次下载
    <b class='flag-5'>SPI</b><b class='flag-5'>通信协议</b>讲解

    通信协议SPI

    STM32模拟SPI通信协议SPI的简介:SPI是串行外设接口的缩写,是一种高速的,全双工、同步的串行通信总线;
    发表于 12-22 19:20 22次下载
    <b class='flag-5'>通信协议</b>:<b class='flag-5'>SPI</b>

    通信协议SPI

    方便,所以越来越多的芯片集成了这种通信协议;二、寻址方式当主设备要和某个从设备进行通信时,主设备需要先向
    发表于 12-22 19:33 6次下载
    <b class='flag-5'>通信协议</b>(<b class='flag-5'>SPI</b>)

    通信协议IIC与SPI最全对比

    非常适合近距离低速芯片通信。Philips(for IIC)和Motorola(for SPI)出于不同背景和市场需求制定了这两种标准通信协议
    的头像 发表于 01-30 14:56 2495次阅读

    通信协议IIC与SPI之间有何区别?

    非常适合近距离低速芯片通信。Philips(for IIC)和Motorola(for SPI)出于不同背景和市场需求制定了这两种标准通信协议
    的头像 发表于 02-13 10:27 1383次阅读
    <b class='flag-5'>通信协议</b>IIC与<b class='flag-5'>SPI</b>之间有何区别?

    plc通信协议 plc通信原理

    Modbus协议是一种应用层协议,建立在串口通信协议之上,常用于工业控制系统中。Modbus协议定义了一系列数据传输规则和通信指令,包括读写
    的头像 发表于 06-26 17:52 3688次阅读

    scon寄存器在串口通信中的实际应用

    SCON寄存器的具体操作取决于使用的串行通信协议和相关硬件的配置。通过设置或读取SCON寄存器的不同位字段,可以控制串行通信的设置,如波特率
    的头像 发表于 02-02 15:10 2279次阅读
    scon<b class='flag-5'>寄存器</b>在串口<b class='flag-5'>通信</b>中的实际应用