求助:关于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呢?

谢谢。

...全文
361 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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的状态来进行些操作的对么?

我刚刚接触,还请各位大侠再给补充补充。

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧