pax270 nand驱动

今天看了对几个对nandflash操作的例子程序。对nand的工作过程有了更清除的了解。另外看了一下2K页面和512页面的芯片手册。发现发送命令的有区别,另外在写地址时也有区别,读写时,512页面写地址时需4个周期,而2k页面需5个周期。块擦除时都是3个周期。在nand_base.c文件中也体现出了这个区别,512页面的命令函数是nand_command,2K页面的命令函数是nand_command_lp。
======================================================================
今天看nand驱动,发现pax270_nand.c中的函数smc_hwcontrol只是在初始化时被调用了以后再不会调用到此函数。在初始化时所调用的两次分别是:
this->cmd_ctrl(s3c2410_mtd, 0, NAND_CTL_SETNCE);实际执行GPCR0 = 1<<10;
this->cmd_ctrl(s3c2410_mtd, 0, NAND_CTL_CLRNCE);实际执行GPSR1 = 1<<10;
所以最主要的函数是smc_command,它完成了命令的发送,以及ALE和CLE的控制。
=========================================================================

修改pax270_nand.c文件中的smc_command函数,使其可支持512页面和2k页面的nandflash。其中smc_command是512调用的命令函数,smc_command_lp是2k页面调用的命令函数,这两个函数之一在初始化时赋给this->cmdfunc:如果是512页面this->cmdfunc = smc_command;如果是2k页面this->cmdfunc = smc_command_lp;
另外还要注意在定义分区时partition_info指明了nandflash的大小。

对代码又进行了修改,利用mtd自带的nand_command和nand_command_lp这两个函数,修改pxa270_nand.c中的smc_hwcontrol函数,实现了512页面和2k页面nandflash驱动。另外在partition_info中指明大小为MTDPART_SIZ_FULL,初始化时对nandflash单独做一次复位处理。

对ARRAY_SIZE进行解释如下:
static struct mtd_partition partition_info[] = {
              { name:                "Nand",
                  offset:            0,
                  size:                MTDPART_SIZ_FULL }
};
#define NUM_PARTITIONS (ARRAY_SIZE(partition_info))
此时NUM_PARTITIONS等于1,也就是说Nand有一个分区。

static struct mtd_partition partition_info[] = {
              { name:                "Nand",
                  offset:            0,
                  size:                MTDPART_SIZ_FULL },
              {}
};
#define NUM_PARTITIONS (ARRAY_SIZE(partition_info))
此时NUM_PARTITIONS等于2,也就是说Nand有两个分区。
============================================================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值