毛毛雨 发表于 2013-1-9 14:36:37

flash可以像写ram一样直接写入吗

本帖最后由 毛毛雨 于 2013-1-9 14:45 编辑

刚去网上搜了一下,大家是众说纷纭,有的说可以直接写,有的说先映射到ram区然后再写入,大家进来发表一下自己的见解,这也算是学习一个知识了
我可能没说太明白,其实主要疑问就是flash能不能像ram那样直接用mov指令就能够写入

wye11083 发表于 2013-1-9 14:41:27

FLASH必须先擦除才能写;CFI FLASH必须使用写入命令才能写。

毛毛雨 发表于 2013-1-9 14:43:46

wye11083 发表于 2013-1-9 14:41 static/image/common/back.gif
FLASH必须先擦除才能写;CFI FLASH必须使用写入命令才能写。

先擦除这个我还知道点,我只是不理解flash是不是能够像RAM那样直接用mov指令写入

bbssilverkey 发表于 2013-1-9 15:22:48

具体应该还是区别很大的,坐等等打字小王子来帮大家科普吧

毛毛雨 发表于 2013-1-9 15:27:06

bbssilverkey 发表于 2013-1-9 15:22 static/image/common/back.gif
具体应该还是区别很大的,坐等等打字小王子来帮大家科普吧

打字小王子?大神吗?

flywater 发表于 2013-1-9 16:02:31

FLASH映射到XRAM区后可以象读FLASH一样去读,但写入还要用专门流程,看你用什么单片机的,一般还是先页擦除,再写入,有DMA的稍方便些。

毛毛雨 发表于 2013-1-9 16:36:04

flywater 发表于 2013-1-9 16:02 static/image/common/back.gif
FLASH映射到XRAM区后可以象读FLASH一样去读,但写入还要用专门流程,看你用什么单片机的,一般还是先页擦除 ...

我想做的是先使用烧写工具把程序烧写到flash的某一段,然后flash其他部分的读写问题就交给最先烧进去的那段代码自己完成,所以现在是完全不能借助工具,我只是想知道能不能用MOVX @DPTR,A这样的指令直接就把数据写到flash的目标地址,至于写之前的擦出是必须的,关键是支持不支持MOVX指令

Etual 发表于 2013-1-9 17:01:47

不行,不用问了。可以的话干嘛不用flash当RAM用(慢点没所谓)

毛毛雨 发表于 2013-1-9 17:47:05

Etual 发表于 2013-1-9 17:01 static/image/common/back.gif
不行,不用问了。可以的话干嘛不用flash当RAM用(慢点没所谓)

是啊,我也觉得不行,但是看到不少资料都是直接用MOVX @DPTR,A写入的,所以我就迷茫了

tianheiGE 发表于 2013-1-9 18:33:48

毛毛雨 发表于 2013-1-9 17:47 static/image/common/back.gif
是啊,我也觉得不行,但是看到不少资料都是直接用MOVX @DPTR,A写入的,所以我就迷茫了 ...

MOVX @DPTR,A 这条指令是51专门用来写外部存储器的指令,对应的引脚会发生很多动作,产生时序,如果外接的flash的读写满足这个时序的话就能进行了,我是这样理解的。

同理这样的指令还可以用来读取任何满足这样时序的器件,比如AD等

毛毛雨 发表于 2013-1-10 10:12:00

tianheiGE 发表于 2013-1-9 18:33 static/image/common/back.gif
MOVX @DPTR,A 这条指令是51专门用来写外部存储器的指令,对应的引脚会发生很多动作,产生时序,如果外接 ...

这样的说法貌似也有一定道理啊,我也想过时序的问题,只是我找的资料中只有一份说到了"the slow time of flash",还就提了这一句然后就没下文了,纠结啊

flywater 发表于 2013-1-14 10:17:01

毛毛雨 发表于 2013-1-9 16:36 static/image/common/back.gif
我想做的是先使用烧写工具把程序烧写到flash的某一段,然后flash其他部分的读写问题就交给最先烧进去的那 ...

因为FLASH和RAM的擦除方式不一样,FLASH擦除时必须是一块,不能单字节,所以FLASH映射到XDATA后,写是不能象XRMA那样直接用MOVX的,还必须调用专用擦除函数进行页擦除(IAP),然后再写入。
一般这种可以改变映射状态的单片机都有DMA通道的,即 flash->xram    xram->flash   xram->sfr   等,实现FLASH读写也很简单,建议你多查一下你正使用单片机的DATASHEET,我也没办法给你提供更多细节,因为不同单片机操作方式也不同。

毛毛雨 发表于 2013-1-14 13:54:09

flywater 发表于 2013-1-14 10:17 static/image/common/back.gif
因为FLASH和RAM的擦除方式不一样,FLASH擦除时必须是一块,不能单字节,所以FLASH映射到XDATA后,写是不 ...

datasheet也是反复看了好几遍了,只是在flash的讲解部分写flash的时候有一个Column Latches和一个Extra row,这两个东西各占128字节,但是对于这两个东西的讲解十分笼统,实在搞不懂,所以才来论坛求助

yklstudent 发表于 2013-1-14 17:34:16

FLASH经得起楼主多少次的读写摧残呢{:dizzy:}

monkeynav 发表于 2013-1-14 17:39:35

搞几下就报销了,不能当内存用的。
编译器的访问次数不容易控制。

最好方法就是搞个SPI Flash或者SD卡,也不算很复杂

毛毛雨 发表于 2013-1-15 12:55:13

yklstudent 发表于 2013-1-14 17:34 static/image/common/back.gif
FLASH经得起楼主多少次的读写摧残呢

哈哈,我只是最近在搞flash,发现很多资料都是用MOVX直接写flash的,感觉费解,就来求助一下大神们

毛毛雨 发表于 2013-1-15 12:58:00

monkeynav 发表于 2013-1-14 17:39 static/image/common/back.gif
搞几下就报销了,不能当内存用的。
编译器的访问次数不容易控制。



这样啊,受教了,最近在搞AT89C51RE2的flash,datasheet很不详细,感觉很吃力,所以就来求助大神了,不知道大神你有没有做过这款单片机,片上128k flash的
页: [1]
查看完整版本: flash可以像写ram一样直接写入吗