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

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...