首页 > 其他分享 >转载:W25Q64操作

转载:W25Q64操作

时间:2023-11-13 09:57:36浏览次数:33  
标签:HAL Exchange W25Q64 uint8 Address 操作 转载 Data

W25Q64

 

W25Q64

容量:总容量64Mbit    分为128Block (64KB/Block)  一个Block又分为16个Sector(4KB/Sector)一个Sector分为16个Page(256B/Page)

24位地址

最小擦除单元:Sector

连续写入最多一页数据,超过时回到页首覆盖写入,写入后芯片进入忙状态

SPI读写W25Q64函数

#include "main.h"
#include "W25Q64.h"
#include "spi.h"





#define S_Choose_W25Q64      HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, GPIO_PIN_RESET)
#define S_DeChoose_W25Q64    HAL_GPIO_WritePin(SPI2_CS_GPIO_Port, SPI2_CS_Pin, GPIO_PIN_SET)

/*SPI数据发送与接收*/
uint8_t S_W25Q64_Exchange_Data(uint8_t ByteSend)
{
    uint8_t GetByteSend = ByteSend;
    uint8_t ByteReceive;
    HAL_SPI_TransmitReceive(&hspi2,&GetByteSend,&ByteReceive,1,100);
    return ByteReceive;
}


/*读取芯片ID*/
void S_W25Q64_ReadID(uint8_t *MID,uint16_t *DID)
{
    S_Choose_W25Q64;
    S_W25Q64_Exchange_Data(0x9F);
    *MID = S_W25Q64_Exchange_Data(0xFF);
    *DID = S_W25Q64_Exchange_Data(0xFF);
    *DID <<= 8;
    *DID |= S_W25Q64_Exchange_Data(0xFF);
    S_DeChoose_W25Q64;
}
/*写使能*/
void S_W25Q64_WriteEnable(void)
{
    S_Choose_W25Q64;
    S_W25Q64_Exchange_Data(W25Q64_WRITE_ENABLE);
    S_DeChoose_W25Q64;
}
/*等待芯片忙状态结束*/
void S_W25Q64_WaitNoBusy(void)
{
    uint32_t TimeOut;
    S_Choose_W25Q64;
    S_W25Q64_Exchange_Data(W25Q64_READ_STATUS_REGISTER_1);
    TimeOut = 100000;
    //判断状态寄存器Busy位
    while((S_W25Q64_Exchange_Data(0xFF)&0x01) == 0x01)
    {
        TimeOut--;
        if(TimeOut <= 9)
        {
            break;
        }
    }
    S_DeChoose_W25Q64;
}
//写数据
void S_W25Q64_PageProgram(uint32_t Address,uint8_t *DataArray,uint16_t Count)
{
    S_W25Q64_WaitNoBusy();
    S_W25Q64_WriteEnable();
    S_Choose_W25Q64;
    uint16_t i = 0;
    S_W25Q64_Exchange_Data(W25Q64_PAGE_PROGRAM);
    S_W25Q64_Exchange_Data(Address >> 16);
    S_W25Q64_Exchange_Data(Address >> 8);
    S_W25Q64_Exchange_Data(Address >> 0);
    for(i = 0;i<Count;i++)
    {
        S_W25Q64_Exchange_Data(DataArray[i]);
    }
    S_DeChoose_W25Q64;
}

//擦除数据
void S_W25Q64_SectorErase(uint32_t Address)
{
    S_W25Q64_WaitNoBusy();
    S_W25Q64_WriteEnable();
    S_Choose_W25Q64;

    S_W25Q64_Exchange_Data(W25Q64_SECTOR_ERASE_4KB);
    S_W25Q64_Exchange_Data(Address >> 16);
    S_W25Q64_Exchange_Data(Address >> 8);
    S_W25Q64_Exchange_Data(Address >> 0);

    S_DeChoose_W25Q64;

}


//读数据
void S_W25Q64_ReadData(uint32_t Address,uint8_t *DataArray,uint16_t Count)
{
    S_W25Q64_WaitNoBusy();
    S_Choose_W25Q64;
    uint16_t i = 0;
    S_W25Q64_Exchange_Data(W25Q64_READ_DATA);
    S_W25Q64_Exchange_Data(Address >> 16);
    S_W25Q64_Exchange_Data(Address >> 8);
    S_W25Q64_Exchange_Data(Address >> 0);
    for(i = 0;i<Count;i++)
    {
        DataArray[i] = S_W25Q64_Exchange_Data(0xFF);
    }
    S_DeChoose_W25Q64;
}

函数测试

/*读取ID*/
  uint8_t MID;
  uint16_t DID;
  S_W25Q64_ReadID(&MID,&DID);
  HAL_UART_Transmit(&huart2,&MID,1,1000);
  uint8_t DID0 = DID;
  uint8_t DID1 = DID>>8;
  HAL_UART_Transmit(&huart2,&DID1,1,1000);
  HAL_UART_Transmit(&huart2,&DID0,1,1000);
  
  HAL_Delay(20);
 /*写入数据*/
  uint8_t ArrayOrigin[]={0x01,0x03,0x05};
  uint8_t ArrayDestination[3] = {0};
  S_W25Q64_SectorErase(0x000000);
  S_W25Q64_PageProgram(0x000000,ArrayOrigin,3);
  S_W25Q64_ReadData(0x000000,ArrayDestination,3);
  HAL_UART_Transmit(&huart2,ArrayDestination,3,1000);

测试结果

 

标签:HAL,Exchange,W25Q64,uint8,Address,操作,转载,Data
From: https://www.cnblogs.com/okyihu/p/17828512.html

相关文章

  • 字符串操作的常⽤⽅法
    ToLower() 把字符串转换成小写字符ToUpper()把字符串转换成大写字符Trim() 删除字符串头部及尾部出现的空格,删除的过程为从外到内,直到碰到一个非空格的字符为止,所以不管前后有多少个连续的空格都会被删除掉。TrimStart() 只删除字符串的头部的空格。TrimEnd() 只删除......
  • 在CentOs 7 下的Linux基本操作(一)
    1.目录操作(1)创建目录创建单个目录用mkdir,创建多级目录门mdkir -p  (2)查看目录查看当前目录用pwd   查看实际工作目录用 pwd -P 注意该P为大写  ......
  • 装个绿色Xshell,无需注册机,或者需要断网等各种骚操作
    找个能用的真不容易啊。官方免费版,无需下载注册机,或者需要断网等各种骚操作,安装完成后即可使用,非常方便。前言Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及MicrosoftWindows平台的TELNET协议。Xshell通过互联网到远程主机的安全连接以及它创新性的设计和特......
  • python3使用pymsql操作mysql数据库
    操作系统:Windows10_x64python版本:3.9.2pymysql版本:1.0.2MySQL版本:5.7.38 之前写过一篇关于python操作mysql数据库的文章:https://www.cnblogs.com/MikeZhang/p/pythonOptMysql20170703.html当时是基于python2.7和mysql5.5来整理的,但目前python2.7已经不再维护,主......
  • 容器日志采集的三种方式实战操作讲解(Filebeat)
    目录一、概述二、K8s集群部署三、ElasticSearch和kibana环境部署1)部署docker2)部署docker-compose3)创建网络4)修改Linux句柄数和最大线程数5)下载部署包开始部署四、容器日志采集的三种方式实战操作1)【第一种方式】:Filebeat与应用运行在同一容器(不推荐)1、下载Trinoonk8s......
  • openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据
    openGauss学习笔记-121openGauss数据库管理-设置密态等值查询-使用JDBC操作密态数据库121.1连接密态数据库连接密态数据库需要使用驱动包gsjdbc4.jar,具体JDBC连接参数参考基于JDBC开发章节介绍。JDBC支持密态数据库相关操作,需要设置enable_ce=1,示例如下。publicstaticConne......
  • vim几种常见模式以及常见操作
    vim是一个全屏模式编辑器。分为三种模式:命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本插入(insert)或编辑模式:用于修改文本扩展命令(extendedcommand)或命令(末)行模式:保存,退出等在不同模式下敲击相同的按键具有不同的意义。插入模式和扩展命令模式不可以直接切换,需要先退......
  • python字符串操作
    python执行python脚本第一行#!/usr/bin/python 只对Linux/Unix用户适用,用来指定本脚本用什么解释器来执行。有这句时,加上执行权限后,可以直接用 ./ 执行,不然会出错,因为找不到python解释器。#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python......
  • 国产操作系统下载
    https://www.nfschina.com/index.php?id=63#方德高可信服务器操作系统https://www.deepin.org/zh/download/https://www.kylinos.cn/scheme/server.htmlhttps://www.kylinos.cn/scheme/desktop/12.htmlhttps://www.ubuntukylin.com/downloads/https://www.chinauos.com/re......
  • 一个操作系统的设计与实现——第14章 文件系统
    文件系统是操作系统的一个重要模块。本章将要实现的是文件系统。14.1什么是文件系统文件系统是操作系统用于管理硬盘,并使硬盘更易于使用的模块。想要管理硬盘,就需要记录硬盘扇区的使用情况,可以使用位图实现这个功能。想要让硬盘更易于使用,就需要一个非常关键的概念:文件。文件......