[ARM入门] 关于uboot的nand初始化,看不懂怎么判断2410还是2440

[复制链接]
1659|10
 楼主| 734664813 发表于 2014-11-26 12:38 | 显示全部楼层 |阅读模式
void nand_init_ll(void)函数中有一个if语句
/* 判断是S3C2410还是S3C2440 */
    if (isS3C2410)
    {
                /* 使能NAND Flash控制器, 初始化ECC, 禁止片选, 设置时序 */
        s3c2410nand->NFCONF = (1<<15)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);
    }
其中的判断条件isS3C2410是一个宏定义,如下:
#define rGSTATUS1       (*(volatile unsigned *)0x560000B0)
#define isS3C2410                 ((rGSTATUS1 & 0xffff0000) == 0x32410000)

不懂为什么这样就能判断是2410还是2440,请教各位大神
lr2131 发表于 2014-11-26 13:52 | 显示全部楼层
我没有2410的板子,有2440的板子,没去关心过2410在2440上的兼容性问题。
不过,已经很明显的看得出来,rGSTATUS1寄存器在2410和2440上的值应该是不一样的。

你把2440和2410的datasheet对着一看,就明白了。

评分

参与人数 1威望 +2 收起 理由
734664813 + 2 很给力!

查看全部评分

 楼主| 734664813 发表于 2014-11-26 18:50 | 显示全部楼层
lr2131 发表于 2014-11-26 13:52
我没有2410的板子,有2440的板子,没去关心过2410在2440上的兼容性问题。
不过,已经很明显的看得出来,rGS ...

懂了,谢谢啦
Register   Address     R/W  Description  Reset Value
GSTATUS1  0x560000b0    R    Chip ID     0x32440001

 楼主| 734664813 发表于 2014-11-26 20:54 | 显示全部楼层
lr2131 发表于 2014-11-26 13:52
我没有2410的板子,有2440的板子,没去关心过2410在2440上的兼容性问题。
不过,已经很明显的看得出来,rGS ...

这是读nand的函数
nand_read_ll_lp(buf, start_addr, (size + NAND_BLOCK_MASK_LP)&~(NAND_BLOCK_MASK_LP))
但是
#define NAND_SECTOR_SIZE_LP    2048
#define NAND_BLOCK_MASK_LP     (NAND_SECTOR_SIZE_LP - 1)
也就是最后这个函数的第三个参数(size + NAND_BLOCK_MASK_LP)&~(NAND_BLOCK_MASK_LP)是0么
lr2131 发表于 2014-12-1 15:28 | 显示全部楼层
这个我早已不记得了,那么细致的问题
lr2131 发表于 2014-12-1 15:28 | 显示全部楼层
自己查吧,也不是很难的事情
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部