[已解决]求助,flash的CFI接口找不到
flash芯片类型,W28J320BT90L
启动在linux-2.6.13.2/drivers/mtd/chips/cfi_probe.c的qry_present函数不能通过.redboot可以使用flash.
static int __xipram cfi_probe_chip(struct map_info *map, __u32 base,
unsigned long *chip_map, struct cfi_private *cfi)
"cfi_probe.c" [converted] 457L, 13490C written
[orinda@localhost chips]$ vi cfi_probe.c
*/
static int __xipram qry_present(struct map_info *map, __u32 base,
struct cfi_private *cfi)
{
int osf = cfi->interleave * cfi->device_type; // scale factor
map_word val[3];
map_word qry[3];
qry[0] = cfi_build_cmd('Q', map, cfi);
qry[1] = cfi_build_cmd('R', map, cfi);
qry[2] = cfi_build_cmd('Y', map, cfi);
val[0] = map_read(map, base +osf*0x10);///////////////////////////
val[1] = map_read(map, base + osf*0x11);/////// 这3不检测不到QRY,请问是什么原因?
val[2] = map_read(map, base + osf*0x12);//////////////////////
if (!map_word_equal(map, qry[0], val[0]))
return 0;
if (!map_word_equal(map, qry[1], val[1]))
return 0;
if (!map_word_equal(map, qry[2], val[2]))
return 0;
return 1; // "QRY" found
}
[ 本帖最后由 smalloc 于 2007-6-18 20:39 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
你的FLASH是什么类型的,是CFI或CFI兼容的接口吗?
W28J320BT90L这款芯片是NOR flash 4M ,文档说可以和intel 的TE28F320B3/TE28F320C替换.
那2个intel的是cfi接口的.厂家是winbond.应该是很普通的芯片.
再问一下是不是所有的nor flash都是CFI的呢?如果不是那么在配置时怎么改
do_map_probe函数好象调用cfi_probe.
然后就是对于cfi接口的,读QRY特征字的花据说偏移地址是0x10,0x11,0x12,3 个存储区,那么这3个区的地址是直接在内存里的吗?(我的是ARM平台).
比如flash整个映射为0x5000000-0x5400000.那么特征字在年哪里读呢?
[ 本帖最后由 smalloc 于 2007-6-6 16:14 编辑 ]
1从芯片手册中确定是否支持CFI
2确定是8bit或16bit的操作。这会导致offset地址不一样。
3操作之前,最好先作reset
4从地址0x5000000+ offset处,即0x5000010, 0x5000011, 0x5000012读特征字。
[ 本帖最后由 yidou 于 2007-6-11 18:24 编辑 ]
谢谢楼上的回答,我这个flash好老,应该无cfi信息接口,我让它通过jedec_probe了因为在jedec_probe.c中的芯片有intel的28f320的芯片和我这个正好是可替换的.
问一下cfi信息结构的interleave值是什么含义?我的4M的flash,如果interleave为2的时候mtd->size就成了8M了,我为1系统正常运行了.flash读写也正确了,问一下这个值什么怎么出来的?
再问一下ARM方面的嵌入式有好书吗?主要介绍ARM多些的.
[ 本帖最后由 smalloc 于 2007-6-19 13:31 编辑 ]
1从芯片手册中确定是否支持CFI
2确定是8bit或16bit的操作。这会导致offset地址不一样。
3操作之前,最好先作reset
4从地址0x5000000+ offset处,即0x5000010, 0x5000011, 0x5000012读特征字。
请楼上yidou解释一下第2点好吗,原来用的amd 033c换成sst39vf6401b.因为我用16bit的flash替换8bit,现在也是qry_present不能通过。因为比较qry和val不相等。请教应该修改什么地方?
1从芯片手册中确定是否支持CFI
2确定是8bit或16bit的操作。这会导致offset地址不一样。
3操作之前,最好先作reset
4从地址0x5000000+ offset处,即0x5000010, 0x5000011, 0x5000012读特征字。
请楼上yidou解释一下第2点好吗,原来用的amd 033c换成sst39vf6401b.因为我用16bit的flash替换8bit,现在也是qry_present不能通过。因为比较qry和val不相等。请教应该修改什么地方?