SPI实例之FLASH芯的使用;

本实例旨在梳理W25Q128BV基本使用流程,不是涵盖其全功能,也不针对任何平台,具有通用性!

大家都知道芯片数据手册太多且太繁琐,不涉及特殊需求时而我们实际使用的仅仅是其中很小的一部分功能;

现在以W25Q128BV为例进行分析,可推广至其他芯片;


第一步:硬件初始化,即init;

这里的硬件初始化是指初始化芯片W25Q128BV,而不是MCU的GPIO初始化,MCU对应W25Q128BV  GPIO初始化应该在此之前;

W25Q128BV中的初始化为reset指令,分别为0x66和0x99指令,通过SPI将这两个指令发送给W25Q128BV  即可;

好的初始化一般含有初始化反馈,通过读取状态指令可得到该结果,读取状态指令为0x05,通过SPI将这个指令发送给W25Q128BV  即可,返回值中S0位进行判断,若为1即为BUSY,若为0即为空闲;


第二步:读设备号

W25Q128BV中的读设备号指令,分别为0x90指令,通过SPI将这个指令和地址0x000000发送给W25Q128BV ,返回的数据即为ID,且大端在前;


第三步:擦除块

W25Q128BV中的擦除扇区的指令为0x20,通过SPI将这个指令和需要擦除扇区的24bit地址0xXXXXXX发送给W25Q128BV即可;

擦除是否成功,擦除过程中可能失败,失败的表现为超时,与第一步中相同还是通过状态指令得到结果,读取状态指令为0x05,通过SPI将这个指令发送给W25Q128BV  即可,返回值中S0位进行判断,若为1即为BUSY,若为0即为空闲,在超时时间内完成擦除返回成功,否则返回超时;


第四步:写数据

W25Q128BV写数据时必须先开写使能0x06,再写指令,然后写数据;

写使能指令为0x06,通过SPI将这个指令发送给W25Q128BV即可;

使能是否成功,使能过程中可能失败,失败的表现为超时,与第一步中相同还是通过状态指令得到结果,读取状态指令为0x05,通过SPI将这个指令发送给W25Q128BV  即可,返回值中S0位进行判断,若为1即为BUSY,若为0即为空闲,在超时时间内完成擦除返回成功,否则返回超时;


写扇区指令为0x2,,通过SPI将这个指令和需要写的目标扇区的24bit地址0xXXXXXX发送给W25Q128BV即可;

写数据,通过SPI将数组发送给W25Q128BV即可;

SPI在数据传输时也可能发生错误,这个过程中发生错误也可选择性进行上报;


写数据是否成功?写数据过程中可能失败,失败的表现为超时,与第一步中相同还是通过状态指令得到结果,读取状态指令为0x05,通过SPI将这个指令发送给W25Q128BV  即可,返回值中S0位进行判断,若为1即为BUSY,若为0即为空闲,在超时时间内完成擦除返回成功,否则返回超时;


补充:特别注意在写扇区的时候,可能数据的大小大于一个扇区或者数据的地址跨过两个扇区的情况,需进行处理!



第五步

读数据



第六步

对比数据



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lh2008xp/article/details/71602512
个人分类: STM32 flash
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

SPI实例之FLASH芯的使用;

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭