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

Posted 北漂程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能小车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遍以上。第一遍就听下是否是自己需要的,自己知道的知识不需要就删了。第二遍要写一个时刻表,把这节课分成几段,每段是什么内容、开始结束时间是什么都记录好。第三遍再仔细分析功能,打开代码,对照着看。




















以上是关于智能小车36:如何使用存储器NandFlash的主要内容,如果未能解决你的问题,请参考以下文章

智能小车资料大全分享给大家

智能小车35:从汇编指令bne聊起

DRL 教程 | 如何保持运动小车上的旗杆屹立不倒?TensorFlow利用A3C算法训练智能体玩CartPole游戏

智能小车 -openwrt配置详细步骤

智能小车七《上位机android》

基于STM32的智能小车--电机驱动设计