一文讲透SPI总线和IIC总线通信4

下面将对w25q128的常用操作方式进行介绍。
1、只发送指令——写使能、写失能
写使能是指状态寄存器中的wel位置1(发送写使能指令后硬件自动设置),失能就是清零操作。在发送页写,扇区擦除,块擦除,片擦除,写状态寄存器,擦写安全寄存器指令之前,必须先等待wel 位置1 ,这些操作完成后,wel会自动硬件清零。写失能是将状态寄存器中的wel软件清零,写失能这个操作很少用到,大多数情况都是硬件自动完成。
根据spi的操作时序,将指令(06h或04h)通过di(mosi)发送给w25q128,期间do(miso)处于高阻状态,时序图如图6-11和图6-12所示。
图6-13 写使能时序
图6-14 写失能时序
2、发送指令,返回数据——读状态寄存器
读状态寄存器指令允许读8位状态寄存器位。读状态寄存指令在任何时间都可使用,可以用05h/35h/15h分别读取w25q128的三个状态寄存器。实际上用的最多的只有05h读取状态寄存器1的第0位(busy位),用来查看相应指令周期是否结束,芯片是否可以接收新的指令。
根据spi的操作时序,将指令05h通过di发送,而后通过do读回状态寄存器的值,时序图如图6-15所示。注意通常我们只读一个字节,时序图后续字节为芯片备用扩展的。
图6-15 读状态寄存器时序图
3、发送指令+数据——写状态寄存器
写状态寄存器的作用主要实现对flash某些区域的数据或者状态保护,一旦写入保护状态,在状态解除之前,这块区域是禁止写入和擦除的。这部分在本教程中没有应用,有兴趣的读者可以根据时序图和手册资料了解一下,时序图如图6-16所示。
图6-16 写状态寄存器时序图
4、读数据
读数据指令允许从存储器读一个字节和连续多个字节。
首先要确认busy位为0,然后根据spi的操作时序,首先写入指令代码03h,而后紧跟3个字节的地址。当w25q128收到地址后,会将相应地址处的数据根据spi时序输出来;如果连续读多个字节,那每经过8个时钟周期地址自动加1,并且输出相应数据,一直到cs拉高,时序图如图6-17所示。
图6-17 读数据时序图
5、写入数据(页编程)
w25q128一次写入的数据只能小于等于256字节,并且不能一次性跨页写入。当遇到跨页时,应先写满一页,等待busy位为0,再次往下一页写。(如果写满一页继续往下写则会跳到缓存区的页首位置开始写,之前数据会被覆盖)
在写入数据之前,该页必须被擦除过,然后根据写入地址和写入的字节数计算是否跨页以及页数。根据spi的操作时序,首先通过写使能将wel置1,然后写入指令代码02h,而后紧跟着3个字节的地址,而后接着发送要存储的数据,时序图如图6-18所示。
图6-18 页编程时序图
写入数据完毕后,w25q128将数据从缓存搬移到非易失区所消耗的时间要了解一下,在手册的84页有介绍,大概是(30+(x-1)*2.5)us ~ (50+(x-1)*12) us之间(x为写入的字节),搬移完成后,wel位会自动清零,busy自动清零。
6、扇区擦除、块擦除
可以使用20h、52h和d8h分别对扇区擦除、32k块擦除和64k块擦除。根据spi的操作时序,在写入擦除指令之前首先通过写使能将wel置1,然后写入指令代码20h/52h/d8h中的一个,而后紧跟着3个字节的擦除首地址。
地址发送完毕后,必须将cs拉高,擦除指令才开始执行,并且需要一定的擦除时间,在这个时间内,只能读状态寄存器,其他操作均不能进行。扇区、32k块和64k的擦除典型时间分别是100ms、120ms和150ms,最大时间分别是400ms、1.6s、2s。当擦除完成,wel和busy位自动清零,就可以再次接收新的操作指令,时序图如图6-19所示。
图6-19 扇区和块擦除时序图
7、全片擦除
可以使用c7h/60h指令对整片进行擦除操作。根据spi的操作时序,在写入擦除指令之前首先通过写使能将wel置1,然后写入指令代码c7h或者60h,发送完毕拉高cs后,擦除指令开始执行。
整片擦除过程中,只能读状态寄存器,其他操作均不能进行。整片擦除的典型时间是40秒,最大时间是200秒。当擦除完成后,wel和busy位自动清零,就可以再次接收新的操作指令,时序图如图6-20所示。
图6-20 全片擦除时序图
接下来根据w25q128的时序编写驱动程序,该驱动文件可以驱动w25qxx系列的flash存储芯片,不同型号的id不同,w25qxx初始化时会通过判断芯片id来识别是否通信成功。
6.9.3 串口控制flash读写实验由于flash与eeprom实现的功能类似,本节通过改写串口发送指令控制eeprom读写数据的例程,设计了串口发送指令控制flash读写。帮助大家更好的体会串口实用例程以及flash读写流程。
flash读数据指令格式:“f-read 地址 字节长度”,其中地址范围为0~1610241024,e2read、地址、字节长度之间由空格隔开,比如从地址1开始读取5字节数据:f-read 1 5。单片机收到指令后执行多字节读操作,通过串口助手返回读出的数据。
flash写数据指令格式:“f-write 地址 数据”,地址范围为0~1610241024,f-write、地址、数据之间同样由空格隔开,比如从地址1开始写入hello:f-write 1 hello。单片机收到指令后执行多字节写操作,写入成功后通过串口助手返回“f-write done.”
如果发送指令格式错误,返回“bad parameter.”,如果发送指令错误,将返回发送的数据。由于程序中设定的串口接收和发送缓冲区最大为256字节,因此该实验单次读取或者写入的字节数应小于256字节。
106.10 逻辑分析仪测试spi信号
当进行spi通信出现异常时,可以通过逻辑分析仪进行通信时序上的问题查找,如图6-18所示。从图上可以看出sck空闲时是高电平,即cpol=1;从clk的跳沿箭头上可以看出,是后沿读取数据,即cpha=1。数据分析可以通过miso和mosi解析后的数据判断出。通过分析仪的数据解析功能,可以直观看到stm32与flash之间的通信数据,从而进一步确定问题所在。
图6-21 kingst la5016逻辑分析仪解析spi数据

5G网络支持后,苹果iPhone 12续航将调整
华为mate9和华为p10哪个好?华为mate9和华为p10哪个更值得买?
长久不用的硬盘如何保存
运放电路的稳定性受哪种输入电容的影响
5G的产生并不意味着4G就会被淘汰
一文讲透SPI总线和IIC总线通信4
集成电路分为哪几类 集成电路分类介绍
电阻在电路中有哪些作用
资产管理之医院rfid资产管理解决方案的介绍
对话雪湖科技王韵——FPGA已经到了火山口
关于5G频谱分配的这些细节你知道吗快来了解吧
单极隔离式功率因数校正(PFC)变换器
军民两用成无人机新趋势 U650填补我国研发空白
18位Sigma-Delta ADC ZSSC1856的特性优势及与应用电路分析
奥比中光:保障3D刷脸支付安全,助推商用落地
脑机接口领域的新突破,可帮助丧失说话能力的人恢复言语
大众目标在2023年电动汽车产量超过特斯拉
超级快充加持!华为P10宣传图颜值爆表
0-75mV/0-100mV转rs485信号采集卡模块
智能遥控器生产及解决方案提供商辰奕智能成功上市