智能小车36:如何使用存储器NandFlash

之前我写过一篇文章来介绍硬改tp-link路由器,就是更换它的flash。那个时候就发现路由器这种设备硬盘(flash)的容量比内存容量小得多,flash是16MB,内存是64MB。今天买了本嵌入式的教程才知道,存储器的分类是这样的。flash不是硬盘,但可以当个硬盘用。这和我们的pc机的存储设备不一样,如下图:



在这之前的程序,要么是在片内内存(4k)里执行的,要么是从sdram执行的。在nandflash这课里,开始用代码从nand flash里读取数据。


先从代码结构上分析分为哪几步:

其中的第1、2、5以前面已经了解过,这节重点学习下nand初始化与nand读取这两步(3、4)如下图:

上图里的设置时序的值来源于2440的数据手删,查寄存器NFCONF一节。同理控制也是查寄存器,寄存器名是NFCONT。而写地址里为什么要分5步,为什么要发0命令与30命令,这是从nand flash的数据手册查到的。



下面是链接文件(nand.lds)的分析:
SECTIONS {

firtst    0x00000000 : { head.o init.o nand.o}

second    0x30000000 : AT(4096) { main.o }

}

意思是把可文件(bin)分成两段,而第一段(head.o,init.o,nand.o)应该放到地址0里去,第二段(main.o)应该放到地址0x3000000里去。上面的4096是什么意思?上电时会把nandflash的前4k内容(head.o,init.o,nand.o)复制到片内内存。sdram的起始地址是0x3000000,而4096之后的内容(main.o)复制到sdram里面去,然后就执行sdram里的main程序就可以了。



那些设置的栈地址还没搞明白,后面再看看有没有讲的。我目前的学习经验是,正常的每节课要听3遍以上。第一遍就听下是否是自己需要的,自己知道的知识不需要就删了。第二遍要写一个时刻表,把这节课分成几段,每段是什么内容、开始结束时间是什么都记录好。第三遍再仔细分析功能,打开代码,对照着看。





文/程忠 浏览次数:0次   2017-10-09 08:05:21

相关阅读


评论: