野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25978|回复: 5

SPI Flash读取错误

[复制链接]
发表于 2014-5-7 21:01:02 | 显示全部楼层 |阅读模式
本帖最后由 苹果鱼吉 于 2014-5-7 21:02 编辑

使用SPI Flash芯片W25X16作为字库芯片,同时存储一些.bin格式的图片(Image2Lcd软件生成)和掉电需要保存的数据(比如屏幕亮度信息),字库和图片都可以正常显示,掉电保存的数据出现问题,具体的代码如下(使用野火开发板提供的SPI Flash驱动函数):

uint32_t LightNum = 5;        /* 屏幕亮度等级 */
#define LIGHT_LEVEL_ADDR 0x18F800
SPI_FLASH_BufferWrite((uint8_t*)&LightNum, LIGHT_LEVEL_ADDR, 4);

我写入的LightNum的值为5,可是读取出来的时候就会变成0,使用如下代码
uint32_t buf = 0;
SPI_FLASH_BufferRead((uint8_t*)&buf, LightNum, 4);
LightNum = buf;

求火哥或者大神帮忙解决一下啊
回复

使用道具 举报

 楼主| 发表于 2014-5-8 10:13:01 | 显示全部楼层
问题已经解决,在写入数据时,必须先进行擦除操作(见图)。
仍然还有一个问题:擦除操作每次最少的也是扇区擦除(4K),如果在这些空间内有其他数据,可能会造成数据的丢失。
我想了一个办法,就是先把4K数据读出来,然后把需要改变的数据和原有的数据一起写进去。但是这样效率太低了,期待其他的解决方案
en.jpg
回复 支持 反对

使用道具 举报

发表于 2014-5-8 10:19:23 | 显示全部楼层
楼猪不错,问题解决了还发上来,
回复 支持 反对

使用道具 举报

发表于 2014-5-8 10:40:52 | 显示全部楼层
苹果鱼吉 发表于 2014-5-8 10:13
问题已经解决,在写入数据时,必须先进行擦除操作(见图)。
仍然还有一个问题:擦除操作每次最少的也是扇区 ...

是的,FLASH的每次写操作都要先擦除
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-8 15:39:44 | 显示全部楼层
刀_口 发表于 2014-5-8 10:19
楼猪不错,问题解决了还发上来,

要有共享精神嘛
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-8 15:40:28 | 显示全部楼层
红舒扬 发表于 2014-5-8 10:40
是的,FLASH的每次写操作都要先擦除

没有自己写驱动就是不行啊
以后写驱动还是需要好好研究芯片手册
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 04:24 , Processed in 0.036343 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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