求助:关于CFI以及flash driver

ionlic 2005-08-14 03:20:25
最近老板让我写flash driver催得急,有些东西我不懂,求助这里的诸位高人。


进入Query mode后,是不是只能访问
addresses(x16)
10h~50h 这段的地址啊。是不是就是说只能访问cfi query data stucture?

cfi的主要作用是什么啊?

我昨天拿到am29lv256m的datasheet,正在看。我怎么没有看到,如何读写flash呢?

谢谢。

...全文
242 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ionlic 2005-09-07
呵呵,谢谢楼上,我那个时候刚接触,什么都不懂,现在懂了一些皮毛。

CFI操作主要是查询flash芯片的相关信息。
在查询前,用户需要在指定地址写入QRY,其实就是查询(读)。

对于NOR型的flash芯片(NAND还没看过),读就是直接从地址读。
而写需要执行擦除操作(flash只是对指定位置写0,擦除是写1)。
至于对flash的操作,不同的厂商都有一套自己的command或者command sequence。
flash属于状态敏感型芯片,对指定的内存地址写入指定的值(或者值序列)就会使flash芯片处于一个指定的状态。
回复
土豆 2005-08-31
你要干吗?
读flash简单,只需要像访问内存那样就可以了。
但是写比较麻烦些。你需要按照CFI的操作序列去实现。CFI其实是Intel推出的标准,amd的flash操作命令不一样,但是意思差不多。
比如要在偏移为addr的地方写入一个数value,按下面的序列
1)在偏移0x555的地方写入0xaa
2)在偏移0x2aa的地方写入0x55
3)在偏移0x555的地方写入0xa0
4)在偏移addr的地方写入value
5)等待上述操作执行完成。

注意:写只能对被擦除了的区域,如果有数据的,需要先作擦除。
1)在偏移0x555的地方写入0xaa
2)在偏移0x2aa的地方写入0x55
3)在偏移0x555的地方写入0x80
4)在偏移0x555的地方写入0xaa
5)在偏移0x2aa的地方写入0x55
6)在要删除的section的开始地址offset写入0x30
7)等待上述操作执行完成。

其实flash的driver 有很多要做:
首先,你要检测flash的类型,也就是做probe;另外你也需要实现reset的功能,因为flash内部其实也有一段程序,在出现故障的时候需要做reset;上面实现的写操作是字节写的,当然也能工作,不过flash一般都有buffer write功能,可以一次性将一块数据写上去,这样效率高写。
回复
ionlic 2005-08-14
CFI我有点理解了。
为了使程序可重用。如果支持了CFI,就可以应用程序判断是什么类型的flash,然后根据不同的芯片类型作相应的操作。我这样理解对么?

是不是一般flash中都有state machine?其实,写操作主要是通过设定state machine的状态来进行些操作的对么?

我刚刚接触,还请各位大侠再给补充补充。
回复
相关推荐
发帖
驱动开发/核心开发
创建于2007-09-28

2.1w+

社区成员

硬件/嵌入开发 驱动开发/核心开发
申请成为版主
帖子事件
创建了帖子
2005-08-14 03:20
社区公告
暂无公告