当前位置: 首页 > news >正文

SPI通信(使用SPI读写W25Q64)

SPI通信协议

SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
四根通信线:
        SCLK:串行时钟线,用来提供时钟信号的。
        MOSI:主机输出,从机输入
        MISO:从机输出,主机输入
        SS:从机选择
同步,全双工
支持总线挂载多设备(一主多从
使用SPI通信的设备,如下图所示

硬件电路

1、  所有SPI设备的SCK、MOSI、MISO分别连在一起
•2、 主机另外引出多条SS控制线,分别接到各从机的SS引脚
        主机的SS线都是输出,从机的SS线都是输入。SS线是低电平有效的,主机想跟谁通信,就把对应的SS输出线置为低电平就可以了。(比如,主机初始化之后,所以的SS都输出高电平,这样就是不跟从机通信。当主机需要和从机1进行通信,主机就把SS1输出低电平就可以了。从机1就知道主机再找我,然后主机在数据引脚进行的传输,就只有从机会响应。当主机和从机1通信完成后,就会把SS1置为高电平,这样从机1就知道,主机结束了和我通信。)
        同一时间,主机只能置1个SS为低电平,只能选中一个从机。如果同时选择多个从机,就会导致数据冲突。
3、 输出引脚配置为推挽输出输入引脚配置为浮空或上拉输入
        推挽输出:高低电平均有很强的驱动能力,这将使得SPI引脚信号的下降沿,非常迅速;上升沿,也非常迅速。

移位示意图

移位寄存器:有一个时钟输入端。因为SPI一般都是高位先行的,所以,每来一个时钟,移位寄存器都会向左进行移位。

移位寄存器时钟源是由主机提供的,这里叫波特率发生器。它产生的时钟驱动主机的移位寄存器进行移位。同时,这个时钟也通过SCK引脚进行输出,接到从机的移位寄存器。

移位寄存器接法:主机移位寄存器左边移出去的数据,通过MOSI引脚,输入到从机移位寄存器的有右边。从机左边移出去的数据,通过MISO引脚,输入到主机移位寄存器的右边。

SPI时序基本单元

起始条件

起始条件:SS从高电平切换到低电平

SS是低电平有效,SS从高变到低,是不是就代表选中了某个从机,这就是通信的开始。

终止条件

终止条件:SS从低电平切换到高电平

交换一个字节

1、四种模式

2、模式1

CPOL(时钟极性)=0:空闲状态时,SCK为低电平
CPHA(时钟相位)=0:SCK第一个边沿移入数据第二个边沿移出数据

SCK在第一个边沿就要移入数据,但数据总得先移出,才能移入。所以在模式1的配置下,SCK第一个边沿之前,就要提前开始移出数据了,或者把它称作在第0个边沿移出,在第一个边沿移入。首先,SS下降沿开始通信,现在SCK还没有变化,但是SCK一旦开始变化,就要开始移入数据了。所以此时趁SCK还没变化,SS下降沿时,就要立刻触发移位输出。所以这里的MOSI和MISO的输出是对齐到SS的下降沿,SS下降沿触发了输出,SCK上升沿,就可以采样输入数据了,这样B7就传输完毕。依次循环,SCK下降沿,主机和从机移出数据;SCK上升沿,移入数据。最终在第8个上升沿时,B0位移入完成,整个字节交换完成。

3、模式2

CPOL=0:空闲状态时,SCK为低电平
CPHA=1:SCK第一个边沿移出数据第二个边沿移入数据

SCK第一个边沿,就是上升沿主机和从机同时移出数据,主机通过MOSI移出最高位,此时MOSI的电平就表示了主机要发送数据的B7。从机通过MISO移出最高位,此时MISO表示从机要发送数据的B7。然后时钟运行,产生下降沿,此时主机和从机同时移入数据,也就是进行数据采样。这里主机移出的B7,进入从机移位寄存器的最低位。从机移出的B7,进入主机移位寄存器的最低位。这样,一个时钟脉冲产生完毕,一个数据位传输完毕。依次循环8次,完成一个字节的传输。如果主机只想交换一个字节,那这时就可以置SS为高电平,结束通信。如果主机还想继续交换字节,主机就不必把SS置回高电平。

4、模式3

CPOL=1:空闲状态时,SCK为高电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据

5、模式4

CPOL=1:空闲状态时,SCK为高电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

W25Q64简介

FLASH:是一种掉电不丢失的存储 

        芯片内部flash:64K+512K的512K -- 存放个代码的地方

        芯片外部flash:独立于芯片外部

W25Q64:是flash的一种 -- 有厂家信息

W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,
常应用于数据存储、字库存储、固件程序存储等场景
存储介质:Nor Flash(闪存)
时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)
存储容量(24位地址):
        W25Q40: 4Mbit / 512KByte                                          
        W25Q80: 8Mbit / 1MByte              
        W25Q16: 16Mbit / 2MByte
        W25Q32: 32Mbit / 4MByte
        W25Q64: 64Mbit / 8MByte
        W25Q128: 128Mbit / 16MByte
        W25Q256: 256Mbit / 32MByte                                
        

硬件电路

W25Q64容量大小

1Byte = 8 BIT

W25Q64  容量大小:  64M BIT    ==  8M字节

W25Q64框图

1、快

首先,这一整个矩形空间里,是所有的存储器。存储器以字节为单位,每个字节都有唯一的地址。W25Q64的地址宽度是24位,3个字节。左下角,第一个字节它的地址是000000h,h代表16进制。之后的空间,地址一次自增,直到最后一个字节,地址是7FFFFFh。

 64KB为一个基本单元,把它划分成若干的快Block,从前往后,依次是快0、快1、等等等。一直分到最后一块,总共8MB,以64KB为一块进行划分,最后分得的块数,就是8MB/64KB=128,所以这里可以分得128快。

2、扇区

在一块里,我们在以4KB为一个单元,进行切分。64KB/4KB=16份。所以在每一块里,都可以分为扇区0,一直到扇区15。每个扇区内的地址范围是XX X0 00------XX XF FF。就是对每一块,在细分为16个扇区的分配方式。

3、页

页是在扇区里,再进行划分。页的大小是256个字节,一个扇区是4KB,以256个字节进行划分,4*1024/256=16页。所以,一个扇区里,可以分为16页。

在这里,每一行就是一页。在一页中,地址变化范围是XX XX 00-----XX XX FF。一页内的地址变化,仅限于地址的最低一个字节。

4、SPI控制逻辑

SPI控制逻辑:芯片内部进行地址锁存、数据读写等操作,都可以由控制逻辑来自动完成。主控芯片通过SPI协议,把指令和数据发给控制逻辑,控制逻辑就会自动去操作内部电路。

状态寄存器:比如芯片是否处于忙碌状态、是否写使能、是否写保护,都可以在这个状态寄存器里体现。

写控制逻辑:和外部的WP引脚相连。显然,这个是配合WP引脚实现硬件写保护的。

高电压生成器:这个是配合Flash进行编程的

页和字节地址锁存/计数器:是用来指定地址的。通过SPI,总共发过来3个字节的地址,因为1页是256字节,所以1页内的字节地址,就取决于最低位的1个字节,而高位的2个字节,就对应的是页地址。

FLASH操作注意事项

写入操作时:
写入操作前, 必须先进行写使能
每个数据位只能由1改写为0,不能由0改写为1
写入数据前必须先擦除 擦除后,所有数据位变为1
擦除必须按最小擦除单元进行
连续写入多字节时,最多写入一页的数据 超过页尾位置的数据,会回到页首覆盖写入
写入操作结束后,芯片进入忙状态,不响应新的读写操作
读取操作时:
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取

W25Q64状态寄存器

忙是只读的状态寄存器(S0)被设置为1状态时,表示设备正在执行程序(可能是在擦除芯片)或写状态寄存器指令。这个时候设备将忽略传来的指令,除了读状态寄存器和擦除暂停指令,写指令或写状态指令无效, 当S0为0状态时指示设备已经执行完毕,可以进行下一步操作。

W25Q64指令集

相关文章:

SPI通信(使用SPI读写W25Q64)

SPI通信协议 • SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 • 四根通信线: SCLK:串行时钟线,用来提供时钟信号的。 MOSI:主机输出,从机输入 MISO:从机输出,主机输入 SS:…...

<sa8650>QCX Usecase 使用详解—拓扑图 XML 定义

<sa8650>QCX Usecase 使用详解—拓扑图 XML 定义 一 、前言二、拓扑图 XML 定义2.1 <Node, port, link>2.2 < XML prolog >2.3 < UsecaseDef >2.4 < Usecase>2.5 < Targets>2.5.1 < Target>2.5.2 < Range>2.6 < Pipeline>2.…...

使用C++11实现Golang的defer功能

本文主要用C11标准来实现Golang的defer功能。 背景 目前笔者的主力语言是Golang&#xff0c;其次是C&#xff0c;再次是JS、Delphi。在Golang工程中大量使用了defer关键字实现函数的延迟调用。如打开文件的出错处理。近来在C工程中遇到类似需求&#xff0c;在函数返回时进行某…...

前端之电力系统SVG图低代码

其实所有的图形都是由点&#xff0c;线&#xff0c;面组成的。点线面可以组成一个设备。下面就简单讲讲点线面是怎么画的吧 对于线&#xff0c;可以用path <g><path:d"M ${beginX},${beginY} L ${endX},${endY}":stroke-width"lineWidth":strok…...

括号生成[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 数字n代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())(…...

配置ubuntu的VNC时遇到报错_XSERVTransmkdir: Mode of /tmp/.X11-unix should be set to 1777

现在win11内嵌了ubuntu系统&#xff0c;我在根据打造基于 VNC 的 Ubuntu 20.04 的远程桌面 配置VNC server时&#xff0c;到了 vncserver :1 这一步&#xff0c;遇到报错&#xff1a; vncserver: /usr/bin/Xtigervnc did not start up, please look into /root/.vnc/xxxxx.:1.…...

openstack部署nova中出现的问题:

[rootcontroller nova]# su -s /bin/sh -c “nova-manage db sync” nova /usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u’Duplicate index block_device_mapping_instance_uuid_virtual_name_device_name_idx. This is deprecated and will be…...

【OpenCV 基础知识 3】边缘检测

文章目录 cvCanny完整示例代码 cvCanny 这行代码使用OpenCV库中的 cvCanny 函数对灰度图像进行边缘检测。让我解释一下&#xff1a; cvCanny(gray, dst, 10, 100, 3);gray: 这是输入的灰度图像&#xff0c;即要进行边缘检测的图像。dst: 这是输出的边缘图像&#xff0c;即将结…...

拓宽知识储备量(指数级成长)

对于增强自己的知识储备&#xff0c;不是什么知识都往脑袋里去塞&#xff0c;最好的办法就是让自己的心态回到自己初心的时候&#xff0c;始终保值一颗学者的心&#xff0c;你像那些成功人士&#xff0c;比如格力&#xff0c;华为&#xff0c;腾讯等这样的大公司创始人哪个不是…...

x264 帧类型代价计算原理:slicetype_mb_cost 函数分析

slicetype_mb_cost 函数 函数功能 计算每个宏块 MB 的代价 cost。函数参数分析 x264_t *h:全局编码结构体x264_mb_analysis_t *a:宏块分析结构体x264_frame_t **frames:系列帧数据结构体int p0:帧序号之一,一般指向靠前帧int p1:帧序号之一,一般指向靠后帧int b:帧标志…...

战网国际服加速器哪个好用 暴雪战网免费加速器分享

战网国际服&#xff08;Battle.net International或Battle.net Global&#xff09;是由暴雪娱乐公司&#xff08;Blizzard Entertainment&#xff09;运营的面向全球玩家的多人在线游戏平台。与专注于特定地区的版本不同&#xff0c;国际服允许玩家不受地域限制地访问暴雪的多款…...

Java入门基础学习笔记26——break,continue

跳转关键字&#xff1a; break&#xff1a; 跳出并结束当前所在循环的执行。 continue&#xff1a; 用于跳出当前循环中的当次执行&#xff0c;直接进入循环中的下一次执行。 package cn.ensource.loop;public class BreakContinueDemo8 {public static void main(String[] a…...

HNU-算法设计与分析-作业6

第六次作业【分支限界法】 文章目录 第六次作业【分支限界法】<1> 算法实现题6-2 最小权顶点覆盖问题<2> 算法实现题6-6 n后问题<3> 算法实现题6-7 布线问题 <1> 算法实现题6-2 最小权顶点覆盖问题 ▲问题重述 问题描述&#xff1a; 给定一个赋权无向…...

2D Chests Assets - Mega Pack

科幻/奇幻/经典主题的箱子和容器。AAA质量,高分辨率,VFX,源PSD文件。 这是一个带有手绘套装的大包装: -【梦幻之栗】 -【科幻钱包】 AAA质量。高分辨率。一切都已准备就绪,可供使用。包括PSD文件。 在1.1版本中添加了VFX并将项目更新为URP。请注意,新的VFX仅适用于URP/HD…...

一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性

来源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一种新的高压MOSFET&#xff08;HV MOS&#xff09;紧凑模型&#xff0c;以消…...

vue阶段性测试题,内容丰富,案例典型,题目配有答案

阶段性测试 理论题实践题 1&#xff09;理论题 请简述Vue、Node.js、Vscode是什么&#xff0c;以及有什么关系 1. vue是一个轻量级、比较灵活的且支持组件开发的网络框架 2. node.js是让JavaScript运行在服务器上的一直环境 3. Vscode是一款有着丰富插件的代码编辑器 4. 关系…...

如何查看PC电脑已经已经连接上的网络WiFi密码?

运行ncpa.cpl...

Java 语言的特点分析及应用

Java语言自问世以来&#xff0c;因其独特的设计理念和广泛的应用领域&#xff0c;成为了编程语言中的一颗璀璨明星。以下是对Java语言特点的详细分析及其实际应用场景&#xff0c;希望能帮助面试者更好地理解和掌握Java的优势。 1. 简单易学 Java的语法简单&#xff0c;类似于…...

Golang | Leetcode Golang题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; func largestRectangleArea(heights []int) int {n : len(heights)left, right : make([]int, n), make([]int, n)for i : 0; i < n; i {right[i] n}mono_stack : []int{}for i : 0; i < n; i {for len(mono_stack) > 0 &&am…...

linux实用命令

一、常用命令 mkdir -p mkdir -p 命令用于在Unix和Linux系统中创建目录。其中&#xff0c;-p参数确保目录名称存在&#xff0c;如果目录不存在的就新创建一个。换句话说&#xff0c;-p参数允许创建一个目录和它不存在的父目录&#xff0c;确保了指定的整个目录路径都会被…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...