裸板 nand flash K9F2G08U0C

存储类芯片的操作步骤:

1、初始化    (初始化  时序支持芯片运行周期)

2、识别      (读取设备id  验证是否初始化成功物理芯片是否正常)

3、读取或写入操作

4、擦除操作

 

初始化操作:初始化时序,使能soc nand控制器

nand flash时序图:

 

soc时序图:

nand flash 书序图中参数取值范围

由上图可以分析出:

1、竖着看第一个图每个变化的时间对对齐,

1)cle 从低到高变化:

    经过 tcls - twp 时间段后, we从高到低变化
    
2)ce 从高到低变化:
    经过 tcs - twp 时间段后,  we从高到低变化

3)ale从高到低变化:

    经过 tals  - twp 时间段后, we从高到低变化;

结合图三:

tcls 取值范围:  min  = 12ns   max 无所谓                

tcs取值范围:  min = 20 ns  max无所谓

twp取值范围: min = 12ns 

tds取值范围: min = 12ns

tal取值范围: min = 12ns

从取值范围可以看出:

如果都取到最小值,那么:

tcls - twp = 0;    tals - twp = 0;表示这些指令可以同时发出,发出CLE和WE间隔可以为0;

tcs  - twp =5;   表示一定要先发出 CE信号,延时5ns在发出写信号;

由上面两个图观察: 

 

 

 锁相环时钟分频系数: 我设置的如下

  FCLK : HCLK : PCLK = 400m : 100m : 50m 

 因此周期T =  1/HCLK = 1/100 S = 10ns   TACLS 刚好是一个周期  

图1,图2 分析:

TACLS 就是 发出写ALE之后多久发出写使能

故:TACLS (最小值) = tals - twp = 0;

TWRPH0 表示nWE拉低所持续的时间

故: TWRPH0(最小值)   twp = 12ns ;

 TWRPH1 表示 nWE拉高多久后 CLE拉低

故: TWRPH1 (最小值) = tclh = 5 ns ;

 

设置寄存器 NFCONF:

1、TACLS

duration 表示 设置参数反应所需时长, 也就是 

duration = HCLK * TACLS = 1/100 秒  * TACLS = tals  - twp     >>>>>>>>>>>>>    TACLS = 0

2、TWRPH0

duration = HCLK * TWRPH0 = 10 ns *( TWRPH0 + 1)  >= 12ns >>>>>>>>>>>  TWRPH0 = 1;

3、TWRPH1

duration = HCLK * TWRPH1 = 10 ns *( TWRPH1 + 1)  >= 5ns >>>>>>>>>>>  TWRPH1 =0;

 

 于是有代码如下:

void  nand_init()
{

    #define NFCONF  (*(volatile unsigned int *)(0x4E000000)) 
    #define NFCONT  (*(volatile unsigned int *)(0x4E000004)) 

/*设置NAND FLASH的时序*/
    NFCONF = (0<<12) | (1<<8) | (0<<4);

/*使能NAND FLASH控制器,初始化ECC,禁止片选*/
    NFCONT = (1<<4) | (1<<1) | (1<<0);
}

NFCONT:

NFCONT = (1<<4) | (1<<1)  |  (1<<0);

使能nand控制器;

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值