主题 : 在mini2440 kernel加载nor flash有问题,请帮忙看下! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 8124
精华: 0
发帖: 17
金钱: 170 两
威望: 115 点
综合积分: 34 分
注册时间: 2009-08-11
最后登录: 2009-09-23
楼主  发表于: 2009-08-12 17:53

 在mini2440 kernel加载nor flash有问题,请帮忙看下!

最近要写一个nor flash的测试程序 来测试nor, 可是,进入系统后发现/dev 下的mtd* 都是属于nand flash的设备ID。
我的依据是
1: #cat /proc/mtd (size加起来是nand的大小接近64M)
dev:    size   erasesize  name
mtd0: 00030000 00004000 "supervivi"
mtd1: 00200000 00004000 "Kernel"
mtd2: 03dac000 00004000 "root"

2: 安装mtd-util工具
#mtd_debug info /dev/mtd0
MTD_open
MTD_ioctl
MTD_ioctl
mtd.type = MTD_NANDFLASH
MTD_close
mtd.flags =
mtd.size = 196608 (192K)
mtd.erasesize = 16384 (16K)
mtd.oobblock = 512
mtd.oobsize = 16
mtd.ecctype = (unknown ECC type - new MTD API maybe?)
regions = 0

可以看出mtd0是Nand flash的设备ID

我从网上找了个加载nor的驱动,http://www.diybl.com/course/6_system/linux/Linuxjs/2008927/146119.html
好不容易修改内核,编译通过。下载到板子上还是没有出现nor flash的设备ID。

现在很着急,不知道该怎么解决。。。。请各位高手赐教!

人总是在绝望的边缘 才能看清楚自己软弱的样子
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-08-13 09:58
NOR Flash接在Memory Controller的Bank0, 要操作它,必须用NOR启动方式,具体原因看S3C2440A CPU用户手册里的NOR和NAND启动方式下不同的Memory Map
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 8124
精华: 0
发帖: 17
金钱: 170 两
威望: 115 点
综合积分: 34 分
注册时间: 2009-08-11
最后登录: 2009-09-23
2楼  发表于: 2009-08-13 11:25

 回 1楼(kasim) 的帖子

谢谢kasim的回复

我的意思是要让nor在内核启动的时候挂载,不是从nor 启动起来
应该我的应用测试程序要对nor进行erase 操作擦除了之后就不能再从nor启动了
所以才用nand启动的方式。
人总是在绝望的边缘 才能看清楚自己软弱的样子
级别: 新手上路
UID: 8124
精华: 0
发帖: 17
金钱: 170 两
威望: 115 点
综合积分: 34 分
注册时间: 2009-08-11
最后登录: 2009-09-23
3楼  发表于: 2009-08-13 11:47
我查看了那个nor flash的驱动代码,结果在do_map_probe(*type, &s3c2440nor_map); return就出错了
最后跟踪到cfi_util。c (drivers/mtd/chip/)有个函数没有探测到nor 的芯片。但是我不明白这个函数的意思。

int __xipram cfi_qry_mode_on(uint32_t base, struct map_info *map,
                 struct cfi_private *cfi)
{
    cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
    cfi_send_gen_cmd(0x98, 0x55, base, map, cfi, cfi->device_type, NULL);
    if (cfi_qry_present(map, base, cfi))
    {
        printk(KERN_ALERT "#Kluter Tee\n");
        return 1;
    }
    /* QRY not found probably we deal with some odd CFI chips */
    /* Some revisions of some old Intel chips? */
    cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
    cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL);
    cfi_send_gen_cmd(0x98, 0x55, base, map, cfi, cfi->device_type, NULL);
    if (cfi_qry_present(map, base, cfi))
    {
        printk(KERN_ALERT "#Kluter Tff\n");
        return 1;
    }
    /* ST M29DW chips */
    cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
    cfi_send_gen_cmd(0x98, 0x555, base, map, cfi, cfi->device_type, NULL);
    if (cfi_qry_present(map, base, cfi))
    {
        printk(KERN_ALERT "#Kluter Tgg\n");
        return 1;
    }
    printk(KERN_ALERT "#Kluter Thh\n");
    /* QRY not found */
    return 0;
}
人总是在绝望的边缘 才能看清楚自己软弱的样子
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2009-08-13 11:50

 Re:回 1楼(kasim) 的帖子

引用第2楼kluter于2009-08-13 11:25发表的 回 1楼(kasim) 的帖子 :
谢谢kasim的回复

我的意思是要让nor在内核启动的时候挂载,不是从nor 启动起来
应该我的应用测试程序要对nor进行erase 操作擦除了之后就不能再从nor启动了
所以才用nand启动的方式。

我的意思是如果你要掛載它,就必須讓開發板從NOR Flash啟動,否則它對于CPU是不可見的,更別談掛載它了。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 8124
精华: 0
发帖: 17
金钱: 170 两
威望: 115 点
综合积分: 34 分
注册时间: 2009-08-11
最后登录: 2009-09-23
5楼  发表于: 2009-08-13 14:42

 回 4楼(kasim) 的帖子

现在mini2440板子从nor flash启动,效果是一样的,还是挂不上。

我们公司其它产品就是用nand flash启动去挂载nor flash做nor flash 测试的。
人总是在绝望的边缘 才能看清楚自己软弱的样子
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2009-08-13 14:55

 Re:回 4楼(kasim) 的帖子

引用第5楼kluter于2009-08-13 14:42发表的 回 4楼(kasim) 的帖子 :
现在mini2440板子从nor flash启动,效果是一样的,还是挂不上。

我们公司其它产品就是用nand flash启动去挂载nor flash做nor flash 测试的。

從NOR啟動只是可以access到NOR Flash的必要條件,要掛載成功,Linux內核中的MTD模塊必須包含正確的probe NOR Flash的邏輯, 就像你之前貼出來的那種驅動。
至于你們公司其他的產品,如果你有原理圖的話,可以看到NOR Flash不是接在nGCS0上的
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 8124
精华: 0
发帖: 17
金钱: 170 两
威望: 115 点
综合积分: 34 分
注册时间: 2009-08-11
最后登录: 2009-09-23
7楼  发表于: 2009-08-13 15:20
我觉得可能我找的nor flash的物理地址搞错了, 我对照电路图看了下,物理地址是0x00000000
kasim 能麻烦你帮我确认一下吗?
nor flash电路图上用的是这个芯片AM29LV160DB/SST39VF1601 片选是nGCS0
人总是在绝望的边缘 才能看清楚自己软弱的样子
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
8楼  发表于: 2009-08-13 15:40
據我所知,Mini2440上這兩種NOR Flash都用過,至于你的板子上用的哪一種,你得自己看芯片上的標識了;
NOR Flash的物理地址是從0x00000000開始的,但至于probe需要的起始地址以及如何probe,這需要你從NOR Flash的datasheet上找出來。
內核配置的Memory Technology Device (MTD) support->RAM/ROM/Flash chip drivers里包含了大部分NOR Flash驅動,你也可以看看是否有適用的
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."