SPIFLASH操作(通过波形分析SPI)

1.背景

前面刚刚分析了EEPROM,那就顺带把SPIFLASH写了吧,器件性质,SPI的通信过程我就不过多分析了,网上讲的都非常详细了。这次我以W25Q32来介绍了

2.读取器件信息

dc910137f82d404e8ec1e93b94d414dc.png

d540d7e0cb5b45da87220ac08ef80d67.png对于FLASH来说读取器件地址是0x90,我们先发送0x90

33dc5d1dd32f4133a3eccee6b5b25cc0.png

之后的三个数据是没用的。

50bddc333978417996fc4f64b5e7c8e4.png

而最后两位是有用信息

其中EF代表制造商是华邦,15代表容量32Mb

644d13345a3140759cf2fd554537aed1.png

5c491f4484da4303ac4865811debaf73.png

3.擦除扇区

芯片一共有三种擦除方式:擦除扇区,擦整块,擦两块和全片擦除,而flash最明显的特点就是在写入前必须先擦除对应扇区。下面我就介绍擦除扇区,也是最常用的擦除,其他几种擦除也大同小异。

这是实际擦除扇区的波形

acc7fcc9706a4cd980277d1d6a53d685.png

想进行擦除先发送0x20,表示擦除扇区

751c28917364431aa4b0513879ddf491.png

edc39bf601094d97a255022b1dc57308.png

后面是三个地址。

ba1fec92b4c14c7990a18cc1a2cc99c3.png

这里地址是怎么分配的,和芯片内部原理有关系,我就过多赘述了,大家想找可以去网上找。

4.擦除扇区等待

与EEPROM一样擦除扇区也是需要时间的,同样有两种方法,这里我也都介绍一下

4.1方法一

读取寄存器

在flash芯片内部有一个状态寄存器,其中s0是判忙寄存器,当芯片处于写入和读取未完成时这一位会变1。

58dbde51c72c44609fd55063bb1c2365.png

向芯片发送0x05即可读取

23e5fdeb6bef4dbe805ff7a4a637dd14.png

实际波形如下

d3fecf7af1e04f00bcdc58a367de974d.png

4.2方法二

等!

7dea40d136e44b48aaa5dc2477766d7a.png

数据手册上给出的擦除一个扇区的典型时间是45ms,最长是400ms

b625157e91f14d93b887f696a7c95c2a.png

这里我等待了50ms

4.3总结

我在实际使用的时候是两种方案结合,即在等待50ms后再读取一次状态寄存器如果芯片不忙再进行下一步。

5.扇区写入

在写入前我还是重申一下请一定保证已经擦除扇区了,这时flash的特性决定的

fb3e567bac404444977a4740dc502fe5.png

首先我们需要先进行写入使能即写入0x06

29f6b430e32b4326869199c004286118.png

之后是扇区写入了

a56deac53fbf48de979d7f3c8cd32197.png

07641c58f4a54f50a4c599acdd536546.png

先发送0x02写入命令,然后是三位地址,后面接数据。这里不要写超了,flash内部如一本书一样,每本书上由很多页纸组成,当写入数据量超过一页纸就会又从纸顶部开始写起,这样数据就会产生覆盖的情况。这里我就不再过多赘述了,想了解的还是请上网搜索。

最后注意一下,扇区写入后也需要时间

1431d24cc3a24c6da69aca3484a4af4d.png

手册上给出的时间是0.4ms到3ms

我还是建议延迟加读状态寄存器结合来判忙

6.读取

184b7cec6f56429e9e2ec5a460edeeee.png

0a8af9387c9440fd967bc0c2fa37eee2.png

读取和写入的过程差不多,不过不用写入使能了。

先发送0x03,然后三位地址,后面就是从机发送的数据

7.总结

总的来说spiflash的操作比eeprom复杂的多,不过spiflash的用途比eeprom用的多的多,从嵌入式到电脑都有应用,在高端的场景还有qspiflash甚至直接挂载到总线上,还是非常建议大家充分理解上述的过程。

### SPI 协议波形与时序图生成 #### 什么是SPI协议? SPI(Serial Peripheral Interface)是一种同步串行通信接口,通常用于短距离通信,主要应用在微控制器和外围设备之间。它采用主从模式工作,支持全双工数据传输[^2]。 #### SPI波形与时序图的特点 SPI协议的核心特点在于其时钟信号(SCLK)、主输出从输入(MOSI)、主输入从输出(MISO),以及片选信号(SS)。这些信号共同决定了SPI的数据交换过程。具体来说: - **SCLK (Clock)**:由主机产生的时钟信号,控制数据的发送与接收速率。 - **MOSI (Master Out Slave In)**:主机到从机的数据通道。 - **MISO (Master In Slave Out)**:从机到主机的数据通道。 - **SS/CS (Slave Select / Chip Select)**:激活特定从设备的选择信号。 为了清晰展示SPI的工作机制,可以借助时序图来表示各个信号之间的关系及其变化规律[^1]。 #### 使用WaveDrom绘制SPI波形 WaveDrom是一个非常强大的工具,能够快速创建复杂的数字逻辑波形图表。以下是利用WaveDrom生成简单SPI波形的方法: ```json { "signal": [ { "name": "SCLK", "wave": "p......P......" }, { "name": "SS", "wave": "0...........1." }, { "name": "MOSI", "wave": "x.34..56..x.", "data":["Data Bit 0","Data Bit 1","Data Bit 2"]}, { "name": "MISO", "wave": "x.ab..cd..x.", "data":["Acknowledge 0","Acknowledge 1"]} ] } ``` 上述JSON配置定义了一个基本的SPI交互场景,其中包含了四个关键信号线的变化情况。通过访问WaveDrom官方网站或者集成插件至VS Code环境内运行此脚本即可得到直观的结果[^4]。 #### FPGA环境下模拟SPI操作 如果是在FPGA项目里研究SPI,则可以通过Quartus Prime软件完成仿真实验。一种常见做法就是构建Testbench测试平台,在这里设定好各种激励条件之后观察目标模块的行为表现;另一种则是运用内置Vector Waveform File(VWF)功能直接描绘期望看到的理想化曲线形态[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值