当前位置: 首页 > 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;确保了指定的整个目录路径都会被…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

多模态学习路线(2)——DL基础系列

目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization&#xff08;RMSNorm&#xff09; 二、激活函数 1. Sigmoid激活函数&#xff08;二分类&…...

mq安装新版-3.13.7的安装

一、下载包&#xff0c;上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量&#xff0c;直接就安装了。 erl…...