阅读:2065回复:9
请教flash的读写
看了frank的文档,还是对flash的读写算法还是不太清楚,哪位大虾帮帮忙吧,主要有几个问题:
1.flash每个page有528Byte,但是定义文件系统的时候每扇区512Byte,那是不是读写flash的时候都把后面的16Byte跳掉? 2.创建和删除文件时,要修改fat等区,这是主机控制的吗?还是要自己写固件程序实现? 3.写flash前必须erase一个block,加上我的板子缓存只有16k,那是不是说我必须用专门的一个block来保存要erase的block,然后再写 |
|
沙发#
发布于:2004-04-26 09:09
原来是这样,多谢指点
|
|
板凳#
发布于:2004-04-25 21:06
evilangelo:
你得明白族得概念啊。。。仔细看看FAT16得资料。 HOST是按照族去写文件得。如果你一族是一个BLOCK,或者就是64页,那么即便文件只有1个字节,他仍然占用一族,也就是一个BLOCK |
|
地板#
发布于:2004-04-25 10:47
不好意思,还是不太明白。
比如,如果我新建的文件大小只有10个page就够了,而我设定的一个block是64个page,那host怎么会发64倍速page的数据让flash写呢? |
|
地下室#
发布于:2004-04-24 23:28
chenchi1982:
你还是得好好看看资料。50H的确是读写C区得。但是屏蔽C区的不是这条指令。。。你好好看看引脚图,有个脚(好像是R什么的),那脚为高后,当你执行00H,01H,指令时,到了第511个BYTE时候就会自动切换到下一页,如果为低,则会继续读写C区 evilangelo: 对于BLOCK的操作是由HOST管理的,他让你干什么你就干什么。如果你的族大小就是一个BLOCK,那么HOST就会按BLOCK给你传数据。比如 你一个BLOCK是16PAGE,那么HOST让你写的页数必然也是16的倍数。而且起点也就是一个BLOCK的起点。当然前提是你的数据区也是在一个BLOCK(比如第10个BLOCK开始) |
|
5楼#
发布于:2004-04-24 21:38
/*第三问:如果你的镞大小和BLOCK一样,那么对于数据区可以放心擦除,而对于FAT和DIR就不行,原因见第二问。*/
再问一下,对于数据区可以放心擦除吗?? 可是一次erase就是一个block,万一我只是要写某个block里的前几个page,那不是后面page的数据都丢失了? |
|
6楼#
发布于:2004-04-24 12:02
数据手册上是这样写的啊
the 50h command is valid only when the GND input(pin #6)is low level. 50h command 是对后16BYTE的操作 我现在也是在程序中控制,但还是想知道怎样去改,请指教:) 谢谢 |
|
7楼#
发布于:2004-04-24 11:11
我用的好象不是GND脚吧。你再仔细看看资料。。。
再说东芝的跟三星很类似,价格低点,所以就做成兼容的。因此三星的那个屏蔽功能没用。 |
|
8楼#
发布于:2004-04-23 19:31
第一问:看什么牌子的FLASH,三星的有个脚高的时候可以直接跳过。而东芝的则需要在软件中屏蔽。 我的FLASH芯片是三星的K9F5608U0A-YIB0 MCU是AT908515 屏蔽多余16BYTE的脚是GND,我怎样将GND置高,默认好像为低 |
|
9楼#
发布于:2004-04-22 14:31
第一问:看什么牌子的FLASH,三星的有个脚高的时候可以直接跳过。而东芝的则需要在软件中屏蔽。
第二问:是由HOST控制的。但是还是要注意内容保护的问题。而不是 一概写前就擦除。特别是FAT和DIR区,HOST一般只会发需要修改的页的内容,如果这时候你写前擦除的话,就会把以前的内容冲掉 第三问:如果你的镞大小和BLOCK一样,那么对于数据区可以放心擦除,而对于FAT和DIR就不行,原因见第二问。 当然也可以有些特别的算法,可以不用保存的。这些算法基于地址映射的原理。你可以参考一下。因为对于快速的MCU,和有比较大的RAM保存花不了时间。而MCU速度慢的话,就尽量采用特殊算法。尽量避免FLASH内的数据搬运。 |
|