FLASH ROM (ST:M30LW128D) 读写操作问题。
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




