STM32单片机入门学习——第37节: [11-2] W25Q64简介
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!
本文写于:2025.04.14
STM32开发板学习——第37节: [11-2] W25Q64简介
- 前言
- 开发板说明
- 引用
- 解答和科普
- 一、W25Q64简介
- 问题
- 总结
前言
本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!
开发板说明
本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
原理图如下
1、开发板原理图
2、STM32F103C6和51对比
3、STM32F103C6核心板
视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。
下图是实物图
引用
【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
数据手册
解答和科普
一、W25Q64简介
在显示某个汉字前,先读取芯片查询字库,再在显示屏上显示对应的点阵数据,这样就能让显示屏任意显示中文了。
固件程序存储:这个就相当于直接把程序文件下载到外挂芯片里,需要执行程序的时候,直接读取外挂芯片的程序文件来执行,这就是XIP,就地执行,比如电脑里的BIOS固件,就可以存储在这个W25Q系列的芯片里。
时钟频率非常快,所以即使不加延时,这个GPIO的翻转频率,也不可能达到80Mhz,所以可以放心使用。可以同时发送和接收,这就是双重SPI,还有四重SPI。大概并行传输的意思。
24位地址(三位字节),最大分频16MB,256可进入4字节地址。
CS对应之前讲的SPI的名称就是SS,低电平有效;CLK(SCK),SPI时钟;DI(MOSI),SPI主机输出从机输入,DO(MISO),SPI主机输入从机输出,WP写保护(低电平有效),HOLD,数据保持(低电平有效)。如果你不想终止总线,又想操作其他器件,这样芯片就HOLD住了,芯片释放总线,但是芯片时序不会终止,它会记住当前的状态。当你操作完其他器件时,可以回来,HOLD置回高电平,然后继续HOLD之前的时序。相当于SPI总线进了一次中断,并且在中断里还可以用SPI干别的事情,这就是HOLD的功能。
双重SPI和四重SPI,所以会有IO0,1,2,3.
首先,这这个矩形空间里,是所有的存储器,存储区以字节为单位,每个字节都有唯一的地址,地址宽度是24位3个字节,所以可以看到,左下角,第一个字节,它的地址是000000h,h代表16进制,之后的空间,地址依次自增,直到最后一个字节,地址是7FFFFFh,因为24位地址,最大寻址范围是16MB,我们这个芯片只有8MB,所以地址空间,只用了一半,8MB的空间,排到最后一个字节,就是7FFFFF,在这个空间里,以64KB为一个基本单元,把它划分为若干的快Block,从前往后,依次是快0,快1,块2,等;一直分到最后一块,那整块蛋糕是8MB,以64KB为一块进行划分,最后分得的快数,就是8MB/64KB=128快,
快0,00 00 00到00 FF FF,快31从1F 00 00 到1F FF FF,在每一块,它的地址变换范围就是低位的2个字节,每个块的起始是 xx 00 00,结束是xx FF FF,这时快内地址的变化规律;
左边还有对每一块进行更细的划分,分为多个扇区Sector,这里的虚线指向了右边的各个块,也就是告诉,每一块里面都是这个样子的。
每个块的起始是 xx 00 00,结束是xx FF FF,在一块里,再以4KB为一个单元,进行切分,切得16份,所以每块里,可以分为扇区0,一直到扇区15,每个扇区的起始是 xx x0 00,结束是xx xF FF,这就是对每一块,再细分为16个扇区的分配方式。在写入数据的时候还有更细的划分,这就是页Page,页是对整个存储空间划分的,当然你也可以看做,在扇区里,在进行划分,都是一样的,页的大小是256个字节,一个扇区是4KB,以256个字节划分,4KB/256=16页,每个页的起始是 xx xx 00,结束是xx xx FF,这就是存储器的地址划分。
左下角,SPI控制逻辑,也就是芯片内部进行地址锁存、数据读写等操作,都可以由控制逻辑自动完成,这个不需要我们操心,控制逻辑就是整个芯片的管理员,我们有什么事,只需要告诉管理员就行了。 左边是SPI的通信引脚和主控芯片相连,主控芯片通过SPI协议,把指令和数据发送给控制逻辑,控制逻辑就会自动去操作内部电路,来完成我们想要的功能,控制逻辑上面有个状态寄存器,这个状态寄存器比较重要的,比如芯片是否处于忙状态,是否写使能,是否写保护,都可以体现着这个状态寄存器。上面是写控制逻辑和外部的WP引脚相连,显然,这个是配合WP引脚实现硬件写保护的,右边是一个高电压生成器,是配合Flash进行编程的,因为Flash是掉电不丢失的,如何实现掉电不丢失,所有要实现掉电不丢失,就要我们的存储器里,产生一些刻骨铭心的变化,用烧坏的LED表示1,没烧坏的LED表示0,然后再断电,烧坏的LED还是烧坏的,有没有点,它都是坏的,所以是掉电不丢失。所以这种掉电不丢失的存储器,一般都需要一个高电压,这就不需要外接了。地址锁存器和计数器,就是用来指定地址的,通过SPI发过来3个字节地址,因为一页是256字节,所以一页内的字节地址,就取决于最低一个字节,而高位的两个字节,就是对应的页地址,所以在这里,我们发送3个字节地址,前两个字节,会进到这个页地址锁存计数器里,最后一个字节,会进到这个字节地址锁存寄计数器里,然后页地址,通过这个写保护和行解码,来选择我要操作那一页,字节地址,通过这个列解码和256字节页缓存,来指定字节的读写操作,那又因为这个地址锁存,都是有一个计数器的,所以这个地址指针,在读写之后,可以自动加1,这样就很容易实现,从指定地址开始,连续写多个字节的目的了,那最后,右边这里,有256字节的页缓存区,它其实是一个256字节的RAM存储器,数据读写,就是通过这个RAM缓存区来进行的,写入数据,会先放到缓存区里,然后在时序结束后,芯片再将缓存区的数据复制到对应的Flash里,进行永久保存。为啥要有缓存区,直接往Flash写不好吗,这是因为,SPI写入频率是非常高的,而Flash的写入,由于需要掉电不丢失,就比较慢,所以就是,你写入的数据现在页缓存区里存着,缓存区是RAM,它的速度非常快,能跟上SPI的速度,但是这个缓存区只有256个字节,所以写入的时序有个限制条件,就是写入的一个时序,连续写入的数据量,不能超过256个字节,等你写完了,芯片再慢慢把数据从缓存区转移到Flash存储器里,那我数据从缓存区转到Flash,需要一定的时间,所以在写入时序结束后,芯片会进入一段忙的状态,这里会有一条线,通往状态寄存器,给状态寄存器的BUSY位置1,表示芯片当前正在搬砖,很忙,在忙的时候,芯片就不会响应新的读写时序了,这就是写入的执行流程。读取只看一下状态,所以还是非常快。
这时因为Flash,作为一种掉电不丢失的存储器,为了保证掉电不丢失这个特性,同时还要保证存储容量足够大,成本足够低,所以,Flash存储器会在其他地方,比如操作的便捷性等做出妥协和让步。Flash的写入和读取并不像RAM那样简单直接,RAM是。指哪打哪。想在哪写就在哪写。想写多少就写多少,可以覆盖写入的,比如原来RAM里有个数据0xAA,之后我再写入一个新的数据0x55,那RAM的数据就变为0x55.
每个数据位只能由1改写为0,不能由0改写为1:如1010 1010 覆盖写入0101 0101 变为0x00.
所以写入前先擦除,所有位变为1,然后就可以正确的写了。要想返回,必须先擦除。0Xff.
擦除必须按最小擦除单元进行,必须一片擦除,不能一个字节擦除,可以选择,按快擦除,扇区擦除,最小的单元,就是一个扇区4KB;需要优化设计。
连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入,因为数据缓存区的存在256个字节。要注意,这个地址范围不能跨越页的边沿。
写入操作结束后,芯片进入忙状态,不响应新的读写操作,可以看忙状态寄存器的标志位,擦除中也是忙状态。
读取操作时:
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取。
问题
总结
本节课主要是了解了W25Q64简介,是先发送指令,再进行操作,还有Flash分为块、扇区、页,还有写入的规则。