SPI协议

SPI(Serial Peripheral Interface,串行外围设备接口) 通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、 Flash、 ADC(数模转换器)、 DSP(数字信号处理器)以及数字信号解码器上,是常用的也是较为重要的通讯协议之一。SPI 通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制确认数据是否接收,与 IIC 总线通讯协议相比,在数据可靠性上有一定缺陷。

物理层

一主一从

一主多从

SPI 通讯协议包含 1 条时钟信号线、 2 条数据总线和 1 条片选信号线, 时钟信号线为SCK, 2 条数据总线分别为 MOSI(主输出从输入)、 MISO(主输入从输出),片选信号线为CS_n。

(1) SCK (Serial Clock): 时钟信号线,用于同步通讯数据。由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不同,两个设备之间通讯时,通讯速率受限于低速设备。

(2) MOSI (Master Output, Slave Input): 主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,数据方向由主机到从机。

(3) MISO (Master Input, Slave Output): 主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,数据方向由从机到主机。

(4) CS_n(Chip Select): 片选信号线,也称为 CS_N,以下用 CS_N 表示。 当有多个 SPI 从设备与 SPI 主机相连时,设备的其它信号线 SCK、 MOSI 及 MISO 同时并联到相同的 SPI总线上,即无论有多少个从设备,都共同使用这 3 条总线;而每个从设备都有独立的这一条 CS_N 信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。 I2C 协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而 SPI协议中没有设备地址,它使用 CS_N 信号线来寻址,当主机要选择从设备时,把该从设备的 CS_N 信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行 SPI 通讯。所以 SPI 通讯以 CS_N 线置低电平为开始信号,以 CS_N 线被拉高作为结束信号

协议层

SPI 通讯协议一共有四种通讯模式, 模式 0、模式 1、模式 2 以及模式 3, 这 4 种模式
分别由**时钟极性(CPOL, Clock Polarity)时钟相位(CPHA, Clock Phase)**来定义,其中
CPOL 参数规定了空闲状态(CS_N 为高电平,设备未被选中)时 SCK 时钟信号的电平状态,
CPHA 规定了数据采样是在 SCK 时钟的奇数边沿还是偶数边沿。


有四种模式,其中常用的是模式0和3。

  1. 模式 0: CPOL= 0, CPHA=0。 空闲状态时 SCK 串行时钟为低电平; 数据采样在 SCK 时钟的奇数边沿,本模式中,奇数边沿为上升沿; 数据更新在 SCK 时钟的偶数边沿,本模 式中,偶数边沿为下降沿。
  2. 模式 1: CPOL= 0, CPHA=1。 空闲状态时 SCK 串行时钟为低电平; 数据采样在 SCK 时钟的偶数边沿, 本模式中,偶数边沿为下降沿; 数据更新在 SCK 时钟的奇数边沿,本模 式中,偶数边沿为上升沿。
  3. 模式 2: CPOL= 1, CPHA=0。 空闲状态时 SCK串行时钟为高电平; 数据采样在 SCK 时钟的奇数边沿, 本模式中,奇数边沿为下降沿; 数据更新在 SCK 时钟的偶数边沿,本模式中,偶数边沿为上升沿。
  4. 模式 3: CPOL= 1, CPHA=1。 空闲状态时 SCK 串行时钟为高电平; 数据采样在 SCK 时钟的偶数边沿, 本模式中,偶数边沿为上升沿; 数据更新在 SCK 时钟的奇数边沿,本模 式中,偶数边沿为下降沿

SPI 每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

FLASH芯片

非易失性存储器,掉电后数据不会丢失,在 FPGA 工程的设计中, Flash 主要用作外接芯片来存储 FPGA 程序,使 FPGA 在上电后可以立即执行我们想要执行的程序。 SPIFlash 芯片就是支持 SPI 通讯协议的 Flash 芯片。

Flash 型号为 W25Q16 存储容量为 16Mbit(2M 字节),实验原理图如下:

SPI-Flash 全擦除指令

全擦除(Bulk Erase)操作,简称 BE,操作指令为 8’b1100_0111(C7h)。

如下图中从芯片手册中截取的内容,对全擦除指令进行了介绍,其大致意思就是:全擦除指令是将 Flash 芯片中的所有存储单元设置为全 1,在 Flash 芯片写入全擦出指令之前,需要先写入写使能(WREN)指令,将芯片设置为写使能锁存(WEL)状态;随后要拉低片选信号,写入全擦除指令,在指令写入过程中,片选信号始终保持低电平,待指令被芯片锁存后,将片选信号拉高;全擦除指令被锁存并执行后,需要等待一个完整的全擦除周期(tBE),才能完成 Flash 芯片的全擦除操作。

写使能(Write Enable)指令,简称 WREN,操作指令为 8’b0000_0110(06h)。

全擦除操作时序


**注意:**片选信号自下降沿始到第一个有效数据写入时止,这一段等待时间定义为片选信号有效建立时间 tSLCH,由图 38-15 可知,这一时间段必须大于等于 5ns;片选信号自最后一个有效数据写入时始到片选信号上升沿止,这一段等待时间定义为片选信号有效保持时间 tCHSH,这一时间段必须大于等于 5ns;片选信号自上一个上升沿始到下一个下降沿止,这一段等待时间定义为片选信号高电平等待时间 tSHSL,这一时间段必须大于等于 100ns。

SPI协议_FLASH相关推荐

  1. spi协议时序图和四种模式实际应用详解

    大家好,我是无际. 上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法. 刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识. 特别是SPI ...

  2. FPGA作为从机与STM32进行SPI协议通信---Verilog实现

    一.SPI协议简要介绍 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用 ...

  3. 几种常用通信协议:IIC协议、SPI协议、UART协议

    通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC协议: 2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一 ...

  4. 使用spi协议,接收来自slave的数据之前写0xff的原因

    原来是spi IP核在接收的时候也把移位寄存器中的数据通过mosi发送出去了,从slave看,它通过miso发送数据给master的同时也接收来自master mosi上的数据.因为spi协议是没有反 ...

  5. 基于SPI协议的Flash全擦除

    基于SPI协议的Flash全擦除 `timescale 1ns / 1ps module flash_be_ctrl(input wire sys_clk,//系统时钟频率50MHZ input wi ...

  6. spi 协议驱动设计

    spi 协议驱动设计 MISO– Master Input Slave Output,主设备数据输入,从设备数据输出. MOSI– Master Output Slave Input,主设备数据输出, ...

  7. android 获取gpio电平值_使用GPIO实现SPI协议操作OLED

    来源:百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版) 作者:韦东山 本文字数:5055,阅读时长:3分钟 现在开始写代码,使用GPIO实现SPI协议操作. 我们现 ...

  8. 04【Verilog实战】SPI协议底层硬件接口设计(附源码RTL/TB)

    脚  本:makefile 工  具:vcs 和 verdi 写在前面 这个专栏的内容记录的是个人学习过程,博文中贴出来的代码是调试前的代码,方便bug重现. 调试后的程序提供下载,[下载地址] 发现 ...

  9. STM32学习之SPI协议(读写FLASH)

    关于STM32学习分享 第八章 SPI协议(读写FLASH) 文章目录 关于STM32学习分享 前言 二.代码 1.spi_flash.c 2.spi_flash.h 3.main.c 总结 前言 开 ...

最新文章

  1. python基础-垃圾回收机制
  2. Leetcode1701. 平均等待时间[C++题解]:模拟题
  3. python白名单验证是什么意思_第10.5节 使用__all__定义Python模块导入白名单
  4. 重启开源,分享无限--微软面试187题精选
  5. 咱中国女人太贪钱? 其实真不怨她们
  6. 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
  7. 【路径规划】基于matlab粒子群算法机器人栅格路径规划【含Matlab源码 018期】
  8. WIN10电脑系统打不开U盘,提示拒绝访问
  9. XGboost和GBDT的异同
  10. mysql计算1000天后的日期_Mysql中常用的日期函数
  11. softmax和sigmod的pytorch这些
  12. Kalibr标定时卡在Extracting calibration target corners的问题
  13. 96Boards MIPI CSI Camera Mezzanine
  14. java爬虫实战——实现简单的爬取网页数据
  15. 制作系统安装(微软操作系统系统)
  16. VMware 连接ISO镜像时,切换可移动设备时遇到错误: 对磁盘“ide1:0”执行的连接控制操作失败?
  17. 【分布式版本控制系统Git】| Git 分支操作、Git 团队协作机制、GitHub 操作
  18. 计算机教育专业的专业任选课,什么叫自由选修课 又什么叫全校任选课
  19. pac文件提取服务器,[工具使用] privoxy 实现 PAC 请求过滤
  20. 蓝桥杯-发现环(python-简单Tarjan算法)

热门文章

  1. ArcGIS API for JavaScript字体库下载及本地字体库配置
  2. 现在不起眼的小IT公司值得去吗?我分享自己的亲身经历
  3. 电子计算机师德风范 论文,我身边的师德风范作文
  4. 牛顿迭代法求开方-详细且通俗讲解
  5. 系统流程图与业务流程图
  6. tftp工作流程计算机网络,网络服务TFtp、NFS配置
  7. 机器人开发实践源码编译报错问题解决方法
  8. 通过建站学运维(课时10)
  9. 使用免费组件view pdf 文档
  10. 微型计算机原理及应用考研试题,计算机考研必备微型计算机原理及应用试题精选...