SPI协议_FLASH
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。
- 模式 0: CPOL= 0, CPHA=0。 空闲状态时 SCK 串行时钟为低电平; 数据采样在 SCK 时钟的奇数边沿,本模式中,奇数边沿为上升沿; 数据更新在 SCK 时钟的偶数边沿,本模 式中,偶数边沿为下降沿。
- 模式 1: CPOL= 0, CPHA=1。 空闲状态时 SCK 串行时钟为低电平; 数据采样在 SCK 时钟的偶数边沿, 本模式中,偶数边沿为下降沿; 数据更新在 SCK 时钟的奇数边沿,本模 式中,偶数边沿为上升沿。
- 模式 2: CPOL= 1, CPHA=0。 空闲状态时 SCK串行时钟为高电平; 数据采样在 SCK 时钟的奇数边沿, 本模式中,奇数边沿为下降沿; 数据更新在 SCK 时钟的偶数边沿,本模式中,偶数边沿为上升沿。
- 模式 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相关推荐
- spi协议时序图和四种模式实际应用详解
大家好,我是无际. 上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法. 刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识. 特别是SPI ...
- FPGA作为从机与STM32进行SPI协议通信---Verilog实现
一.SPI协议简要介绍 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用 ...
- 几种常用通信协议:IIC协议、SPI协议、UART协议
通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC协议: 2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一 ...
- 使用spi协议,接收来自slave的数据之前写0xff的原因
原来是spi IP核在接收的时候也把移位寄存器中的数据通过mosi发送出去了,从slave看,它通过miso发送数据给master的同时也接收来自master mosi上的数据.因为spi协议是没有反 ...
- 基于SPI协议的Flash全擦除
基于SPI协议的Flash全擦除 `timescale 1ns / 1ps module flash_be_ctrl(input wire sys_clk,//系统时钟频率50MHZ input wi ...
- spi 协议驱动设计
spi 协议驱动设计 MISO– Master Input Slave Output,主设备数据输入,从设备数据输出. MOSI– Master Output Slave Input,主设备数据输出, ...
- android 获取gpio电平值_使用GPIO实现SPI协议操作OLED
来源:百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版) 作者:韦东山 本文字数:5055,阅读时长:3分钟 现在开始写代码,使用GPIO实现SPI协议操作. 我们现 ...
- 04【Verilog实战】SPI协议底层硬件接口设计(附源码RTL/TB)
脚 本:makefile 工 具:vcs 和 verdi 写在前面 这个专栏的内容记录的是个人学习过程,博文中贴出来的代码是调试前的代码,方便bug重现. 调试后的程序提供下载,[下载地址] 发现 ...
- STM32学习之SPI协议(读写FLASH)
关于STM32学习分享 第八章 SPI协议(读写FLASH) 文章目录 关于STM32学习分享 前言 二.代码 1.spi_flash.c 2.spi_flash.h 3.main.c 总结 前言 开 ...
最新文章
- python基础-垃圾回收机制
- Leetcode1701. 平均等待时间[C++题解]:模拟题
- python白名单验证是什么意思_第10.5节 使用__all__定义Python模块导入白名单
- 重启开源,分享无限--微软面试187题精选
- 咱中国女人太贪钱? 其实真不怨她们
- 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
- 【路径规划】基于matlab粒子群算法机器人栅格路径规划【含Matlab源码 018期】
- WIN10电脑系统打不开U盘,提示拒绝访问
- XGboost和GBDT的异同
- mysql计算1000天后的日期_Mysql中常用的日期函数
- softmax和sigmod的pytorch这些
- Kalibr标定时卡在Extracting calibration target corners的问题
- 96Boards MIPI CSI Camera Mezzanine
- java爬虫实战——实现简单的爬取网页数据
- 制作系统安装(微软操作系统系统)
- VMware 连接ISO镜像时,切换可移动设备时遇到错误: 对磁盘“ide1:0”执行的连接控制操作失败?
- 【分布式版本控制系统Git】| Git 分支操作、Git 团队协作机制、GitHub 操作
- 计算机教育专业的专业任选课,什么叫自由选修课 又什么叫全校任选课
- pac文件提取服务器,[工具使用] privoxy 实现 PAC 请求过滤
- 蓝桥杯-发现环(python-简单Tarjan算法)