【说明】
在地5章我们初始化了DDR并且进行了代码的重定位,但是注意!我们前面的重定位其实是假的,我们只过是把代码从片内内存复制到DDR中!因为我们的NAND 还没有初始化,而完整的程序在NAND FLASH中,所以我们当时没办法将完整程序复制到内存中,之所以进行了重定位是为了理解重定位的过程而已!这一章我们就来初始化NAND FLASH并且真正的实现从NAND FLASH中将代码重定位到内存中。
【原理图】
我们先来看看NAND FLASH 接线原理图
1)怎么只有数据线?,最起码的地址线呢?
其实NAND FLASH 是命令模式的,不仅要发送地址接收发送数据,还要发送命令,而这几个都是通过那个LDATA来发送的
2) 那显然要区分它们,当FCLE为高电平的时候传送命令,FALE为高电平时发送的是地址,两者都为低电平传送的是数据!
3)NCS2_NAND是片选信号,用来选通NAND FLASH 只有选中了才能用
4)FWEN和FREN是用来设置是读还是写的
5)RNB是状态引脚,如果是高电平表示读写完成,如果是低电平表示正在操作
【NAND 控制器】
6410带有NAND控制器,这就让我们对于NAND FLASH的操作变得非常简单。因为只要我们设置好一些参数,比如时序,控制器就会自动帮我们处理发送数据和接收数据,如果没有控制器,我们就得自己控制那些时序去访问NAND 比较你麻烦。下面就是如何初始化NAND 控制器。
【控制器初始化】
1】初始化管脚
首先我们得找到NAND 和 6410连接的原理图,如下
我们只关心在上边NAND原理图上标有的几个引脚,
1)CS2_NAND 和CS3_NAND 是GPIO管脚
显然都要写成10
我们不使用上拉电阻或者下拉电阻,要把前4位清0
2)剩下的是GPP管脚,原理同上的
2】配置存储控制状态寄存器
这个寄存器是看了代码去查了才知道的。
其中我们要配置这里,如下
显然,我们需要让XM0CSN[2] 用在NFCON CS0 所以就要清相应位了。。。
3】NAND FLASH 配置寄存器
我们要配置这个寄存器,里面包含了所需要的NAND的时序参数,首先给一张6410手册中的时序图
命令和地址时序图
下面是数据时序图
下面是NAND FLASH 芯片手册上对于命令的时序,我们可以计算出对应参数的值
再付一张NAND FLASH 芯片手册中各个时序的值
1)TACLS = NAND芯片手册(TCLS - TWP) = 0 ns ,
2)TWRPH0 = NAND芯片手册(TWP) = 15 ns,
3)TWRPH1 = NAND芯片手册(TCLH) = 5 ns,
4)因HCLK = 133MBHZ 故算得一时钟周期大约为7.519 ns
5)则寄存器相应为分别应写为 0,2,1 , 当然如果你不想这么麻烦,直接写777也是可以,只不过性能有影响。
4】控制寄存器
1)使能NAND控制器
2)关闭软件锁