数码之家

 找回密码
 立即注册
搜索
查看: 6813|回复: 9

[STM] 用串口对W25Q Flash芯片进行写入操作

[复制链接]
发表于 2021-6-24 17:12:20 | 显示全部楼层 |阅读模式
前几天制作完成的小音频功放,https://www.mydigit.cn/forum.php?mod=viewthread&tid=261567,由于这小功放是自己用的,根据自己的实际及操作习惯搞的,没有通用性,所以没提供电路图及代码。这个制作显示部份是有底图显示的,且BT401蓝牙模块输出的汉字编码是Unicode,这个制作的字库是用以前制作的备份,用编程器写入W25Q128的,小功放制作需在W25Q128里增加9张图的数据及Unicode转换GB的表,由于STM32F030的空间太少,如用以前本人制作字库贴的方法通过这板多次写入太麻烦了,也不方便日后换图片,所以采用串口发送数据方法对W25Q128进行写入操作。编写了对应的小软件及对应的单片机子程序,所以本贴是这小功放的额外的东西,不是专门所为的,所以程序只编写比较简单,只编写数据处理及串口数据发送部份,没有进行错误处理、超时处理以及对数据对错处理,也没有写入过程数据变化的进度条显示,且在使用及测试中发现一次无故串口数据发送错误,重启对应的软硬件才正常,所以本小软件只能凑合使用,如出现写入错误,多操作几次。本贴是把小功放制作的写入部份进行整理出来,独立写一个贴,只是提供个方法仅参考。

以下是本贴主要内容,用串口对W25Q进行写入操作,使用STM32F030实验板+W25Q32+0.96寸OLED,以写入OLED所用的字库为例,说明一下这使用方法及简单原理。
硬件的接法,如下图,W25Q芯片接stm32f030的硬件SPI接口。OLED及按钮开关的作用用于验证写入完成后,按一下开关,OLED显示的内容是否正确,如正确表示写入正确。2个LED灯是状态灯,接PA8的是写入操作显示灯,常亮表示擦写空间中,闪表示写入数据中,PA9灯是每0.5S闪,表示本电路工作中。如不需要验证及显示以上的都可以不接OLED等。电脑串口接实验板的PA2PA3。

以下实验板接线。DIP8转换板上的是W25Q32。


本小软件的数据格式是有要求的,只能是十六进制的字符及逗号及回车,不能有其它字符,也不要有空格,不能有注释,如有就会出错,如下图,字库文件采用http://bbs.mydigit.cn/read.php?tid=2352395这里的方式,


以下为电脑小软件操作,设置对应的串口号,输入需要写入W25Q的地址,这个需要是6位十六进制写法,由于这次写入是OLED字库,GB字库地址是0x000000,ASII地址是0x048000,先写入GB,导入处理好的字库编码文件,

然后按数据写入键,就等软件处理好数据后,发送擦写空间命令,擦写完成后,就发送编码数据,发送完成就结束写入,由于串口是9600,所以一秒大约发送1000个数据,由于GB字库数据接近300K,所以需等待大约6分钟才完成写入,


接住再写入ASII数据,就完成这个字库写入操作了。


以下为实验板LED显示情况。左上角的LED是接PA7的,接电后一直闪。


中间那个LED擦写是常亮,数据写入时闪,平时为灭。


写入完成后,按一下开关,OLED显示如下唐诗文字,表示写入正确。


以上采用写入字库的方式演示写入过程,这个是顺序写入,可以写各种数据进入W25Q的芯片里,由于速度不快,不建议写入过大的数据。

最下面的压缩包是本贴的文件,里面有电脑端程序,单片机程序及整理好的编码。简单说下工作原理,电路是用stm32f030硬件SPI接W25Q,用串口2发送数据,电脑软件发送写入命令时,先整理数据后发送擦写命令,擦写命令里包括11位引导码+6位要发送的数据量值+8位16进制擦写的地址,单片机接收到命令就擦写对应的空间,擦完后,发送sendok命令给电脑,电脑就直接发送需写入的数据直到结束。

对于单片机方面的程序,详细看代码,就是W25Q的SPI基础子程序,增加一个写入一个数据的子程序void W25X_Flash_Write_one(uint32_t WriteAddr,uint8_t datavol)及根据地址及擦除数量的擦写4K空间程序uint8_t W25X_Flash_Erase_rsdattp(uint32_t WriteAddr,uint32_t datavol)。

在单片机main主程序内有一个16进转10进制的子程序uint8_t jianhuan16to10(uint8_t indat),用于计算电脑发过来的地址等数据,及有个对电脑发过来的数据进行处理void RS2W25write(),这两个程序是对串口收到的引导数据进行处理,计算出来擦写的地址及总数据量,进行擦写操作,并触发写入控制值,允许进行数据写入操作,擦写操作完成后,发送sendok命令给电脑,状态就改为写入数据状态,直至写入完成。写入程序主要是串口中断子程序中,就2部份,上部份是用来接收引导码及判断命令,下部分是用来数据写入操作的。

对W25Q写入部份是小功放内嵌小程序,所以程序做得简单,只有数据处理及发送,能用就行,单片机程序是把小功放程序分离出来的,本贴的程序已测试过几次,能用,电脑程序是用易语言编写的,安全软件可能认为是病毒文件,仅供参考。


单片机部份代码不多,可以直接嵌入制作中,在写入及擦写中不能有对W25Q的另外操作,如有会出错。如是嵌入制作写入状态显示可以写丰富些,以下的图是针对小功放操作的图。






GB2312单片机字库的制作:https://www.mydigit.cn/thread-310871-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 4家元 +244 收起 理由
家睦 + 200 優秀文章
jf201006 + 20 謝謝分享
hfsp + 20 謝謝分享
听雨亭 + 4

查看全部打赏

发表于 2021-6-24 17:33:46 来自手机浏览器 | 显示全部楼层
这个可以有…
回复 支持 反对

使用道具 举报

发表于 2021-6-24 19:08:25 | 显示全部楼层
W25Q128以前玩过,用stm32F0硬件SPI控制, 实时录音和回放(ADC占用1个I2S口), 反正就是2个spi口数据对倒,96k能存储几十秒, 44.1k的话能存1分半钟
回复 支持 反对

使用道具 举报

发表于 2021-6-29 00:12:13 来自手机浏览器 | 显示全部楼层
很实用 不错
回复 支持 反对

使用道具 举报

发表于 2022-5-9 04:20:59 | 显示全部楼层
编程器不错
回复 支持 反对

使用道具 举报

发表于 2022-5-10 11:18:16 来自手机浏览器 | 显示全部楼层
我看到易语言程序。
回复 支持 反对

使用道具 举报

发表于 2022-6-25 09:16:07 | 显示全部楼层
这个能写入全部型号的25系列吗?
回复 支持 反对

使用道具 举报

发表于 2022-6-25 19:29:29 | 显示全部楼层
为什么不直接用最高波特率?
回复 支持 反对

使用道具 举报

发表于 2022-10-15 11:50:53 | 显示全部楼层
请教楼主: 这个单片机能不能用STC 12C5A60S2系列,STM不会用。
回复 支持 反对

使用道具 举报

发表于 2022-10-16 07:42:13 来自手机浏览器 | 显示全部楼层
会编程序就是好啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-26 00:48 , Processed in 0.124800 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表