4788|10

2002

帖子

24

TA的资源

五彩晶圆(高级)

楼主
 

【M4开发板Hanker试用狂-Shower.Xu】6、W25x80操作-我要记住你 [复制链接]

W25x80是华邦出的一款串行falsh存储器, 存储容量8M bit,通过SPI接口进行数据读写,具有写保护功能。它有4096个可编程页组成,每页256字节,每个扇区由16个页组成,用页编程指令每次可编程256字节,用扇区擦除指令每次可擦除4K字节,也可进行块擦除或整个新片擦除。
芯片采用标准SPI接口控制,四线制,传输速率可支持到75MHz,使用快读双输出指令可更高。

本以为很简单的,结果浑浑噩噩搞了几天,大致能用,中间状况百出,至今还有几点没弄明白,继续折腾。
我觉得几点需要注意的地方:
1、传入要写的参数需要是全局变量
2、要严格注意时序
3、写之前必须先擦除目标区域,即目标区为0xff时可写。
4、读写时注意最小读写单元是页,最好整页操作或做充分的页地址判断
我利用Flash的存储写了个小程序进行演示。
程序上电会判断w25x80里是否有我们之前保存的数据(指示上次掉电前led灯状态),如果有则读出数据并恢复LED上次一样的显示,没有则默认全灭。
每次我们触摸屏幕选择LED的亮灭都会被记录下来以供下次开机调用。
视頻在这里:

源代码在这里:
3.13 SPI new.rar (401.99 KB, 下载次数: 90)
[ 本帖最后由 shower.xu 于 2012-5-31 09:43 编辑 ]

最新回复

IO_Erase_Sector(0x00000000);    0xD8吧  写进去就可以了吧  这就是格式化吧  详情 回复 发表于 2012-11-21 16:27
 
点赞 关注

回复
举报

1246

帖子

19

TA的资源

五彩晶圆(初级)

沙发
 
老大搞出来啦!!学习!!
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

板凳
 
原帖由 anananjjj 于 2012-5-31 09:57 发表 老大搞出来啦!!学习!!

郁闷的很,折腾了我几天,还有点疑惑没搞明白
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 
程序上电会判断w25x80里是否有我们之前保存的数据

这个是怎么判断的?
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

5
 
原帖由 Study_Stellaris 于 2012-6-1 08:46 发表 程序上电会判断w25x80里是否有我们之前保存的数据 这个是怎么判断的?

每次改变灯时会保存灯的当前状态到flash,其实就是一字节数据,每次开机判断该地址的数据是否为我们要求的格式,是则显示,否则默认全灭。

 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(高级)

6
 
请教 你几个关于W25X80的问题哈
就是关于W25X80的地址是怎么判断的呢  为什么我写了数据 每次读的数据都是0xff呢  真的搞不懂啊
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(高级)

7
 
还有就是  
IO_Write_Byte(0x00000000,0xa5);     
SendSPIByte(((Dst_Addr & 0xFFFFFF) >> 16));  /* send 3 address bytes */
SendSPIByte(((Dst_Addr & 0xFFFF) >> 8));
SendSPIByte(Dst_Addr & 0xFF);

这几句的含义是什么呢   为什么是0x00000000呢
有点摸不清啊

点评

原帖由 ly471089608 于 2012-11-17 15:26 发表 https://bbs.eeworld.com.cn/images/common/back.gif 还有就是 IO_Write_Byte(0x00000000,0xa5); SendSPIByte(((Dst_Addr & 0xFFFFFF) >> 16)); /* send 3  详情 回复 发表于 2012-11-17 18:19
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

8
 
原帖由 ly471089608 于 2012-11-17 15:26 发表
还有就是  
IO_Write_Byte(0x00000000,0xa5);     
SendSPIByte(((Dst_Addr & 0xFFFFFF) >> 16));  /* send 3 address bytes */
SendSPIByte(((Dst_Addr & 0xFFFF) >> 8));
SendSPIByte(Dst_Addr & 0xFF);

...


不好意思,没找到这几句话在哪里
简单解释一下
        SPI_Write_Byte(W25X_SectorErase);
        SPI_Write_Byte((unsigned char)((nDest & 0xFFFFFF) >> 16));
        SPI_Write_Byte((unsigned char)((nDest & 0xFFFF) >> 8));
        SPI_Write_Byte((unsigned char)nDest & 0xFF);

这几行根据数据表来的
先写命令控制字,擦除就是0x20

后面三字节是地址,这里是扇区地址(4k/扇区)

还有,先格式化,在读写操作

[ 本帖最后由 shower.xu 于 2012-11-18 22:49 编辑 ]
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(高级)

9
 
你好  我的芯片是C8051F020  为什么每次读出来的数据都是0xff  你QQ多少  我把程序给你看下  有没有什么问题呢
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(高级)

10
 
IO_Erase_Sector(0x00000000);    0xD8吧  写进去就可以了吧  这就是格式化吧

点评

我没有用过那个IC 对,每次写之前先擦除扇区  详情 回复 发表于 2012-11-21 18:28
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

11
 
原帖由 ly471089608 于 2012-11-21 16:27 发表
IO_Erase_Sector(0x00000000);    0xD8吧  写进去就可以了吧  这就是格式化吧
我没有用过那个IC

对,每次写之前先擦除扇区
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表