1、W25Q64Flash芯片介绍

通讯方式:SPI通讯

大小:8M(Byte)   (128块(Block),每块64K字节,每块16个扇区(Sector),每个扇区4K字节,每个扇区16页,每页256个              字节)

特点:Flash芯片内的数据只能由1变0,不能由0变1。

引脚:

CS:CS为片选管脚,低电平有效。上电之后,在执行一条新的指令之前,必须让/CS管脚先有一个下降沿。

DO(MISO):DO为串行数据输出引脚,在CLK(串行时钟)管脚的下降沿输出数据。

WP:WP为写保护管脚,有效电平为低电平。高电平可读可写,低电平仅仅可读。

DI(MOSI):DI为串行数据输入引脚,数据、地址和命令从DI引脚输入到芯片内部,在CLK(串行时钟)管脚的上升沿捕获捕获数据。

CLK(SLCK):CLK为串行时钟引脚。SPI时钟引脚,为输入输出提供时钟脉冲。

HOLD:HOLD为保持管脚,低电平有效。当CS为低电平,并且把HOLD拉低时,数据输出管脚将保持高阻态,并且会忽略数据输入管脚和时钟管脚上的信号。把HOLD管脚拉高,器件恢复正常工作。

VCC:电源2.7V~3.6V。

GND:地。

W25Q64内部框架图:

2、W25Q64Flash工作方式

2.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.2 W25Q64数据格式

W25Q64数据格式为数据长度8位大小,先发高位,再发低位。

2.3 W25Q64传输速度

W25Q64在标准模式下支持80M bit/s速度,快速模式下支持160M bit/s速度,高速模式下支持320M bit/s速度。

3、W25Q64控制和状态寄存器

通过对“读状态寄存器”指令读出的状态数据可以知道芯片存储器阵列是否可以写入或不可写,或是否处于写保护状态。通过“写状态寄存器”指令可以配置芯片写保护特征。

总线忙标志位(BUSY)

BUSY位是一个只读位,在状态寄存器中的S0位。当W25Q64在执行“页编程”、“扇区擦除”、“块区擦除”、“芯片擦除”以及“写状态寄存器”指令时,该位被硬件自动置1。这时候,除了“读状态寄存器”指令外的所有操作指令讲会被芯片忽略。当芯片执行完这些指令后,硬件会自动将该位清零,表示芯片器件可以接收其他的指令。

写保护位(WEL)

WEL位是一个只读位,在状态寄存器的S1位。在执行完“写使能”指令后,该位会被硬件自动置1。当芯片掉电后和执行“写禁能”、“页编程”、“扇区擦除”、“块区擦除”以及“芯片擦除”指令都会进入“写保护状态”。

块区保护位(BP2、BP1、BP0)

BP2、BP1、BP0这3位为可读可写位,分别在状态寄存器的S4、S3以及S2位。这3个位默认状态为0,即块区处于未保护状态。可以利用“写状态寄存器”指令对这几个位进行置1来达到块区保护的目的。块区保护状态为:没有保护、部分保护和全部保护状态。

注:当状态寄存器的SRP位为1或读写保护管脚(/WP)为低电平时,这3个位不可被更改。

底部和顶部块保护位(TB)

TB位是一个可读可写位,在状态寄存器的S5位,默认值为0。可以利用“写状态寄存器”指令对这个位进行置1或清零。当TB = 0时,表示保护位从顶部开始,当TB = 1时,表示保护位从底部开始。

注:当状态寄存器的SRP位为1或读写保护管脚(/WP)为低电平时,这个位不可被更改。

扇区/块保护(SEC)

SEC位为一个可读可写位,在状态寄存器的S6位,默认值为0。可以利用“写状态寄存器”指令对这个位进行置1或清零。当SEC = 0时,表示每次保护的区域大小为4K;当SEC = 1时,表示每次保护的区域大小为8K。

状态寄存器保护位(SRP0、SRP1)

SRP0和SRP1这2位为可读可写位,分别在状态寄存器的S7和S8(状态寄存器2)位。这两个位的默认值为0,可以利用“写状态寄存器”指令对这个位进行置1或清零。这2个位和读写保护管脚(/WP)决定了状态寄存器写保护的方式。状态寄存器写保护的方式有:软件保护,硬件保护、电源锁定或一次性可编程(OTP)保护。

快速SPI通讯使能(QE)

QE位为一个可读可写位,在状态寄存器的S9(状态寄存器2)位,默认值为0。以利用“写状态寄存器”指令对这个位进行置1或清零。当QE = 0时,W25Q54设置为标准速度模式或快速模式,保持管脚(/HOLE)和读写保护管脚(/WP)启用;当QE = 1时,W25Q54设置为高速模式,保存管脚(/HOLE)和读写保护管脚(/WP)被设置位IO2和IO3功能使用。

4、W25Q64器件标识

5、W25Q64工作原理

W25Q64操作原理

通过SPI接口,用标准的SPI协议发送相应指令给flash,然后flash根据命令进行各种相关操作。

W25Q64常用操作命令

指令名称

字节1(CODE)

字节2

字节3

字节4

字节5

字节6

写使能

06h

写禁能

04h

读状态寄存器1

05h

(S7~S0)

读状态寄存器2

35h

(S15~S8)

读数据

03h

A23~A16

A15~A8

A7~A0

D7~D0

直至读完所有

写状态寄存器

01h

(S7~S0)

(S15~S8)

页编程

02h

A23~A16

A15~A8

A7~A0

D7~D0

直至255个字节

块擦除(64K)

D8h

A23~A16

A15~A8

A7~A0

半块擦除(32K)

52h

A23~A16

A15~A8

A7~A0

扇区擦除(4K)

20h

A23~A16

A15~A8

A7~A0

芯片擦除

C7/60h

芯片掉电

B9h

释放掉电/器件ID

ABh

伪字节

伪字节

伪字节

ID7~ID0

制造/器件ID

90h

伪字节

伪字节

00h

MF7~MF0

ID7~ID0

JEDEC ID

9Fh

MF7~MF0

ID15~ID8

ID7~ID0

6、W25Q64常用指令工作时序

写使能(06H)

写禁止(04H)

读状态寄存器指令(05H)

写状态寄存器指令(01H)

读数据(03H)

页写(02H)

扇区擦除指令(20H)

块擦除指令(D8H)

芯片擦除指令(07H)

掉电指令(B9H)

读ID指令(90H)

写使能(06H)

写禁止(04H)

读状态寄存器指令(05H)

写状态寄存器指令(01H)

读数据(03H)

页写(02H)

扇区擦除指令(20H)

块擦除指令(D8H)

芯片擦除指令(07H)

掉电指令(B9H)

读ID指令(90H)

7、STM32模块编程思路

配置SPI模块功能管脚相应的GPIO管脚。

配置SPI模块工作方式。

使能SPI模块时钟。

根据SPI SPI主模式设置步骤设置SPI工作方式。

编写SPI读写字节函数。

根据目前器件的指令操作器件。

8、硬件原理图

代码资源下载:https://download.csdn.net/download/lalala098/10576508

w25q64 linux,W25Q64Flash芯片STM32操作相关推荐

  1. W25Q64Flash芯片STM32操作

    1.W25Q64Flash芯片介绍 通讯方式:SPI通讯 大小:8M(Byte)   (128块(Block),每块64K字节,每块16个扇区(Sector),每个扇区4K字节,每个扇区16页,每页2 ...

  2. Linux基础加实际操作演示

    Linux 一.操作系统简介 计算机是一台机器,它按照用户的要求接收信息.存储数据.处理数据,然后再将处理结果输出(文字.图片.音频.视频等).计算机由硬件和软件组成. 操作系统(Operating ...

  3. linux系统运行flash3d,在Linux上运行STM32,快来试试!

    原标题:在Linux上运行STM32,快来试试! STM32MP1多核微处理器,带有650Mhz主频的cortex-A7双核以及一个主频为209Mhz的cortex-M4核,即片内拥有三核.很多STM ...

  4. Linux之用户组相关操作 groupadd groupdel

    Linux之用户组相关操作  groupadd  groupdel 1. 创建用户组 命令 说明 groupadd 创建(添加)用户组 创建用户组效果图: [grep是搜索功能,详情博文:https: ...

  5. Linux之用户相关操作

    Linux之用户相关操作 1. 创建用户  [创建后会立即让设置密码] 命令 说明 useradd 创建(添加)用户 useradd命令选项: 选项 说明 -m 自动创建用户主目录,主目录的名字就是用 ...

  6. linux常用基础命令操作收集

    linux常用基础命令操作收集,以下命令基于CentOs6.x 1.日常操作命令 **查看当前所在的工作目录 pwd **查看当前系统的时间 date **查看有谁在线(哪些人登陆到了服务器) who ...

  7. Linux下对文件操作时出现乱码怎么办?

    Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助. 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中 ...

  8. linux脚本日期时间,Linux 日期和时间操作详解

    Linux 日期和时间操作详解 发布时间:2012-11-27 15:10:07   作者:佚名   我要评论 Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Cl ...

  9. Linux查看版本当前操作系统内核信息

    1. # uname -a (Linux查看版本当前操作系统内核信息) 输出 Linux xxx 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 ...

最新文章

  1. 弹框--更新下载--安装
  2. TensorFlow在Anaconda环境下创建
  3. 作者:刘岩(1982-),男,泰康保险集团股份有限公司数据信息中心高级工程师、高级主管,中国计算机学会会员...
  4. php composer使用过程
  5. node和npm是什么_什么是npm? 面向初学者的Node Package Manager教程
  6. 读取设置config.ini配置
  7. 在程序里面(服务器端)调用Winrar压缩文件的方法?另寻求一条语句转换的方法。vb.net到C#。...
  8. Python入门1_数字表达式
  9. plsql配置相关的问题
  10. openpyxl python 框线_Openpyxl对单元格应用边框
  11. simulink与gt联合仿真问题求解
  12. 新一代天气雷达文件三维可视化
  13. 按关键字采集淘特商品列表API接口H5
  14. 贯入用计算机怎样换算,标准贯入试验应用和其杆径换算探究.doc
  15. M资源,每个进程最多N个资源,最多几个进程不会发生死锁
  16. 【独立站运营】在线聊天机器人为何能成为电商行业的大趋势?
  17. Redis基本事务的操作
  18. RxJava基本实现
  19. Python3网络爬虫教程8——有道在线翻译项目(JS加密)
  20. Top 50 Most Popular APIs on RapidAPI (2018)

热门文章

  1. pivot unpivot_静态和动态SQL Pivot和Unpivot关系运算符概述
  2. php执行sql内存溢出_SQL Server 2017:SQL排序,溢出,内存和自适应内存授予反馈
  3. 20165205 2017-2018-2 《Java程序设计》实验三 敏捷开发与XP实践
  4. struts中action与页面之间的传值方式
  5. iOS利用HealthKit框架从健康app中获取步数信息
  6. Java 读取txt文件,读取结果保存到数据库
  7. Android程序捕获未处理异常,处理与第三方方法冲突时的异常传递
  8. C#调用VC DLL 复杂结构 解决方法
  9. Web常用字體-Font-Family
  10. docker ubuntu16安装