evilangelo
驱动牛犊
驱动牛犊
  • 注册日期2003-05-18
  • 最后登录2005-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2063回复:9

请教flash的读写

楼主#
更多 发布于:2004-04-22 10:28
看了frank的文档,还是对flash的读写算法还是不太清楚,哪位大虾帮帮忙吧,主要有几个问题:
1.flash每个page有528Byte,但是定义文件系统的时候每扇区512Byte,那是不是读写flash的时候都把后面的16Byte跳掉?
2.创建和删除文件时,要修改fat等区,这是主机控制的吗?还是要自己写固件程序实现?
3.写flash前必须erase一个block,加上我的板子缓存只有16k,那是不是说我必须用专门的一个block来保存要erase的block,然后再写
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-22 14:31
第一问:看什么牌子的FLASH,三星的有个脚高的时候可以直接跳过。而东芝的则需要在软件中屏蔽。
第二问:是由HOST控制的。但是还是要注意内容保护的问题。而不是
一概写前就擦除。特别是FAT和DIR区,HOST一般只会发需要修改的页的内容,如果这时候你写前擦除的话,就会把以前的内容冲掉
第三问:如果你的镞大小和BLOCK一样,那么对于数据区可以放心擦除,而对于FAT和DIR就不行,原因见第二问。
当然也可以有些特别的算法,可以不用保存的。这些算法基于地址映射的原理。你可以参考一下。因为对于快速的MCU,和有比较大的RAM保存花不了时间。而MCU速度慢的话,就尽量采用特殊算法。尽量避免FLASH内的数据搬运。
chenchi1982
驱动牛犊
驱动牛犊
  • 注册日期2004-03-21
  • 最后登录2018-05-26
  • 粉丝0
  • 关注0
  • 积分-12分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-23 19:31
第一问:看什么牌子的FLASH,三星的有个脚高的时候可以直接跳过。而东芝的则需要在软件中屏蔽。


我的FLASH芯片是三星的K9F5608U0A-YIB0
MCU是AT908515
屏蔽多余16BYTE的脚是GND,我怎样将GND置高,默认好像为低
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-24 11:11
我用的好象不是GND脚吧。你再仔细看看资料。。。
再说东芝的跟三星很类似,价格低点,所以就做成兼容的。因此三星的那个屏蔽功能没用。
chenchi1982
驱动牛犊
驱动牛犊
  • 注册日期2004-03-21
  • 最后登录2018-05-26
  • 粉丝0
  • 关注0
  • 积分-12分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-24 12:02
数据手册上是这样写的啊
the 50h command is valid only when the GND input(pin #6)is low level.
50h command 是对后16BYTE的操作
我现在也是在程序中控制,但还是想知道怎样去改,请指教:)
谢谢
evilangelo
驱动牛犊
驱动牛犊
  • 注册日期2003-05-18
  • 最后登录2005-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-24 21:38
/*第三问:如果你的镞大小和BLOCK一样,那么对于数据区可以放心擦除,而对于FAT和DIR就不行,原因见第二问。*/

再问一下,对于数据区可以放心擦除吗??
可是一次erase就是一个block,万一我只是要写某个block里的前几个page,那不是后面page的数据都丢失了?
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于: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开始)


evilangelo
驱动牛犊
驱动牛犊
  • 注册日期2003-05-18
  • 最后登录2005-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-25 10:47
不好意思,还是不太明白。
比如,如果我新建的文件大小只有10个page就够了,而我设定的一个block是64个page,那host怎么会发64倍速page的数据让flash写呢?
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-25 21:06
evilangelo:
你得明白族得概念啊。。。仔细看看FAT16得资料。
HOST是按照族去写文件得。如果你一族是一个BLOCK,或者就是64页,那么即便文件只有1个字节,他仍然占用一族,也就是一个BLOCK
evilangelo
驱动牛犊
驱动牛犊
  • 注册日期2003-05-18
  • 最后登录2005-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-26 09:09
原来是这样,多谢指点
游客

返回顶部