基于JZ2440的NAND FLASH的驱动程序的实现

本文的主要任务是实现JZ2440开发板板载的型号为K9F2G08U0A的容量为256MB、位宽为8位的NAND FLASH驱动程序的开发。


一、前期准备

开发板:JZ2440(ARM9)

内核版本:Linux-3.4.10

  NAND FLASH : K9F2G08U0A( 256MB   8bit   3.3V)

重新配置内核,去掉已有的NAND FLASH的驱动程序。


二、K9F2G08U0A大简单介绍

K9F2G08U0A三星电子设计的NAND FLASH类型的存储半导体,它的大小为256MB,位宽为8bit,支持ECC坏块检测机制。

1、原理图布局和基本引脚定义


各个引脚的具体定义:

        LDATA0~LDATA7:数据、地址、命令传输引脚,具体传输什么类型数据由ALE、CLE决定

        RnB :状态判断引脚,用它来判断flash是处于忙碌还是就绪状态

        CLE :命令锁存信号,为高电平时数据线上发送命令

        nFCE:片选信号,为低电平表示选中

        ALE:地址锁存引脚,为高电平时数据线上发送地址

        nFWE:写信号,为低电平时表示在数据线上写入

        nFRE:读信号,为低电平时表示从数据线上读取数据

2、存储单元基本布局


从上图可以看出,该NAND flash是按页来存储数据的,每一页的大小是2KB + 64Bytes,其中前面2KB是用来存放真正的数据的,后面的64Bytes数据作为ECC用来检测该页数据是否有效;每一个块包括64页数据。


三、驱动程序的实现

1、编写一个nand flash的驱动程序大致有如下步骤:

a、分配一个nand_chip的结构体变量

b、设置这个结构体的变量

c、执行硬件相关的操作

d、使用这个结构体变量,并添加设备分区

2、具体实现

2.1 基本工作,实现如下:

/* 定义一个结构体来描述s3c2440 nand 控制器的寄存器 */
struct yl_s3c_nand_regs {
	unsigned long nfconf  ;
	unsigned long nfcont  ;
	unsigned long nfcmd   ;
	unsigned long nfaddr  ;
	unsigned long nfdata  ;
	unsigned long nfeccd0 ;
	unsigned long nfeccd1 ;
	unsigned long nfeccd  ;
	unsigned long nfstat  ;
	unsigned long nfestat0;
	unsigned long nfestat1;
	unsigned long nfmecc0 ;
	unsigned long nfmecc1 ;
	unsigned long nfsecc  ;
	unsigned long nfsblk  ;
	unsigned long nfeblk  ;
};

/* 定义一个结构体方便对nand驱动的操作 */
struct yl_nand_mtd{
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值