Nand Flash的驱动程序

本文介绍了NAND Flash的基本操作问题,包括地址和命令的传输方式、烧写完成的判断以及S3C2440内部控制器如何简化操作。还详细阐述了S3C2440的NAND Flash驱动初始化过程,涉及nand_chip结构体设置、硬件参数配置以及测试步骤,包括取消内核自带驱动、制作新内核、使用NFS根文件系统等。
摘要由CSDN通过智能技术生成

一、关于NAND FLASH的基本问题:

问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?
答1.在DATA0~DATA7上既传输数据,又传输地址
当ALE为高电平时传输的是地址,

问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令怎么传入命令?
答2.在DATA0~DATA7上既传输数据,又传输地址,也传输命令
当ALE为高电平时传输的是地址,
当CLE为高电平时传输的是命令
当ALE和CLE都为低电平时传输的是数据

问3. 假设烧写NAND FLASH,把命令、地址、数据发给它之后,
NAND FLASH肯定不可能瞬间完成烧写的,怎么判断烧写完成?
答3. 通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平表示正忙

问4. NAND Flash引脚描述?
答4. CLE:指令锁存使能 ALE:地址锁存使能 CE:芯片使能
RE: 读使能 WE:写使能 WP:写保护
R/B:就绪/忙

问5. 怎么操作NAND FLASH呢?
答5. 根据NAND FLASH的芯片手册,一般的过程是:
a. 发出命令
b. 发出地址
c. 发出数据/读数据

由于S3C2440内部存在NAND Flash的控制器,可以方便开发,省掉很多繁琐的操作比如说发命令,它需要经历“选中芯片”、“CLE设为高电平”、“在DATA0~DATA7上输出命令值”发出一个写脉冲”一系列操作才可以实现发命令,但是斗鱼S3c2440的内部NAND Flash的控制器的存在,只需要令寄存器“ NFCMMD=命令值”就可以实现。
这里写图片描述

6.用UBOOT来体验NAND FLASH的操作:
这里写图片描述
这里写图片描述

二、驱动程序框架

static int s3c_nand_init(void)
{
1.分配一个nand_chip结构体
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. 设置nand_chip
s3c_nand->select_chip = s3c2440_select_chip;
s3c_nand->cmd_ctrl = s3c2440_cmd_ctrl;
s3c_nand->IO_ADDR_R = &s3c_nand_regs->nfdata;
s3c_nand->IO_ADDR_W = &s3c_nand_regs->nfdata;
s3c_nand->dev_ready = s3c2440_dev_ready;
s3c_nand->ecc.mode = NAND_ECC_SOFT; //ECC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. 硬件相关的设置: 根据NAND FLASH的手册设置时间参数
3.1 设置 TACLS、TWRPH0、TWRPH1三个参数
3.2 取消片选 、使能NAND FLASH控制器
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4. 使用: nand_scan
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5. add_mtd_partitions

}

static void s3c_nand_exit(void)
{

}


以上需要用到的函数定义
static void s3c2440_select_chip(struct mtd_info *mtd, int chipnr)
{
if (chipnr == -1)
{
/* 取消选中: NFCONT[1]设为1 */
}
else
{
/* 选中: NFCONT[1]设为0 */
}
}

static void s3c2440_cmd_ctrl(struct mtd_info *mtd, int dat, unsigned int ctrl)
{
if (ctrl & NAND_CLE)
{

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值