今天看了对几个对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有两个分区。
============================================================
======================================================================
今天看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[] = {
};
#define NUM_PARTITIONS (ARRAY_SIZE(partition_info))
此时NUM_PARTITIONS等于1,也就是说Nand有一个分区。
static struct mtd_partition partition_info[] = {
};
#define NUM_PARTITIONS (ARRAY_SIZE(partition_info))
此时NUM_PARTITIONS等于2,也就是说Nand有两个分区。
============================================================