CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  硬件/嵌入开发 >  驱动开发/核心开发

FLASH ROM (ST:M30LW128D) 读写操作问题。

楼主iamwt()2004-11-04 13:54:51 在 硬件/嵌入开发 / 驱动开发/核心开发 提问

1。请高手介绍一下,一般FLASH   ROM的读写操作顺序。  
  2。若有那位高手使用过标题中的FLASH   ROM,我在对其操作时,写入命令出现,单步运行没问题  
  但是,连续运行就死机的现象。但是在两条写命令中间加入延时也不行。 问题点数:100、回复次数:12Top

1 楼wuxq7311(小清)回复于 2004-11-04 15:14:21 得分 1

这个铁定是你的程序问题!!Top

2 楼iamwt()回复于 2004-11-05 11:59:07 得分 0

小清兄,就这一句!没什么其他要说的?Top

3 楼zhangsoarcs(KEY)回复于 2004-11-05 14:31:49 得分 60

我没做个这个Flash,   说一下我用过的Intel   Flash的情况吧;  
   
  一般都是这样操作的,    
  因为Flash通常所处的状态是Read   Array状态,   所以进行其它操作时必须先写入command   改变Flash状态,操作完后再将Flash   状态改回去.  
  以写操作为例  
  1.   Verify   status   ready  
  1.   write   write   command   to   block   base  
  2.   verify   status   ready  
  3.   write   data  
  4.   verify   status   ready  
  5.   write   command   to   put   device   to   read   array   mode  
  ...end  
  大概是这样吧.  
   
  建议你在几个命令之间加上wait   device   status   ready的code试试.Top

4 楼iamwt()回复于 2004-11-05 16:01:18 得分 0

非常感谢   zhangsoarcs(KEY)。  
  回头给你答复。Top

5 楼iamwt()回复于 2004-11-05 16:31:56 得分 0

to   zhangsoarcs(KEY)  
  再次感谢你的回答。  
  我使用的ST的芯片是intel系列的,所以和你说的顺序基本一致。  
  现在的问题是,在操作第一个block的时候出现以上问题,其他  
  block没有发现问题。第一个block是不是有什么特殊的地方?Top

6 楼hy1080(老神经病)回复于 2004-11-07 11:35:13 得分 3

顶,学习Top

7 楼FireAngel(土豆)回复于 2004-11-08 13:01:12 得分 1

把你的操作序列写出来,看看才有结论Top

8 楼zhangsoarcs(KEY)回复于 2004-11-10 15:23:52 得分 0

to   zhangsoarcs(KEY)  
  再次感谢你的回答。  
  我使用的ST的芯片是intel系列的,所以和你说的顺序基本一致。  
  现在的问题是,在操作第一个block的时候出现以上问题,其他  
  block没有发现问题。第一个block是不是有什么特殊的地方?  
  ----------------------------------------------------------  
  可能是这种情况:  
  Intel的一些Flash有   Parameter   block的概念,   区别于一般的Block,   parameter   block一般会在Flash的起始地址(你的应该是这种),或者末地址(通常参品代号中会有一个字节B,   代表Bottom,   T:   Top)  
   
  例如:   一块Flash,   刚开始的四个Block是32Kbyte   Size的parameter   block(一般parameter   block的总的size   为一个normal   block的size),   后面的全部是128Kbytes   size的normal   block.  
  那么你在操作前面的parameter   Block的时候,   应该是分成四个block操作,就会和操作normal   block的   block   base   address会有不同的跨度.  
   
  这个你要具体看一下Flash   Spec了.  
  Top

9 楼winey0023(小道童)回复于 2004-11-10 16:25:02 得分 20

建议在写之前先检查写的block是否为空,还有有些flash确实存在block大小不一样的情况。我现在做的spansion的就是这样,在写的过程中不要只是进行简单的等待,最好设置一个超时,在timeout之前不停的检测flash的状态,也就是verify   status   ready。仔细检查一下你的写程序。Top

10 楼byakawang()回复于 2004-11-11 00:16:30 得分 15

Flash   ROM   有所谓的   BOOTBLOCK的区块,我记得是有专门的信号来控制对BOOTBLOCK的写操作的。  
  TOP   BLOCK   LOCK   (TBL#)和   WRITE   PROTECT(WP#),要确信是不是把TBL#这个保护去掉了!Top

11 楼iamwt()回复于 2004-11-16 14:35:53 得分 0

最近几天被其他工作缠住了,没及时响应,不好意思!  
  谢谢后来的几位朋友的回复,特别是zhangsoarcs(KEY)朋友。  
  我会再看看说明及自己的程序。再次表示谢谢!等我的回复!  
  Top

12 楼iamwt()回复于 2004-11-18 10:06:19 得分 0

谢谢各位的参与,在这段时间对于Flash操作从一个什么都不知道的菜菜鸟,变成了一只菜鸟(少了一个菜)。问的问题,基本明白了。通过zhangsoarcs(KEY)朋友的回复,更条理清晰的知道了一般Flash写  
  操作的步骤。对于我这个E文一般的理工科新人来说,看上百页的从没接触过的Flash说明文档真的头大。  
   
  问题主要原因是,在系统(我的项目)启动后,第一个操作是把程序段从Flash   copy到SDRam中,之后程序在  
  SDRam中运行,这样做的原因就不在这说了。问题是我在操作的时候,不小心对堆栈区的几个单元进行了操作,这样PC指针傻了(是我的错,对不起了),程序就偶尔停下来。时好时不好的原因就是没破坏使用到的堆栈区就没问题。  
   
  对于Flash:M30LW128D做一点说明,以下所说的Flash都是针对这片而言。  
  1:这片Flash是128Mb的,是由两片M58LW064D组成。  
  2:对Flash操作,存在Parameter   block概念,也确实是Flash的起始地址,但Size是和其他block一样的。  
        而这片Flash是由两片独立64Mb组成,所以存在两个这样的Parameter   block。而第二片的起始地址是  
        接第一片后,按照设定的Bus   Width是Byte还是Word而不同分别对应800000h和400000h。  
  3:Flash分成128个block,可以分别对单独的block进行操作。  
  4:关于对Flash的各种操作,我这里就不能详细说了,请大家使用的时候参看对应Flash的说明文档,流程  
        图。注意的就是Write数据或命令的时候,对应的是第二条中的Parameter   block起始地址,还是对应  
        block的起始地址或者对应具体要操作的一个Byte,Word单元。  
        命令有操作整个芯片,整个block的区分,这也是本条上面提出的注意事项的原因。  
  5:再有就是,一个操作过程中有   读状态寄存器   要求,这点不能忽略,一个是在等待操作结束,一个读回来  
        的值返回该次操作的正确与否。  
   
  补充:其实大家都知道,我再补充有点哗众取宠,就算给菜菜菜鸟朋友吧!  
    1:建议在开发和芯片相关程序的程序员,去芯片生产厂家的网站,上面有很多文档和例程。  
    2:当然,芯片生产厂基本都是老美,所以文档都是E文,硬着头皮看吧,看着看着真的进步不少。  
    3:例程里的编程风格,手法真的不错,对程序员是一个不小的帮助,当然是针对我这样的菜鸟。  
    4:在嵌入式开发过程中,由于对底层知识要求相对较高,可以回头再来看看校园里的   微机原理,  
          操作系统课本,做一段工作后再来看,和学生时代大有不同。若可能也应该对汇编下下功夫,  
          虽然现在都转向C,但是遇到问题看看IDE环境提供的C对应过去的汇编代码很有好处,当然如果  
          能够再深入一下数据结构和算法,我看混饭吃应该没问题了。  
   
  最后,很感谢参与的朋友。  
   
   
   
   
   
   
  Top

相关问题

  • preg_match_all( "/(\d+)\.(\d+)\.(\d+)/i", $si, $m );
  • int d,m; d=VGA; m=VGAMED; ......更多程序 ,请进 》
  • while(fscanf(fp,"%d%d",&n,&m)==2)这是什么意思?
  • s.Format("%d",m_pSet->m_column1)中%d的用法和意思
  • MySQL中的decimal(M,D),其中M能取的最大值多少?D能取的最大值是多少?
  • 李维 系统篇第二章中的M/D的问题!
  • d
  • 如何只显示Y-m-d,而不显示H:i:s
  • d
  • d

关键词

  • flash
  • 芯片
  • 文档
  • 操作
  • block
  • zhangsoarcs
  • lw
  • 问题
  • 命令
  • 起始地址

得分解答快速导航

  • 帖主:iamwt
  • wuxq7311
  • zhangsoarcs
  • hy1080
  • FireAngel
  • winey0023
  • byakawang

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo