【FPGA】SPI协议

2023-11-01

1.SPI简介

SPI(Serial Perripheral Interface, 串行外围设备接口)是 Motorola 公司推出的一种同步串行接口技术。SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信。

SPI接口主要应用在EEPROM、FLASH、实时时钟,AD转换器以及数字信号处理器和数字信号解码器之间。SPI是一种高速的、全双工、同步的通信总线,在芯片上只占用四根线(CS、MOSI、MISO、SCK),极大的节约了芯片的引脚。

优点 缺点
支持全双工,push-pull的驱动性能相比open-drain信号完整性更好; 相比IIC多两根线
支持高速(100MHz以上) 没有寻址机制,只能靠片选选择不同设备
协议支持字长不限于8bits,可根据应用特点灵活选择消息字长 没有从设备接受ACK,主设备对于发送成功与否不得而知
硬件连接简单 典型应用只支持单主控
相比RS232 RS485和CAN总线,SPI传输距离短

2.SPI接口

 4线SPI器件有四个信号:

  • 时钟(SPI CLK, SCLK)
  • 片选(CS)
  • 主机输出、从机输入(MOSI)
  • 主机输入、从机输出(MISO)

产生时钟信号的器件称为主机。主机和从机之间传输的数据与主机产生的时钟同步。同I2C接口相比, SPI器件支持更高的时钟频率。

SPI接口只能有一个主机,但可以有一个或多个从机。

上图显示了主机和从机之间的SPI连接。来自主机的片选信号用于选择从机。这通常是一个低电平有效信号,拉高时从机与SPI总线断开连接。当使用多个从机时,主机需要为每个从机提供单独的片选信号。本文中的片选信号始终是低电平有效信号。

MOSI和MISO是数据线。 MOSI将数据从主机发送到从机, MISO将数据从从机发送到主机。


在常规模式下,主机需要为每个从机提供单独的片选信号。一旦主机使能(拉低)片选信号, MOSI/MISO线上的时钟和数据便可用于所选的从机。如果使能多个片选信号,则MISO线上的数据会被破坏,因为主机无法识别哪个从机正在传输数据。

从图可以看出,随着从机数量的增加,来自主机的片选线的数量也增加。这会快速增加主机需要提供的输入和输出数量,并限制可以使用的从机数量。可以使用其他技术来增加常规模式下的从机数量,例如使用多路复用器产生片选信号。

 在菊花链模式下,所有从机的片选信号连接在一起,数据从一个从机传播到下一个从机。在此配置中,所有从机同时接收同一SPI时钟。来自主机的数据直接送到第一个从机,该从机将数据提供给下一个从机,依此类推。
使用该方法时,由于数据是从一个从机传播到下一个从机,所以传输数据所需的时钟周期数与菊花链中的从机位置成比例。例如在图7所示的8位系统中,为使第3个从机能够获得数据,需要24个时钟脉冲,而常规SPI模式下只需8个时钟脉冲。下图显示了时钟周期和通过菊花链的数据传播。并非所有SPI器件都支持菊花链模式。

3.SPI通信

要开始SPI通信,主机必须发送时钟信号,并通过使能CS信号选择从机。片选通常是低电平有效信号。因此,主机必须在该信号上发送逻辑0以选择从机。 SPI是全双工接口,主机和从机可以分别通过MOSI和MISO线路同时发送数据。在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线(MISO/SDI)上的数据)同时进行。串行时钟沿同步数据的移位和采样。 SPI接口允许用户灵活选择时钟的上升沿或下降沿来采样和/或移位数据。
SPI 设备间的数据传输之所以又被称为数据交换,是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或者 “接收者(Receiver)”。 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了。

在这里插入图片描述

 SPI主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。

  1. 拉低对应CS信号线,表示与该设备进行通信
  2. 主机通过发送SCK时钟信号,来告诉从机写数据或者读数据。这里要注意,SCK时钟信号可能是低电平有效,也可能是高电平有效,因为SPI有四种模式,这个我们在下面会介绍
  3. 主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
  4. 从机(Slave)也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样两个移位寄存器中的内容就被交换。

SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

4.SPI时钟模式

时钟极性和时钟相位:在SPI中,主机可以通过寄存器配置选择SCK的时钟极性和时钟相位。

在空闲状态期间, CPOL位设置时钟信号的极性。空闲状态是指传输开始时CS为高电平且在向低电平转变的期间以及传输结束时CS为低电平且在向高电平转变的期间。 CPHA位选择时钟相位。根据CPHA位的状态,使用时钟上升沿或下降沿来采样和/或移位数据。主机必须根据从机的要求选择时钟极性和时钟相位。

根据CPOL和CPHA位的选择,有四种SPI模式可用。不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:

1. 时钟极性(CPOL)定义了时钟空闲状态电平:

CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时

2. 时钟相位(CPHA)定义数据的采集时间。

CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样,在第2个边沿发送数据
CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样,在第1个边沿发送数据
 

 下图显示了四种SPI模式下的通信示例。在这些示例中,数据显示在MOSI和MISO线上。传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示。请注意,这些图形仅供参考。要成功进行SPI通信,用户须参阅产品数据手册并确保满足器件的时序规格。

 SPI模式0,CPOL = 0,CPHA = 0: CLK空闲状态 = 低电平,数据在上升沿采样,在下降沿移出

SPI模式1,CPOL = 0,CPHA = 1:CLK空闲状态=低电平,数据在下降沿采样,在上升沿移出 

 SPI模式2,CPOL = 1,CPHA = 1:CLK空闲状态=高电平,数据在下降沿采样,并在上升沿移出

 SPI模式3,CPOL = 1,CPHA = 0:CLK空闲状态=高电平,数据在上升沿采样,并在下降沿移出

5.SPI工作模式

SPI工作在3中模式下,分别是运行、等待和停止。

运行模式(Run Mode):这是基本的操作模式

等待模式(Wait Mode):SPI工作在等待模式是一种可配置的低功耗模式,可以通过SPICR2寄存器的SPISWAI位进行控制。在等待模式下,如果SPISWAI位清0,SPI操作类似于运行模式。如果SPISWAI位置1,SPI进入低功耗状态,并且SPI时钟将关闭。如果SPI配置为主机,所有的传输将停止,但是会在CPU进入运行模式后重新开始。如果SPI配置为从机,会继续接收和传输一个字节,这样就保证从机与主机同步。

停止模式(Stop Mode):为了降低功耗,SPI在停止模式是不活跃的。如果SPI配置为主机,正在进行的传输会停止,但是在CPU进入运行模式后会重新开始。如果SPI配置为从机,会继续接受和发送一个字节,这样就保证了从机与主机同步。

6.SPI读写操作

  • 标准SPI读写为例

  •  片选---读指令---地址---数据读出 

  • 双路IO Dual I/O Fast Read Sequence Diagram  

  •  四路IO Quad I/O Fast Read Sequence Diagram 

7.SPI寄存器

Motorola定义的SPI寄存器包括:

SPI Control Register 1 (SPICR1)    控制寄存器1

SPI Control Register 2 (SPICR2)    控制寄存器2

SPI Baud Rate Register (SPIBR)    波特率寄存器

SPI Status Register (SPISR)            状态寄存器  (只读   其余均可读可写)

SPI Data Register (SPIDR)              数据寄存器

通过往寄存器中写入不同的值,设置SPI模块的不同属性。

1. 控制寄存器1 SPICR1

SPIE — SPI中断启用位
1 = SPI中断已启用
0 = SPI中断已禁用

SPE — SPI系统启用位
1 = 启用SPI,端口引脚专用于SPI功能
0 = 禁用SPI(降低功耗)

SPTIE — SPI传输中断启用
1 = SPTEF中断已启用
0 = SPTEF中断已禁用

MSTR — SPI主/从模式选择位
1 = SPI处于主模式
0 = SPI处于从属模式

CPOL — SPI时钟极性位
1 = 已选择低电平时钟。在空闲状态下,SCK高.
0 = 已选择活动的高时钟。在空闲状态下,SCK低A
.

CPHA — SPI时钟相位位
1 = 数据采样发生在SCK时钟的偶数边缘(2、4、6、…、16)
0 = 数据采样发生在SCK时钟的奇数边缘(1、3、5、…、15)

SSOE — 从属选择输出启用
SSOE 用于主设备设置SS管脚功能,它和MODFEN组合决定主设备SS管脚功能。如表1所示其功能组合:

LSBFE — LSB首次启用
1 = 数据首先传输最低有效位。
0 = 首先传输数据的最高有效位。

2. 控制寄存器2 SPICR2

MODFEN — 模式故障使能位
1 = 带MODF功能的SS端口引脚。
0 = SPI未使用SS端口引脚。

BIDIROE — 双向操作模式下的输出启用
控制双向模式(Bidirectional Mode)下主设备的MOSI和从设备MISO的输出缓冲器
1 = 输出缓冲区已启用
0 = 输出缓冲区已禁用

SPISWAI — SPI停止在等待模式位
1 = 在等待模式下停止SPI时钟生成
0 = SPI时钟在等待模式下正常工作

SPC0 — 串行引脚控制位0
控制(单个)数据管脚是否配置为双向模式,与BIDIROE组合控制(单个)数据管脚同时支持收发功能(如下表2)

3. 波特率寄存器 SPIBR

SPPR2–SPPR0 — 波特率预选位
SPR2–SPR0 — 波特率选择位

以上五个寄存器通过下面公式决定波特率除数因子(BaudRateDivisor),进而决定SCK时钟频率。

除数因子:(通过五个参数计算出来的除数因子不仅包括2^N,还包括4/6/10等总计64个组合)

计算波特率:

举例:SPPR[2:0]设为101,SPR[2:0]设为000,计算得除数因子(5+1) * (2^1) = 12。如果系统时钟速率为25MHz,则SCK时钟速率 = 25MHz/12 = 2.0833MHz.

4. 状态寄存器 SPISR

SPISR表征SPI传输状态,只可读,不可写。

SPIF — SPIF中断标志
数据byte写入SPI数据寄存器后,此位被置为1。读取数据寄存器后,此位清零。
1 = 新数据复制到SPIDR
0 = 传输尚未完成

SPTEF — SPI 传输空中断标志
1 = 表示发送数据寄存器为空,可以接收待发送数据
0 = 此时忽略任何写入数据寄存器的指令

MODF — 模式故障标志
如表1,错误检测功能使能后,MODF表示检测到SPI模式错误。
1 = 出现模式故障。
0 = 未发生模式故障

根据Motorola的定义,SPI仅提供一种错误——即模式错误(Mode Fault Error)——的检测机制,通过SS管脚状态判断SPI总线上是否存在两个及以上的设备同时驱动SCK和MOSI。模式错误检测仅适用于主设备(前提是在寄存器中激活此功能)。对于从设备,SS总是作为片选信号的。在发生模式错误后(MODF = 1),系统通过写入控制寄存器SPICR1(使设备由Master改为Slave模式,SCK、MISO和MOSI表现为高阻态以避免与总线上其它驱动设备冲突),随后系统自动将此bit置为零(MODF = 0)。

5. 数据寄存器 SPIDR

SPIDR作为SPI收发两用的寄存器,数据在写入SPIDR后进入待传输队列,队列中的数据字节在前面数据传输结束后立即进行传输。状态寄存器SPISR的SPTEF位表示数据寄存器可以接收新数据。数据寄存器接收数据完毕后将SPIF置为1。
如果SPIF已经置为1,但服务并未运行(not serviced),则下一个(第二个)接收的数据字节将暂存在移位寄存器中直到下次传输。数据寄存器中的数据字节不变。

如果SPIF已经置为1,并且移位寄存器中已经暂存数据(即第二个数据字节),并且SPIF服务在第三个数据字节传输前完成,则移位寄存器中的数据(即第二个数据字节 )正常写入数据寄存器,SPIF仍保持置位状态(高),如图所示;

如果SPIF已经置为1,并且移位寄存器中已经暂存数据(即第二个数据字节),并且SPIF服务在第三个数据字节传输后完成,则移位寄存器中的数据(即第二个数据字节 )遭破坏,不能正常写入到数据寄存器,SPIF仍保持置位状态(高),如图所示 。

【引用】

  1. SPI原理超详细讲解---值得一看
  2. SPI接口详细介绍_千里沽山的博客
  3. FPGA常用通信协议---SPI_工作使我快乐的博客​​​​​​
  4. FPGA(三)——基于FPGA的SPI通讯协议实现_Cilinx的博客​​​​​​
  5. 三大通信协议(3)SPI——寄存器配置_刻蓇铭鑫的博客 ​​​​​​
  6. 串行通讯SPI总线 - 知乎 (zhihu.com)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【FPGA】SPI协议 的相关文章

  • 数字IC手撕代码-兆易创新笔试真题

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • 数字芯片流程

    芯片设计分为前端设计和后端设计 前端设计 逻辑设计 和后端设计 物理设计 并没有同意严格的界限 这个过程中涉及到了与工艺有关的设计就是后端设计 一 需求分析 产品需要解决的问题 预测3 5年的趋向和走势 确保前瞻性 确保芯片是有卖点的 客户
  • 基于单光子探测的多脉冲周期符合远距离测距

    激光测距技术通过发射主动激光信号对目标进行探测 接收由目标漫反射回来的回波信号并进行统计 处理及换算 从而得到目标的距离 速度信息 实现对目标距离信息的探测 凭借其系统简单 操作灵活 高精度等特点 被广泛运用于民用 科研及军事等各类场合 基
  • MIPI D-PHY介绍(二) FPGA

    MIPI D PHY介绍 二 FPGA 随着移动设备的广泛普及 MIPI D PHY作为其最主要的物理层标准之一 被越来越多地使用在各种嵌入式系统中 本文将详细介绍MIPI D PHY的工作原理和在FPGA设计中的实现方法 MIPI D P
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • SD卡读写实验(SPI模式)

    对于 SD 卡的 SPI 模式而言 采用的 SPI 的通信模式为模式 3 即 CPOL 1 CPHA 1 在 SD 卡 2 0 版 本协议中 SPI CLK 时钟频率可达 50Mhz SD 卡的 SPI 模式 只用到了 SDIO D3 SP
  • 笔试

    文章目录 前言 40 复位电路设计 1 recovery time和removal time 2 同步复位和异步复位 3 异步复位同步释放 本文参考 往期精彩 前言 嗨 今天来学习复位电路设计相关问题 微信关注 FPGA学习者 获取更多精彩
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • 握手2倍速率进,一倍速率出[verilog]

    module two to one parameter WORD LEN 33 input clk input arst input 2 WORD LEN 1 0 i din input i din valid output o din r
  • FPGA提示产生latch的报错

    在fpga的设计中有时会遇到 latch 的报错 1 latch是什么 Latch 就是锁存器 是一种在异步电路系统中 对输入信号电平敏感的单元 用来存储信息 锁存器在数据锁存使能时 数据被锁存 输入信号不起作用 这违背了组合逻辑中输出随输
  • FPGA_时钟显示(时钟可调)

    1 实验说明 在数码管显示数据的基础上 让六位数码管显示数字时钟 并且通过按键可以对时间进行修改 实验目标 六位数码管分别显示时间的时分秒 且通过按键可实现加减调整时间及清零功能 key1 切换键 选择待调整的时间单位 时 分 秒 key2
  • 【FPGA】面试问题及答案整理合集

    面试问题及答案整理合集 1 硬件描述语言和软件编程语言的区别 2 FPGA选型问题 3 建立时间和保持时间问题 3 亚稳态问题 4 竞争和冒险问题 5 乒乓操作问题 6 同步和异步逻辑电路 7 同步复位和异步复位 8 MOORE 与 MEE
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • 使用七牛云进行文件上传

    目录 一 七牛云入门测试 1 注册七牛云账号 完成后选择对象存储 2 在里面创建空间 一个空间相当于一个文件夹 就是将对象上传到的地方 3 查看个人秘钥 注册完成账号后 会有一个秘钥 上传文件的时候进行授权和认证 4 文件上传测试 二 封装
  • 【电子技术】什么是LFSR?

    目录 0 前言 1 数学基础 1 1 逻辑异或 1 2 模2乘法 和 模2除法 2 线性反馈移位寄存器LFSR 3 抽头和特征多项式 4 阶线性反馈移位寄存器实例 0 前言 线性反馈移位寄存器 Linear Feedback Shift R
  • 硬核 | 从零制作一个激光雷达需要多久?

    编辑 ADS智库 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 硬件交流 技术交流群 本文只做学术分享 如有侵权 联系删文 激光雷达 LiDAR 是激光探测及测距系统的简称 目前广泛应用在无
  • 时序约束理解

    异步配置信息 跨时钟域 配置信息一般set max delay按照3delay来约束 2 异步回读 rst clear信号 设置set false path 放松时序约束要求 不应分析设计中的逻辑路径 因为不关心点到点时序要求
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573

随机推荐

  • ubuntu18安装caffe(CPU)

    1 前言 历时不知多少天 终于在自己电脑上配置好了caffe环境 2 所需环境 1 ubuntu18 04 2 python3 6 默认是只有3 6 3 安装 3 1切换清华源 cp etc apt sources list etc apt
  • chrome浏览器F12调式,修改替换js文件

    在F12模式下 有时可以直接修改js源码 Ctrl S 保存就可以了 但是有时这种方法会不起作用 这里介绍本地替换js的方式 案例 比如csdn想复制别人的一段文字并保留样式 但是字符长度大于140就不起作用了 1 通过右键定位需要修改的j
  • ELK-日志服务【redis-配置使用】

    目录 环境 1 redis配置 2 filebeat配置 3 对接logstash配置 4 验证 5 安全配置 第一种 kibana nginx访问控制 6 第二种 在ES 主节点 配置TLS 7 kibana配置密码 8 logstash
  • 晨光文具去年赚5亿,连2000元都拿来理财

    只要走出学校大门 在不多于500米半径范围内 你都能轻松找到晨光文具的门店 大到一线城市 小到三四线县城 经过20年苦心经营 晨光文具已经做到了这种格局 在这种格局背后 是晨光系7 2万家零售终端的缜密布局 20年来 在国内书写工具以及学生
  • 07:和为给定数

    总时间限制 1000ms 内存限制 65536kB 描述 给出若干个整数 询问其中是否有一对数的和等于给定的数 输入 共三行 第一行是整数n 0 lt n lt 100 000 表示有n个整数 第二行是n个整数 整数的范围是在0到10 8之
  • Linux Suse firewall 查看,关闭,启动

    查看 linux chkconfig list grep i fire 关闭 linux SuSEfirewall2 stop 启动 linux SuSEfirewall2 stop
  • 最小生成树以及Kruskal算法,Prime算法

    一 最小生成树 连通图 在无向图中 若从顶点v1到顶点v2有路径 则称顶点v1与顶点v2是连通的 如果图中任 意一对顶点都是连通的 则称此图为连通图 强连通图 在有向图中 若在每一对顶点vi和vj之间都存在一条从vi到vj的路径 也存在一条
  • 信号处理中简单实用的方法——提取信号中的包络

    一 用希尔伯特变换计算信号的包络 在求某一信号包络时用得最多的是希尔伯特变换 但并不是希尔伯特变换适用于所有信号求包络的情况 这是因为对于包络没有一个很严格的定义 在求包络时不同的情况会有不同的要求 下面将介绍用希尔伯特变换求取信号的包络
  • JVM一个类的加载过程

    七大步骤 具体过程 加载 classpath jar包 网络 某个磁盘位置下的类的class二进制字节流读进来 在内存中生成一个代表这个类的 java lang Class 对象放入元空间 此阶段我们的程序员可以干预 我们可以自定义类加载器
  • java web考试题及答案_2016JAVA-WEB期末复习题库附答案.doc

    1 当访问一个Servlet时 以下Servlet中的哪个方法先被执行 D A destroy B doGet C service D init0 2 假设在myServlet应用中有一个MyServlet类 在web xml文件中对其进行
  • 【leetcode】求两个链表的交点

    求两个链表的交点 c 借助set Definition for singly linked list struct ListNode int val ListNode next ListNode int x val x next NULL
  • 静态时序分析-Multicycle约束

    有时 前端在一些关键路径上的设计 可能会出现两个时钟周期驱动和采样一拍数据 来放松关键路径上的时序 这样的设计在STA约束过程中 如果不放松 会导致Timing违例过大 无法收敛 此时的Timing由前端逻辑实现保证 STA约束即可释放 以
  • 关于VScode引用头文件时一直报错的解决方法

    一 首先看下配置文件 常见的错误原因可能是因为 c cpp properties json 这个文件并没有配置好 可以参考下列的文件 在这里插入代 configurations name Win32 includePath workspac
  • iOS开发之数据存取(三)——FMDB

    FMDB 基本使用 相比于SQLite3来说Core Data存在着诸多优势 它面向对象 开发人员不必过多的关心更多数据库操作知识 同时它基于ObjC操作 书写更加优雅等 但是它本身也存在着一定的限制 例如如果考虑到跨平台 则只能选择SQL
  • AT24C02芯片介绍

    AT24C02管脚介绍 AT24C02低功耗CMOS串行EEPROM 它是内含256 8位存储空间 具有工作电压宽 2 5 5 5V 擦写次数多 大于10000次 写入速度快 小于10ms 等特点 AT24C02的1 2 3脚是三条地址线
  • 如何使用idea来查找所有未使用的代码?

    一 目的 通过idea快速找到项目中没有被使用的代码 二 操作步骤 2 1 Code gt Analyze Code gt Run Inspection by Name 2 2 输入Unused declaration gt 查询没有被使用
  • HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException type

    个人错误记录 本人目前水平不够 所以不喜勿喷 谢谢 我的错误原因 在SSM中 使用set注入的方式注入对象导致 源码 lt Controller RequestMapping role public class RoleController
  • write和fwrite

    如果只是普通地以O RDWR的flag去open一个文件朝里write 不考虑创建 扩增 那默认内核会把文件的这个页面读进来缓存在内核里的 也即所谓的page cache 随后再发起新的write syscall写相同的页面时 只要写在pa
  • vue3中将表格导出成excel文件

    yarn add xlsx yarn add file saver 通过调用exportData方法 excel 文件 传递数据和文件名 function exportToExcel tableData filename 1 JSON 数据
  • 【FPGA】SPI协议

    1 SPI简介 SPI Serial Perripheral Interface 串行外围设备接口 是 Motorola 公司推出的一种同步串行接口技术 SPI 总线在物理上是通过接在外围设备微控制器 PICmicro 上面的微处理控制单元