W25Q128读写实验

本文详细介绍了如何使用STM32通过SPI接口与W25Q128串行闪存进行数据读写操作,包括SPI通信的基本原理、W25Q128的特性、擦写规则以及相关指令。通过创建bsp_w25qxx.h和bsp_w25qxx.c文件,实现了读写函数,包括整片和扇区擦除、写使能等。此外,还提供了读取芯片ID和状态寄存器的函数,以及主函数中的读写示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多交流欢迎关注作者抖音号:81849645041

目的

        熟悉W25Q128串行FLASH的特性和操作指令。掌握通过SPI通讯读写W25Q128数据。

原理

        本章是结合SPI通讯对串行FLASH的读写,通过SPI发送指令向W25Q128中读写数据。SPI相关概念不在讲解,重点介绍W25Q128串行FLASH。

        W25Q128是华邦公司推出的一款SPI 接口的NOR Flash芯片,其存储空间为128Mbit,相当于16M 字节。

        W25Q128 将 16M 的容量分为 256 个块(Block),每个块大小为 64K 字节,每个块又分为16 个扇区(Sector),每个扇区 4K 个字节。W25Q128 的最小擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25Q128 开辟一个至少 4K 的缓存区,这样对 SRAM 要求比较高,要求芯片必须有 4K 以上 SRAM 才能很好的操作。

        W25Q128可以支持SPI的模式0和模式3,也就是CPOL=0/CPHA=0和CPOL=1/CPHA=1这两种模式。

        写入数据时,需要注意以下两个重要问题:

        ①、Flash 写入数据时和 EEPROM 类似,不能跨页写入,一次最多写入一页,W25Q128的一页是 256 字节。写入数据一旦跨页,必须在写满上一页的时候,等待 Flash 将数据从缓存搬移到非易失区,重新再次往里写。

        ②、Flash 有一个特点,就是可以将 1 写成 0,但是不能将 0 写成 1,要想将 0 写成 1,必须进行擦除操作。因此通常要改写某部分空间的数据,必须首先进行一定物理存储空间擦除,最小的擦除空间,通常称之为扇区,扇区擦除就是将这整个扇区每个字节全部变成 0xFF。

        每款 Flash 的扇区大小不一定相同,W25Q128 的一个扇区是 4096 字节。为了提高擦除效率,使用不同的擦除指令还可以一次性进行 32K(8 个扇区)、64K(16 个扇区)以及整片擦除。

        W25Q128芯片自定义了很多指令,我们通过控制 STM32 利用 SPI 总线向 FLASH 芯片发送指令,FLASH芯片收到后就会执行相应的操作。

        而这些指令,对主机端(STM32)来说,只是它遵守最基本的 SPI 通讯协议发送出的数 据,但在设备端(FLASH 芯片)把这些数据解释成不同的意义,所以才成为指令。查看FLASH 芯片的数据手册《W25Q128》,可了解各种它定义的各种指令的功能及指令格式。

        该表中的第一列为指令名,第二列为指令编码,第三至第 N 列的具体内容根据指令的不同而有不同的含义。其中带括号的字节参数,方向为 FLASH 向主机传输,即命令响应,不带括号的则为主机向 FLASH 传输。表中“A0~A23”指 FLASH 芯片内部存储器组织的地址;“M0~M7”为厂商号(MANUFACTURER ID);“ID0-ID15”为FLASH 芯片的 ID; “dummy”指该处可为任意数据;“D0~D7”为 FLASH 内部存储矩阵的内容。

        在 FLSAH 芯片内部,存储有固定的厂商编号(M7-M0)和不同类型 FLASH 芯片独有的编号(ID15-ID0),见表 :

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奚海蛟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值