nand flash驱动的学习

本文仅仅为了分享经验,并无其他目的。如果发现侵权,请联系我删除相应内容。

参考文章:

https://www.cnblogs.com/lifexy/p/7701181.html

https://blog.csdn.net/qqliyunpeng/article/details/51180276

 

自行分析MTD层,请看https://www.cnblogs.com/lifexy/p/7701181.html

 

 

nand手册
CE片选,低电平有效

控制器

NFCONF设置寄存器,设置时间
NFCONT  控制寄存器,CE在这
NFMECCD  设置ECC
NFSTAT   

1.分配一个nand_chip结构体

1.1如何设置s3c_nand_regs这个结构体
struct 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  ;
};

方法:直接看2440手册。寄存器上写的很详细


2.设置nand_chip
第2大点都是跟nand控制器相关的设置,与具体硬件无关

2.1应该为此结构体提供哪些函数??
看看nand_scan函数调用到nand_chip哪些函数。
其实就是片选,发命令,发地址,发数据,读数据,判断状态的功能

2.2片选
看原理图,片选引脚是nFCE。NFCONT  控制寄存器,CE在这。nand手册,CE片选,低电平有效

2.3发命令
区别仅仅是data送到的的寄存器不一样

2.4读写的I/O地址

2.5判断状态
一看就知道跟nfstat 寄存器相关,2440手册,nfstat 的第0位
RnB (Read-only)  [0]  The status of RnB input pin.
0: NAND Flash memory busy
1: NAND Flash memory ready to operate

3.硬件相关的设置
围绕nand控制器的寄存器,将一些硬件相关的参数设置好

3.1使能nand的时钟

3.2搞清楚HCLK。看启动信息就行。HCLK 为 是 100MHz, 则 HCLK 的周期是 1/100MHz = 10ns

3.3
NFCONF 寄存器
3.3.1TACLS[13:12]  
CLE & ALE duration setting value (0~3) 翻译:发出CLE/ALE之后多长时间才发出nWE信号

然后查表。
Duration =  tcls -twp,查 时间表 得到 15ns -15ns = 0ns
Duration = HCLK x TACLS,    所以  TACLS设为0

3.3.2
TWRPH0 的时间是 twp ,查 时间表 得到 15ns 

TWRPH0 的时间是 twp ,查 时间表 得到 15ns 
   根据寄存器中描述的计算公式:Duration =  HCLK x ( TWRPH0 + 1 )  =>  15ns = 10ns x (TWRPH0 + 1)  => TWRPH0 = 0.5 ,
由于他的取值范围是 (0~7) ,并且,时间表中的时间是最小能识别的时间,那我们取TWRPH0 = 1

3.3.3
TWRPH1 duration setting value (0~7)
Duration = HCLK x ( TWRPH1 + 1 )
TWRPH1 的时间是 tclh = 5ns
    根据寄存器中描述的计算公式:Duration =  HCLK x ( TWRPH1 + 1 ) => 5ns = 10ns x (TWRPH1 + 1) => TWRPH1 = 0 即能满足

3.3.4BusWidth (R/W)    8位
This bit is determined by GPG15 pin status during reset
and wake-up from sleep mode.
After reset, the GPG15 can be used as general I/O port or
External interrupt.
This bit can be changed by software.

翻译:
此位由复位期间的GPG15引脚状态决定。
从睡眠模式醒来。
复位后,GPG15可以用作通用I/O端口或
外部中断。
这个比特可以通过软件来改变。

看原理图,EINT21为高电平,EINT22为高电平,EINT23为低电平。
GPG13和 EINT21是同一信号。

GPG14和EINT22是同一信号。

GPG15和EINT23是同一信号。
所以BusWidth相当于被设位0

3.4NFCONT寄存器

3.4.1
Reg_nCE

During boot time, it is controlled automatically.
This value is only valid while MODE bit is 1
翻译:
在启动期间,它是自动控制的。
此值仅在模式位为1时有效。

取消片选


3.4.2
MODE  使能nand控制器

4.使用nand_scan

4.1分配并设置mtd结构体

4.2调用and_scan

5.调用add_mtd_partitions

6.使用MTD-utils调试 

6.1修改makefile,编译工具

得到众多命令。如擦除,写,读

6.2调试nand flash
法一:擦除--写入文件系统---读出--跟原来文件系统对比二进制码(同样适用于norflash)

法二:擦除(全为1)---写入---dump出来,看是不是全为1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值