嵌入式开发之STM32学习笔记day18
STM32F103C8T6 SPI通信读写W25Q64
1 W25Q64简介
W25Qxx系列是一种低成本、小型化且易于使用的非易失性存储器(NOR Flash),它广泛应用于需要持久化存储数据的各种场景,如数据存储、字库存储以及固件程序存储等。该系列存储器采用Nor Flash存储介质,这种类型的存储器以其快速读取速度和易于编程而受到青睐,特别适合需要频繁读写操作的应用。
W25Qxx系列提供不同的时钟频率选项以适应不同的性能需求,包括80MHz的标准SPI模式、160MHz的双SPI模式以及320MHz的四SPI模式。这些高速模式允许更快的数据传输速率,从而提高系统的整体性能。特别是Quad SPI模式,它通过使用四条数据线同时传输数据,显著提高了数据吞吐量,非常适合对速度要求较高的应用。
总的来说,W25Qxx系列存储器以其可靠性、灵活性和成本效益而受到青睐,是嵌入式系统、物联网设备和消费电子产品中理想的存储解决方案。
存储容量(24位地址):
W25Q40: 4Mbit / 512KByte
W25Q80: 8Mbit / 1MByte
W25Q16: 16Mbit / 2MByte
W25Q32: 32Mbit / 4MByte
W25Q64: 64Mbit / 8MByte
W25Q128: 128Mbit / 16MByte
W25Q256: 256Mbit / 32MByte
2 硬件电路
引脚 | 功能 |
VCC、GND | 电源(2.7~3.6V) |
CS(SS) | SPI片选 |
CLK(SCK) | SPI时钟 |
DI(MOSI) | SPI主机输出从机输入 |
DO(MISO) | SPI主机输入从机输出 |
WP | 写保护 |
HOLD | 数据保持 |
3 W25Q64 框图
这张图展示了W25Q64BV串行闪存(Serial Flash Memory)的内存块结构,其中存储器被划分为128个64KB的块,每个块进一步细分为16个4KB的扇区,地址从0x0000h到0xFFFFh映射到这些块和扇区,每一个扇区又可以分成16页(xx0000-xx00FF),每一页256个字节。
图中还描绘了SPI接口、命令和控制逻辑(执行指令、读写数据)、状态寄存器(与忙状态、写使能、写保护等功能有关)、页地址锁存器/计数器、字节地址锁存器/计数器、写控制逻辑、高电压生成器、页缓冲区(对一次性写入的数据量限制)以及块保护逻辑等组件,这些组件协同工作以实现数据的读取、写入、擦除和保护等功能,确保数据的完整性和安全性,同时支持高速数据传输。
4 Flash操作注意事项
写入操作时:
写入操作前,必须先进行写使能
每个数据位只能由1改写为0,不能由0改写为1
写入数据前必须先擦除,擦除后,所有数据位变为1
擦除必须按最小擦除单元(扇区)进行
连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写
写入操作结束后,芯片进入忙状态,不响应新的读写操作
读取操作时:
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取
5 SPI外设简介
SPI(Serial Peripheral Interface)是一种同步串行通信协议,广泛应用于微控制器和外围设备之间的数据传输。STM32微控制器系列,如STM32F103C8T6,内置了硬件SPI模块,这些模块能够自动处理时钟信号的生成和数据的发送与接收,从而减轻中央处理器(CPU)的工作负担,提高系统的整体效率。
STM32的SPI模块具有以下特点:
-
数据帧配置:可以配置为8位或16位数据帧,以适应不同应用的需求。
-
位顺序:支持高位先行(MSB First)或低位先行(LSB First)的数据传输方式。
-
时钟频率:SPI时钟频率可配置为总线时钟频率(fPCLK)的1/2、1/4、1/8、1/16、1/32、1/64、1/128或1/256分频,提供灵活的速率选择以匹配不同速度的外围设备。
-
多主机支持:STM32的SPI模块支持多主机模型,允许多个SPI主设备与一个或多个从设备通信。
-
主/从模式:SPI模块可以配置为主模式或从模式,主模式下SPI模块生成时钟信号,从模式下SPI模块作为从设备响应主设备的时钟信号。
-
通信模式:SPI可以配置为全双工、半双工或单工通信模式,以适应不同的通信需求。
-
DMA支持:SPI模块支持直接内存访问(DMA),允许数据在内存和外设之间直接传输,无需CPU干预,进一步提高数据传输的效率。
-
协议兼容性:STM32的SPI模块兼容I2C协议,这是一种常用的串行通信协议,广泛应用于各种电子设备中。
STM32F103C8T6微控制器提供了两个硬件SPI资源:SPI1和SPI2,这使得该微控制器能够同时与两个外设设备进行通信,增加了系统的扩展性和灵活性。这些SPI资源可以用于连接各种外围设备,如传感器、显示器、存储器等,实现数据的快速传输和处理。
6 SPI框图
STM32微控制器中的SPI模块是一种高效的同步串行通信接口,用于实现主设备与一个或多个从设备之间的数据交换。该模块包括主控电路、波特率发生器、移位寄存器、发送和接收缓冲区等关键组件,它们协同工作以支持全双工或半双工通信模式。SPI模块通过MOSI和MISO线传输数据,并通过SCK线提供同步时钟信号。通信参数如时钟频率、数据帧格式和通信模式可通过SPI_CR1和SPI_CR2寄存器进行配置,以适应不同的通信需求。此外,SPI模块支持通过NSS引脚选择从设备,以及通过DMA减轻CPU负担,实现高速数据传输。该模块的设计使得STM32能够灵活地与外围设备如传感器、显示器和存储器等进行通信,广泛应用于嵌入式系统中。
7 SPI基本结构
这张图展示了一个基于微控制器的串行通信模块的简化框架图。图中包含以下关键组件:
- 波特率发生器:负责生成用于同步数据传输的时钟信号,该时钟信号通过GPIO(通用输入输出端口)输出。
- 数据控制器:管理数据传输的逻辑,控制数据的发送和接收过程。
- 发送数据寄存器(TDR):存储即将通过串行接口发送的数据。
- 移位寄存器:用于在发送和接收过程中暂存单个数据位,以便按位串行传输。
- 接收数据寄存器(RDR):存储从串行接口接收到的数据。
- GPIO(通用输入输出端口):用于连接到外部设备,进行数据的发送和接收。
- 开关控制:可能用于控制数据传输的启动和停止,或其他相关的控制信号。
整个流程如下:
-
数据控制器将数据写入发送数据寄存器(TDR)。
-
数据从TDR寄存器移动到移位寄存器,然后逐位发送到外部设备。
-
同时,接收到的数据从外部设备通过GPIO进入接收数据寄存器(RDR)。
-
波特率发生器生成的时钟信号用于同步发送和接收操作。
-
GPIO端口用于实际的串行数据传输,连接到外部设备的相应引脚。
8 主模式全双工连续传输
在主模式、全双工模式下(BIDIMODE=0且RXONLY=0)连续传输时,SPI通信过程中TXE(发送使能)、RXNE(接收使能)和BSY(发送缓冲区空)标志的变化示意图,其中SCK是时钟线,MISO/MOSI是数据线,图中显示了连续发送三个数据(0xF1、0xF2、0xF3)的过程,每个数据发送前TXE由硬件设置并由软件清除,而每个数据接收后RXNE由硬件设置并由软件清除,BSY标志则在发送缓冲区为空时由硬件设置,指示可以发送下一个数据。
9 非连续传输
这张图是关于SPI(串行外设接口)在非连续传输发送模式下的TXE/BSY变化示意图,其中BIDIMODE=0表示单向通信模式,RXONLY=0表示接收功能被禁用,仅进行发送操作。图中展示了在CPOL=1和CPHA=1的配置下,数据通过MOSI(主设备输出从设备输入)线以SPI模式发送的过程。图中显示了连续发送三个数据(0xF1, 0xF2, 0xF3)的过程:
-
软件首先将数据0xF1写入SPI_DR寄存器。
-
然后等待TXE标志变为高电平,表示SPI控制器准备好发送数据。
-
数据0xF1被发送后,TXE标志被硬件清除。
-
接着软件将数据0xF2写入SPI_DR,但需等待TXE标志再次变为高电平。
-
数据0xF2发送后,同样的过程适用于数据0xF3。
整个过程展示了SPI在非连续传输模式下,如何通过软件控制和硬件标志的协作来实现数据的发送。这种模式下,每次发送数据前都需要软件检查TXE标志,确保数据正确发送。
关注我:
-
CSDN博客:小程同学>o<-CSDN博客
相关文章:

嵌入式开发之STM32学习笔记day18
STM32F103C8T6 SPI通信读写W25Q64 1 W25Q64简介 W25Qxx系列是一种低成本、小型化且易于使用的非易失性存储器(NOR Flash),它广泛应用于需要持久化存储数据的各种场景,如数据存储、字库存储以及固件程序存储等。该系列存储器采用…...

[论文阅读]PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning
PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning | IJCAI IJCAI-22 发表于2022年的论文,当时大家还都在做小模型NLP的相关工作(BERT,Ro…...
一键 Ubuntu、Debian、Centos 换源(阿里源、腾讯源等)
网上各种办法都不行,使用这个工具可以了。 我用的是腾讯云源 配置系统源 bash <(curl -sSL https://linuxmirrors.cn/main.sh)配置 docker 源 bash <(curl -sSL https://linuxmirrors.cn/docker.sh)...

汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析
汽车安全的三重防线:深入解析FuSa、SOTIF与网络安全技术 现代汽车已成为装有数千个传感器的移动计算机,安全挑战比传统车辆复杂百倍。 随着汽车智能化、网联化飞速发展,汽车电子电气架构已从简单的分布式控制系统演变为复杂的移动计算平台。现…...

【C++高级主题】虚继承
目录 一、菱形继承:虚继承的 “导火索” 1.1 菱形继承的结构与问题 1.2 菱形继承的核心矛盾:多份基类实例 1.3 菱形继承的具体问题:二义性与数据冗余 二、虚继承的语法与核心目标 2.1 虚继承的声明方式 2.2 虚继承的核心目标 三、虚继…...

基于 ZYNQ 的实时运动目标检测系统设计
摘 要: 传统视频监控系统在实时运动目标检测时,存在目标检测不完整和目标检测错误的局限 性 。 本研究基于体积小 、 实时性高的需求,提出了一种将动态三帧差分法与 Sobel 边缘检测算法结 合的实时目标检测方法,并基于 ZYNQ 构建了视频…...
数据结构(JAVA版)练习题
(题目难易程度与题号顺序无关哦) 目录 1、多关键字排序 2、集合类的综合应用问题 3、数组排序 4、球的相关计算问题 5、利用类对象计算日期 6、日期计算问题 7、星期日期的计算 8、计算坐标平面上两点距离 9、异常处理设计问题 10、Java源文件…...
C#编程过程中变量用中文有啥影响?
一、C#语言对中文变量名的支持规则 技术可行性 C#编译器基于Unicode标准(UTF-16编码),支持包括中文在内的非ASCII字符作为变量名。变量名规则允许字母、数字、下划线及Unicode字符(如汉字),但不能以数字开头…...
哈希表入门:用 C 语言实现简单哈希表(开放寻址法解决冲突)
目录 一、引言 二、代码结构与核心概念解析 1. 数据结构定义 2. 初始化函数 initList 3. 哈希函数 hash 4. 插入函数 put(核心逻辑) 开放寻址法详解: 三、主函数验证与运行结果 1. 测试逻辑 2. 运行结果分析 四、完整代码 五、优…...

[华为eNSP] 在eNSP上实现IPv4地址以及IPv4静态路由的配置
设备名称配置 重命名设备以及关闭信息提示 此处以R1演示,R2R3以此类推 <Huawei>system-view [Huawei]sysname R1#关闭提示 undo info-center enable 配置路由接口IP地址 R1 [R1]interface GigabitEthernet 0/0/1[R1-GigabitEthernet0/0/1]ip address 10.0.…...

2024年第十五届蓝桥杯青少组c++国赛真题——快速分解质因数
2024年第十五届蓝桥杯青少组c国赛真题——快速分解质因数 题目可点下方去处,支持在线编程,在线测评~ 快速分解质因数_C_少儿编程题库学习中心-嗨信奥 题库收集了历届各白名单赛事真题和权威机构考级真题,覆盖初赛—省赛—国赛&am…...

【动手学MCP从0到1】2.1 SDK介绍和第一个MCP创建的步骤详解
SDK介绍和第一个MCP 1. 安装SDK2. MCP通信协议3. 基于stdio通信3.1 服务段脚本代码3.2 客户端执行代码3.2.1 客户端的初始化设置3.2.2 创建执行进行的函数3.2.3 代码优化 4. 基于SSE协议通信 1. 安装SDK 开发mcp项目,既可以使用Anthropic官方提供的SDK,…...
基于MyBatis插件实现动态表名解决多环境单一数据库问题
业务场景 在为某新能源汽车厂商进行我司系统私有化部署时,在预演环境和生产环境中,客户仅提供了一个 MySQL 数据库实例。为了确保数据隔离并避免不同环境之间的数据冲突,常规做法是为每个环境创建独立的表(如通过添加环境前缀或后…...

测试面试题总结一
目录 列表、元组、字典的区别 nvicat连接出现问题如何排查 mysql性能调优 python连接mysql数据库方法 参数化 pytest.mark.parametrize 装饰器 list1 [1,7,4,5,5,6] for i in range(len(list1): assert list1[i] < list1[i1] 这段程序有问题嘛? pytest.i…...
Spring Boot应用多环境打包与Shell自动化部署实践
一、多环境配置管理(Profile方案) 推荐方案:通过Maven Profiles实现环境隔离 在pom.xml中定义不同环境配置,避免硬编码在application.yml中: <profiles><!-- 默认环境 --><profile><id>node…...

【深度学习】14. DL在CV中的应用章:目标检测: R-CNN, Fast R-CNN, Faster R-CNN, MASK R-CNN
深度学习在计算机视觉中的应用介绍 深度卷积神经网络(Deep convolutional neural network, DCNN)是将深度学习引入计算机视觉发展的关键概念。通过模仿生物神经系统,深度神经网络可以提供前所未有的能力来解释复杂的数据模式&…...
grpc的二进制序列化与http的文本协议对比
grpc的二进制序列化与http的文本协议对比 1. 二进制格式 vs 文本格式2. 编码机制:Varint 与固定长度3. 没有字段名与标点4. 较少的元信息开销4.1 HTTP/1.1 请求的元信息组成与开销4.1.1 各部分字节数示例 4.2 HTTP/2 帧结构与 HPACK 头部压缩4.2.1 HEADERS 开销对比…...
Linux 环境下 PPP 拨号的嵌入式开发实现
一、PPP 协议基础与嵌入式应用场景 PPP (Point-to-Point Protocol) 是一种在串行线路上传输多协议数据包的通信协议,广泛应用于拨号上网、VPN 和嵌入式系统的远程通信场景。在嵌入式开发中,PPP 常用于 GPRS/3G/4G 模块、工业路由器和物联网设备的网络连接…...

UE 材质基础第三天
飘动的旗帜 错乱的贴图排序,创建一个材质函数 可以用在地面材质 体积云材质制作 通过网盘分享的文件:虚幻引擎材质宝典.rar 链接: https://pan.baidu.com/s/1AYRz2V5zQFaitNPA5_JbJw 提取码: cz1q --来自百度网盘超级会员v6的分享...

【Github/Gitee Webhook触发自动部署-Jenkins】
Github/Gitee Webhook触发自动部署-Jenkins #mermaid-svg-hRyAcESlyk5R2rDn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hRyAcESlyk5R2rDn .error-icon{fill:#552222;}#mermaid-svg-hRyAcESlyk5R2rDn .error-tex…...
软件工程专业本科毕业论文模板
以下是软件工程专业本科毕业论文的通用模板框架,结合学术规范与工程实践要求,涵盖从需求分析到测试验证的全流程结构,并附格式说明与写作建议: 一、前置部分 1. 封面 - 包含论文标题(简明反映研究核心,如“…...

新松机械臂 2001端口服务的客户端例程
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

电脑网络重置,找不到原先自家的WIFI,手机还能正常连接并上网
问题排查:1、电脑感觉网络太慢,因此打算点击了网络重置 2、点击提示会删除网络,在五分钟后关机重启 3、从设备管理器设备的无线wifi属性-事件中发现删除记录 4、选择更新驱动程序 5、从列表中选取 6、更改回老驱动版本 备选方案&#…...

期末复习(学习)之机器学习入门基础
上课没听过报道。欢迎补充交流! 前言:老师画的重点其实可以完全不用看,我这里只是看了一眼书顺着书本敲一遍。 比较干货的部分,直接看学习通的内容就好。最重要的是把学习通的内容记好。 目录 老师划的重点:P50 结构…...

网络各类型(BMA,NBMA,P2P)
网络类型—基于二层(数据链路层)使用的协议不同从而导致数据包封装方式不同,工作方式也有所区别,从而对网络本身进行分类 一、网络类型分类 2. 关键差异对比 1. HDLC(高级数据链路控制协议) 协议特点&…...
Linux 库文件的查看和管理
Linux 库文件说明1、库文件的类型2、库文件存储路径3、库文件查找顺序 Linux 库文件管理1、查看动态库相关信息2、添加动态库查找路径 Linux 库文件说明 1、库文件的类型 Linux 中的库文件本质上就是封装好的功能模块,某个应用程序如果要实现某个功能,…...
Java设计模式深度解析:策略模式的核心原理与实战应用
目录 策略模式基础解析策略模式实现指南策略模式典型应用场景Java生态中的策略模式实践策略模式进阶技巧策略模式最佳实践总结与展望1. 策略模式基础解析 1.1 核心概念与定义 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法族,将每个算法封装成独立…...

【计算机网络】第3章:传输层—概述、多路复用与解复用、UDP
目录 一、概述和传输层服务 二、多路复用与解复用 三、无连接传输:UDP 四、总结 (一)多路复用与解复用 (二)UDP 一、概述和传输层服务 二、多路复用与解复用 三、无连接传输:UDP 四、总结 (…...
6、在树莓派上安装 NTP(Network Time Protocol )服务的步骤
在树莓派上安装 NTP(Network Time Protocol )服务的步骤: 1. 安装 NTP 服务 打开树莓派终端,输入以下命令更新软件包列表: sudo apt-get update然后安装 NTP 服务: sudo apt-get install ntp2. 配置 NT…...

神经符号AI的企业应用:结合符号推理与深度学习的混合智能
💡 技术前沿: 神经符号AI代表了人工智能发展的新阶段,它将深度学习的模式识别能力与符号推理的逻辑分析能力有机结合,创造出更加智能、可解释且可靠的AI系统。这种混合智能技术正在重塑企业的智能化应用,从自动化决策到…...