SPI协议——对外部SPI操作(跨页读写)

关于W25Q32JVSSIQ的详细内容在之前的两篇文章中已经详细介绍,本文不做太多赘述,如果对芯片的了解有缺失的话,可以参考:

SPI协议——对外部SPI Flash操作-CSDN博客

SPI协议——读取外部SPI Flash ID_spi flash 读取id-CSDN博客

目录

一、代码编写

1.发送/接收单/多个字节的函数

2.实现扇区擦除

3.实现跨页写

 4.读取数据

 二、运行结果

 


 

一、代码编写

1.发送/接收单/多个字节的函数

这样设计代码可以随意选择自己是否忽略发送/接受的数据

void SPI_FLASH_Xfer(uint8_t *snd_buf, uint8_t *recv_buf, int bytes)
{int 		i;uint8_t		send_data, recv_data;for(i = 0; i < bytes; i ++){send_data = (snd_buf != NULL) ? snd_buf[i] : 0xFF;recv_data = SPI_FLASH_SendByte(send_data);if( recv_buf != NULL ){recv_buf[i] = recv_data;}printf("Sending: 0x%02X, Received: 0x%02X\n", send_data, recv_data);}HAL_Delay(1);
}

2.实现扇区擦除

int New_SPI_FLASH_SectorErase(uint32_t addr, uint32_t size)
{uint32_t sector, first, last;uint32_t address;int rv;first = addr / Sector_Size;last = (addr + size - 1) / Sector_Size;/* Start to erase all sectors */for (sector = first; sector <= last; sector++){address = sector * Sector_Size;printf("Norflash Erase Sector@%lx ...\r\n", address);SPI1_FLASH_WaitEnd();SPI1_FLASH_WriteEnable();cs_low();SPI_FLASH_SendByte(0x20); // 发送扇区擦除命令/* Send the addr */SPI_FLASH_SendByte((address & 0xFF0000) >> 16);SPI_FLASH_SendByte((address & 0xFF00) >> 8);SPI_FLASH_SendByte(address & 0xFF);cs_high();// 确保擦除完成SPI1_FLASH_WaitEnd();HAL_Delay(10); // 增加延时,确保擦除完成}// 检查整个擦除区域是否已擦除rv = SPI_FLASH_VerifyErase(addr, size);if (rv != 0){printf("Erase the sector error\n");return -1;}else{printf("Erase ok\n");}return 0;
}

3.实现跨页写

int New_SPI_FLASH_PageWrite( uint32_t addr, uint8_t *data, uint32_t size)
{uint32_t			first, last, page;uint32_t			address, ofset, len;uint8_t				buf[Page_Size+5];int					bytes = 0;if( addr + size > 0x400000 )return -1;/* find the fist and the last page */first = addr / Page_Size;last = ( addr + size - 1 ) / Page_Size;printf("Norflash Write %ld Bytes to addr@0x%lx Begin...\r\n", size, addr );/*Initial  address in page and offset in buffer */address = addr;ofset = 0;/* Start to write to all pages */for( page = first; page <= last; page ++){len = Page_Size - ( address % Page_Size );len = len > size ? size : len;bytes = 0;printf("Norflash write addr@0x%lx, %lu bytes,and the data is %s \r\n", addr, len, data);buf[bytes++] = 0x02;buf[bytes++] = (addr & 0xFF0000) >> 16 ;buf[bytes++] = (addr & 0xFF00) >> 8 ;buf[bytes++] = (addr & 0xFF);/* send command and data */memcpy(&buf[bytes], data+ofset, len);bytes += len;printf("Norflash write addr@0x%lx, %lu bytes, data : ", address, len);for( int i = 4; i < bytes; i++ ){printf("0x%02x", buf[i]);printf("\n");}SPI1_FLASH_WriteEnable();cs_low();SPI_FLASH_Xfer(buf, NULL, bytes);cs_high();SPI1_FLASH_WaitEnd();addr  += len;ofset += len;size  -= len;}HAL_Delay(10);printf("Norflash WriteByte@0x%lx done.\r\n", addr);return 0;}

 4.读取数据

void New_SPI_FLASH_BufferRead(uint32_t addr, uint8_t *buffer, uint32_t size)
{uint8_t cmd[4];cmd[0] = 0x03; // Read Data commandcmd[1] = (addr >> 16) & 0xFF;cmd[2] = (addr >> 8) & 0xFF;cmd[3] = addr & 0xFF;cs_low();//发送读取命令和地址SPI_FLASH_Xfer(cmd, NULL, 4);//读取数据SPI_FLASH_Xfer(NULL, buffer, size);cs_high();// 调试输出,可选项,用于验证发送的命令和接收到的数据
/*    printf("SPI Flash Read: Address = 0x%lx, Data: ", addr);for (int i = 0; i < size; i++){printf("0x%02x ", buffer[i]);}printf("\n");*/
}

 二、运行结果

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/868844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloud应用框架】Nacos集群配置

第八章 Spring Cloud Alibaba Nacos之集群配置 文章目录 一、Linux版NacosMySql生产环境配置具体配置&#xff1a; 二、Nacos集群配置更改Nacos启动命令配置原理具体配置测试启动总结 一、Linux版NacosMySql生产环境配置 上一篇博客中已经了解了Nacos生产环境下需要搭建集群配…

XDMA原理学习(1)——DMA技术详解

目录 一、什么是DMA&#xff1f;为什么需要DMA&#xff1f; 二、DMA分类 2.1 Block DMA 2.2 Scatter-Gather DMA 2.3 Ring buffer DMA 三、实际案例 3.1 STM32微处理器 3.1.1 Block DMA 3.1.2 Scatter-Gather DMA 3.1.3 使用场景举例&#xff1a; 3.1.4 配置与实现 …

3GPP R18 Multi-USIM 是怎么回事?(三)

这篇内容相对来说都是一些死规定,比较枯燥。主要是与MUSIM feature相关的mobility and periodic registration和service request触发过程的一些规定,两部分的内容是有部分重叠的,为保证完整性,重复部分也从24.501中摘了出来。 24.501 4.25 网络和MUSIM UE可以支持MUSIM fe…

idea控制台乱码问题解决教程

注&#xff1a;按顺序来操作&#xff0c;完成后要重启软件 方案一&#xff1a;修改Tomcat的编码设置 在Tomcat的VM options中添加了-Dfile.encodingUTF-8 方案二&#xff1a;修改IDEA的编码设置 File->Settings->Editor->File Encodings 将Global Encoding、Proj…

STM32-外部中断浅析

本篇解释了STM32中断原理 MCU为什么需要中断 中断&#xff0c;是嵌入式系统中很重要的一个功能&#xff0c;在系统运行过程中&#xff0c;当出现需要立刻处理的情况时&#xff0c;暂停当前任务&#xff0c;转而处理紧急任务&#xff0c;处理完毕后&#xff0c;恢复之前的任务…

深度学习之正则化

目标 我们学习正则化之前应该先了解我们为什么要用正则化 。正则化解决了什么问题 。我们讲正则化之前 &#xff0c;先了解一个概念–》过拟合 过拟合 数据增强 L1和L2正则化 Dropout 注意&#xff1a;Dropout是不适合用在卷积神经网络的 提前终止 一般的做法是&#xff1a;记…

B端工作台如何设计?指导思想+布局建议+大厂案例全给你

一、B端工作台设计的指导思想 要做好B端工作台设计&#xff0c;以下是一些建议和策略&#xff1a; 1. 用户研究&#xff1a;深入了解目标用户的需求、行为和工作流程。通过用户研究方法&#xff0c;如用户访谈、观察和调研&#xff0c;收集用户反馈和意见&#xff0c;了解他们…

【计算机组成原理】计算机系统概述(上)

&#xff08;一&#xff09;计算机系统简介 计算机系统有“硬件”和“软件”两大部分组成。 1&#xff09;所谓“硬件”即指见计算机的实体部分&#xff0c;它由看得见摸得着的各种电子元器件、各类光、电、机设备的事物组成&#xff0c;如主机、外设等等。 2&#xff09;所谓…

以SGET协会OSM标准首创有662引脚的OSM模组——凌华智能引领嵌入式运算市场

在可焊接的45 x 45mm尺寸上提升功率 开启嵌入式运算发展的新时代 摘要&#xff1a; 1.开放式标准模块(OSM™)&#xff0c;最大尺寸仅45 x 45mm&#xff0c;采用零开销的模块化系统简化生产&#xff0c;并提供662个引脚以增强小型化和物联网应用。 2.凌华智能提供基于NXP i.M…

快速掌握AI的最佳途径实践

科技时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为许多人希望掌握的重要技能。对于普通人来说&#xff0c;如何快速有效地学习AI仍然是一个挑战。本文将详细介绍几种快速掌握AI的途径&#xff0c;并提供具体的操作步骤和资源建议。 前言 AI的普及和应用已经深…

独立站爆款产品的选品思路及底层逻辑拆解

在这个竞争激烈的跨境电商市场&#xff0c;有一件事情比网站设计、营销策略、物流服务都更重要。那就是选品。跨境独立站选品是独立站成功的第一步&#xff0c;如果选错了产品&#xff0c;那么所有努力都可能白费。可能会面临库存积压、利润低迷、客户流失等问题。但是如果选对…

HackTheBox--BoardLight

BoardLight 测试过程 1 信息收集 NMAP端口扫描 端口扫描开放 22、80 端口 80端口测试 # 添加 boardLight.htb 到hosts文件 echo "10.10.11.11 boardLight.htb" | sudo tee -a /etc/hosts检查网页源代码&#xff0c;发现 board.htb # 添加 board.htb 到 hosts 文…

星网安全产品线成立 引领卫星互联网解决方案创新

2024年6月12日&#xff0c;盛邦安全&#xff08;688651&#xff09;成立星网安全产品线&#xff0c;这是公司宣布全面进入以场景化安全、网络空间地图和卫星互联网安全三大核心能力驱动的战略2.0时代业务落地的重要举措。 卫星互联网技术的快速发展&#xff0c;正将其塑造为全球…

Camera Raw:裁剪

Camera Raw 的裁剪 Crop面板提供了裁剪、旋转、翻转、拉直照片等功能&#xff0c;通过它们可以更精确地调整照片的视角和范围&#xff0c;以达到最佳二次构图的视觉效果。 快捷键&#xff1a;C ◆ ◆ ◆ 使用方法与技巧 1、使用预设 选择多种裁剪预设&#xff08;如 1:1、16:…

【安全设备】下一代防火墙

一、什么是防火墙 防火墙是一个网络安全产品&#xff0c;它是由软件和硬件设备组合而成&#xff0c;在内网和外网之间、专用网与公共网之间的一种保护屏障。在计算机网络的内网和外网之间构建一道相对隔离的保护屏障&#xff0c;以达到保护资料的目的。它是一种隔离技术&#…

将QComboBox下拉项中的文本居中、居右

目录 1. 需求提出 2. 解决方法 1. 需求提出 QComboBox下拉项中的文本默认是居左的&#xff0c;如下&#xff1a; 有时需要将下拉项中的文本居中、居右。如何实现&#xff1f; 2. 解决方法 首先想到的是通过样式表来解决&#xff0c;但找遍Qt Assist和网络&#xff0c;都没这…

java设计模式(十)外观模式(Facade Pattern)

1、模式介绍&#xff1a; 外观模式是一种结构型设计模式&#xff0c;提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。外观定义了一个高层接口&#xff0c;使得子系统更容易使用。 2、应用场景&#xff1a; 当你希望为复杂的子系统提供一个简单接口时。 当客户…

电脑数据恢复篇:如何从电脑中恢复已删除的照片

按下 Shift Delete 后后悔了&#xff1f;想要恢复已删除的照片&#xff1f;好吧&#xff0c;如果是这样的话&#xff0c;你来对地方了。在本文中&#xff0c;我们将讨论如何从 PC 中恢复已删除的文件。 自从摄影的概念被提出以来&#xff0c;人们就对它着迷。以前&#xff0c…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率&#xff0c;以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样&#xff0c;常见的一种计算方式是金融监管支出与金…

[AI 大模型] Google Gemini

文章目录 [AI 大模型] Gemini简介模型架构发展新技术和优势示例 [AI 大模型] Gemini 简介 Google Gemini 是 Google 最新推出的多模态 AI 大模型&#xff0c;旨在提升 AI 在各个领域的应用能力。Gemini 能够处理文本、图像、音频、视频和代码等多种数据类型&#xff0c;展现出…