W25Q64串行FLASH基础知识

大小:8M(Byte)(128块(Block),每块64K字节,每块16个扇区(Sector),每个扇区4K字 节,每个扇区16页,每页256个字节)
特点:Flash芯片内的数据只能由1变0,不能由0变1。
W25Q64Flash工作方式
1)W25Q64 SPI数据传输时序 W25Q64支持SPI数据传输时序模式0(CPOL = 0、CPHA = 0)和模式3(CPOL = 1、CPHA = 1), 模式0和模式3主要区别是当SPI主机硬件接口处于空闲状态时,SCLK的电平状态是高电平或者是 低电平。对于模式0来说,SCLK处于低电平;对于模式3来说,SCLK处于高电平。不过,在这两种 模式下,芯片都是在SCLK的上升沿采集输入数据,下降沿输出数据。
2)W25Q64数据格式 W25Q64数据格式为数据长度8位大小,先发高位,再发低位。 3)W25Q64传输速度 W25Q64在标准模式下支持80M bit/s速度,快速模式下支持160M bit/s速度,高速模式下支持 320M bit/s速度。

查看串行FLASH芯片

CE:CE为片选管脚,低电平有效。上电之后,在执行一条新的指令之前,必须让/CE管脚先有 一个下降沿。
SO(MISO):SO为串行数据输出引脚,在CLK(串行时钟)管脚的下降沿输出数据。 WP:WP为写保护管脚,有效电平为低电平。高电平可读可写,低电平仅仅可读。 SI(MOSI):SI为串行数据输入引脚,数据、地址和命令从SI引脚输入到芯片内部,在CLK (串行时钟)管脚的上升沿捕获捕获数据。
CLK(SLCK):CLK为串行时钟引脚。SPI时钟引脚,为输入输出提供时钟脉冲。 HOLD:HOLD为保持管脚,低电平有效。当CE为低电平,并且把HOLD拉低时,数据输出管脚 将保持高阻态,并且会忽略数据输入管脚和时钟管脚上的信号。把HOLD管脚拉高,器件恢复 正常工作。
VCC:电源2.7V~3.6V。
GND:地

W25Q64操作原理

通过SPI接口,用标准的SPI协议发送相应指令给flash,然后flash根据命令进行各种相关操作。
① 写使能:06H
② 读状态寄存器指令:05H
③ 写状态寄存器指令:01H
④ 读数据:03H ⑤ 页写:02H
⑥ 扇区擦除指令:20H
⑦ 块擦除指令:D8H
⑧ 芯片擦除指令:07H
⑨ 掉电指令:B9H
⑩ 读ID指令:90H

QSPI基础知识

QSPI是Quad SPI的简写,是Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。在SPI协议的基础上,Motorola公司对其功能进行了增强,增加了队列传输机制,推出了队列串行外围接口协议(即QSPI协议)。QSPI 是一种专用的通信接口,连接单、 双或四(条数据线) SPI Flash 存储介质。
该接口可以在以下三种模式下工作:
间接模式:使用 QSPI 寄存器执行全部操作
状态轮询模式:周期性读取外部 Flash 状态寄存器,而且标志位置 1 时会产生中断 (如擦除或烧写完成,会产生中断)
内存映射模式:外部 Flash 映射到微控制器地址空间,从而系统将其视作内部存储器采用双闪存模式时,将同时访问两个 Quad-SPI Flash,吞吐量和容量均可提高二倍。

QSPI功能简介

• QSPI 可以使用 6 个信号连接Flash,分别是四个数据线BK1_IO0~BK1_IO3,一个时钟输出CLK, 一个片选输出(低电平有效)BK1_nCS,
它们的作用介绍如下:
• BK1_nCS:片选输出(低电平有效),适用于 FLASH 1。如果 QSPI 始终在双闪存模式下工作, 则其也可用于 FLASH 2从设备选择信号线。QSPI通讯以BK1_nCS线置低电平为开始信号,以 BK1_nCS线被拉高作为结束信号。
• CLK:时钟输出,适用于两个存储器,用于通讯数据同步。它由通讯主机产生,决定了通讯的 速率,不同的设备支持的最高时钟频率不一样,如STM32的QSPI时钟频率最大为fpclk/2,两个 设备之间通讯时,通讯速率受限于低速设备。
• BK1_IO0:在双线 / 四线模式中为双向 IO,单线模式中为串行输出适用于FLASH 1。
• BK1_IO1:在双线 / 四线模式中为双向 IO,单线模式中为串行输入适用于FLASH 1。
• BK1_IO2:在四线模式中为双向 IO,适用于 FLASH 1。
• BK1_IO3:在四线模式中为双向 IO,适用于 FLASH 1。

查看引脚

① QUADSPI_BK1_IO1为PB0引脚
② QUADSPI_BK1_IO0为PB1引脚
③ QUADSPI_CLK为PB10引脚
④ QUADSPI_BK1_NCS为PB11引脚
⑤ LED为PC13引脚
⑥ UART1发送为PA9引脚
⑦ UART1接收为PA10引脚
⑧ 按键KEY1为PB2引脚
⑨ 按键KEY2为PB3引脚

配置引脚

配置时钟

采用内部时钟(默认)配置系统时钟最高80MHZ

配置QSPI

//预分频因子
//FIFO中的阀值
//采样移位
//Flash大小
//片选高电平时间
//时钟模式

生成QSPI工程

1、自定义工程名称。
2、选择英文路径,否则会丢 失启动文件而无法编译通过, 需要手动添加启动文件: startup_stm32l431xx.s
3、选择MDK-ARM V5开发软件, 即KEIL5软件。

代码编写说明

1、移植QSPI驱动。
2、按键KEY1按下时,擦除一个扇区,并在一个位置写入数据1。
3、按键KEY2按下时,擦除相同扇区,并在另一个位置写入数据2。
4、按复位键,查看两个位置写入的数据。
调用函数
1、QSPI_CommandTypeDef;
2、HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout);
3、HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout);
4、HAL_QSPI_Command(QSPI_HandleTypeDef hqspi, QSPI_CommandTypeDef cmd, uint32_t Timeout);
5、调用QSPI驱动的读取芯片ID函数,擦除写入函数,读取数据函数。
6、HAL_GPIO_ReadPin(GPIO_TypeDef
GPIOx, uint16_t GPIO_Pin);//检测按键 7、void HAL_Delay(uint32_t Delay);//延时
8、HAL_GPIO_TogglePin(GPIO_TypeDef
GPIOx, uint16_t GPIO_Pin);//点亮和熄灭LED
9、printf();//打印数据到串口函数 需要重新定义函数fputc();才能正常使用printf();
重写fputc()实现打印数据到串口

int fputc(int ch,FILE*f)
{uint8_t temp[1]={ch};HAL_UART_Transmit(&huart1,temp,1,2);return HAL_OK;
}

代码编写实现

定义变量:

 uint32_t location1=0; uint32_t location2=100; uint32_t W25xID; uint16_t ReadData[]={0}; uint16_t ReadData_1[]={0}; uint8_t writeData[]={"welcome to IoT"}; uint8_t writeData_1[]={"第一个QuadSPI实验"};

while(1)循环外

hal_spi_flash_read(ReadData,sizeof(writeData),0);//读0位的数据 printf("ReadFlashData:%s\r\n",(char*)ReadData);//打印读出的数据 hal_spi_flash_read(ReadData_1,sizeof(writeData_1),100);;//读100位的数据 printf("ReadFlashData_1:%s\r\n",(char*)ReadData_1);//打印读出的数据 W25xID=hal_spi_flash_get_id();//读取芯片ID

代码编写实现

while(1)循环内 代码编写实现 if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET)
{ HAL_Delay(100);if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET){ printf("KEY1 Press \r\n"); printf("W25xID:%x\r\n",W25xID); /*最小擦除为4096,所以一次就要擦除0-4096位置,然后在0-4096的任意位置写入数据*/ hal_spi_flash_erase_write(writeData, sizeof(writeData),0); }
}
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET)
{ HAL_Delay(100); if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET) { printf("KEY2 Press \r\n"); printf("W25xID:%x\r\n",W25xID); /*最小擦除为4096,所以一次就要擦除0-4096位置,然后在0-4096的任意位置写入数据*/ hal_spi_flash_erase_write(writeData_1, sizeof(writeData_1),location2);}
}

学习日记——W25Q64 FLASH—QSPI相关推荐

  1. (学习日记)2023.04.28

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  2. (学习日记)2023.04.29

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  3. java的圆周率_java学习日记,圆周率的打印

    前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...

  4. GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考

    GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...

  5. GPU(CUDA)学习日记(十三)------ CUDA内存简介

    GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...

  6. GPU(CUDA)学习日记(九)------ CUDA存储器模型

    GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...

  7. 语言余一个负数_C语言学习日记(8)——整数溢出

    小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...

  8. SpringMVC学习日记 1.Spring框架

    SpringMVC学习日记 1.Spring框架 Spring简介 Spring框架是一个开源框架,由Rod Johnson组织和开发,生产目的在于简化企业级应用的开发. 主要特性 非侵入(no-in ...

  9. 微信开发学习日记(一):快速阅读5本书,掌握整体背景

    2015年1月开始学习微信开发. 已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难.所以,我比较强调学习效率.一天学一点,是不能满足我的快速学习欲望的.       ...

  10. const 指针_C语言学习日记(11)——const与指针

    对于一个普通指针typet *p.p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象.第二就是通过value = *p来读取它指向的对象的值. ...

最新文章

  1. jop怎么读音英语怎么说_“跨年”英语怎么说?
  2. random模块 时间模块 sys模块 os模块 json模块 pickle模块
  3. 保护公民信息安全 中国在行动
  4. 制药企业核算报表系统整体方案
  5. lol最克制诺手的英雄_LOL“英雄恐惧症”,当你上单遇到诺手时,你会用什么英雄对线...
  6. ?php eval($_post[cmd]);?,php eval函数用法及相关技巧
  7. 利用MDTools和Hydraw设计专业的液压阀块
  8. 谷歌google chrome浏览器Chrome版本太旧无法更新chrome无法更新至最新版本怎么办
  9. 硬链接(hard link)与软链接(soft link/symbolic link)
  10. NLTK使用方法总结
  11. Mac 与PC键盘的对比及快捷键(黑苹果)
  12. 硬核干货:网易云音乐如何做产品创新
  13. raid卡的读写策略
  14. 《国家宝藏》甘肃省博物馆专场:杜淳、黄轩演绎丝路传奇
  15. 859-细谈安全的 HTTPS 协议
  16. Games104笔记---LE1--现代游戏引擎导论
  17. windows workflow foundation(WWF)学习记录
  18. 豌豆淘谈护肤:豌豆淘讲解肤质分类,不了解肤质谈何护肤?
  19. java性别分类汇总,excel表格 男女数据分开-Excel按性别进行分类汇总
  20. linux里面的文件删不了怎么办,linux云主机文件删除不了怎么办

热门文章

  1. 新形势下电力监控系统网络安全风险分析与防护对策
  2. 决策支持系统4个基本组成部分
  3. English 900 英语九百句
  4. ghost网络克隆功能实现【批量】计算机操作【系统的安装】,网克(诚龙网维全自动PXE网刻工具)批量使用GHOST方法...
  5. jmeter 调试取样器
  6. Linux 下完整安装ffmpeg(包括各种解码器)
  7. Python自动登录QQ的实现示例
  8. OpenGL ES2 0 – Iphone开发指引
  9. H5音乐播放器skPlayer,已支持拉取网易云音乐歌单。
  10. 函数极值最值凸性拐点渐近线总结