原创 OMAP35x下OneNand的分析以及x-loader的介绍

2009-11-8 19:50 7488 11 13 分类: MCU/ 嵌入式

OMAP35xOneNand的分析以及x-loader的介绍


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


1.     OneNand


 


要分析OneNand,首先我们必须回顾一下NORNAND


两者在读写速度、密度、成本、使用寿命等方面各有千秋。与NOR Flash相比,NAND Flash的读数据速度稍慢,但是擦写速度快得多,并且在容量、使用寿命、成本上也占有较大优势。NOR Flash的编程简单,而NAND Flash的编程较为复杂。NAND Flash一般用于存储数据,而NOR Flash一般用于存储启动代码。
       NOR Flash
带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内容的每一字节(有限的地址引脚是限制其容量的因素之一)。NAND Flash使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。


这点很重要,因为NOR的接口与SRAM兼容,那么就意味着,ARM处理器只需要一个LDR指令就直接会产生相应的总线时序。说白了,就是NOR不需要任何驱动,就可以对它进行读操作。(不能直接写,因为FLASH一般都有写保护,并且写之前必须先擦除相应的地址) 相应的,由于NAND的接口复杂,读写操作都必须通过驱动才能完成。


这里就涉及到一个最基本的问题,我们引导一个系统时候都需要一个Bootloader对系统初始化。那么这个Bootloder运行之前是不可能有任何驱动的,有鸡才有蛋嘛!所以通常情况下我们是不可能直接在NAND上存放Bootloader的,必须一个NOR存放BootloaderNAND存放系统内核和文件系统。(三星的有些处理器除外,比如s3c2410s3c2440.它有一个机制是自动把NAND的前4K映射到SDRAM中)


    那么有没有FLASH能把NANDNOR的优点集合在一起呢?我想很多朋友在刚开始学习NORNAND的时候就会提出这个疑问。三星帮我们实现了,不得不佩服三星。


为了弥补NAND Flash的不足,三星公司在NAND Flash芯片内集成了一个RAM接口,命名为OneNAND Flash,这类Flash拥有与NOR Flash相同的简单接口,而且不受地址引脚的限制,即容量与地址引脚无关。它的结构如下:


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图


其中OTP是不可以擦除的,里面有出场信息以及坏块的索引。


 


我们可以看出OneNand其实就是结合了,NORNAND,接口采用了NOR的,架构采用了NAND的。事实上性能测验下来也确实是取二者之精华。BufferRam5KB1KBbootram4KB dataram。后面NAND架构还是block+page+sector的。


 


OneNand的驱动原理其实就是通过LDR直接配置OneNand内部寄存器,让其把自己NAND架构下的数据复制到BufferRam下供用户直接使用。


我们以LOAD(读)为例分析它的机制,流程图图下:



点击看大图 


(1)       首先我们把要LOADBlock地址给相应寄存器(偏移地址:F100h


(2)       然后把要LOADPage+Sector地址给相应寄存器(偏移地址:F107h


(3)       在选择要LOAD的目的为哪个DataRam(偏移地址:F200h


(4)       并且设置相应的DataRam的起始地址(偏移地址:F101h


(5)       清空中断状态寄存器(偏移地址:F241h


(6)       发送LOAD命令给命令寄存器(偏移地址:F220h


(7)       等待LOAD完成,查看中断寄存器是不是有相应标志位(偏移地址:F241h


(8)       最后在相应dataram中获取数据。


 


2.x-loader


 


  X-loader我也是在接触OMAP35x后才接触的,查看他的文件结构,发现与Uboot非常兼容,都是cpu下放有关arm的初始化,board下放板子的初始化,driver下放驱动等等。


  X-loadercpu下主要完成了常规的arm内核的初始化,这个代码与Uboot下的一致,在board下的omapebm下完成了对omap3530的总线,时钟的初始化。Uboot也有对应的代码,但是我发现有的函数根本没有完成相应的功能,而应该是在x-loder下实际完成的。


X-loader还完成了OneNand的相应初始化,并且把UbootNAND架构下,复制到BuffrtRam下,在复制到SDRAM中。


X-loader还支持从SDMMC下引导Uboot,他在CPU下有对mmc的初始化程序,可以直接把uboot.binMMC下复制到SDRAM中。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1622176 2009-12-1 23:29

我也在看这部分代码,对onenand的初始化不太清晰,你能再详细解释一下"并且把Uboot从NAND架构下,复制到BuffrtRam下,在复制到SDRAM中。"的过程吗?

用户539229 2009-11-11 10:54

至于为什么用x-loader,他只过不是Uboot的一个子集 原因是:U-BOOT 太大,塞不进 OMAP3的内部RAM。 所以 用x-load。 OMAP3 上电的时候,读取x-load 到 内部RAM,然后执行。 X-LOAD 初始化memory controller,把 u-boot 读进 外部 RAM,然后跳到 外部RAM 执行u-boot。
相关推荐阅读
用户539229 2010-01-23 22:52
vmware下debian5的安装配置以及vmtools的安装使用
一.安装vmware6.5.21.下载vmware6.5.2http://4.scdx3.crsky.com/software/vmware_652.rar2.下载vmware6.5.2汉化包http...
用户539229 2009-12-29 12:57
最新诺基亚Qt4.6的上下位机移植手记,触摸屏支持
一.PC for Winxp下的开发环境的搭建诺基亚收购Qt以后,开发了自己的集成开发环境Qt Creater。这是一个非常强大的工具,上手也很快。登陆:http://qt.nokia.com/dow...
用户539229 2009-12-11 20:14
Omap3evm下android开发第一例hello下位机运行实践
1.       驱动的安装<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 1.1...
用户539229 2009-12-09 19:01
android的windows下开发环境的搭建与hello第一例
Android的SDK的官方网址如下官方网址:http://androidappdocs.appspot.com/sdk/index.html<?xml:namespace prefix = o...
用户539229 2009-11-28 13:21
Omap3下Goole的Android操作系统的实现 相当于山寨智能机啦
首先要有一个:OMAP3EVM平台的开发板 我用的是OMAP35x的TI的评估板还要有一个SD卡 TI花了很大的功夫打造了OMAP3智能手机开发平台,给用户提供了SDK包,GDK包,以及双核的Davi...
我要评论
2
11
关闭 站长推荐上一条 /3 下一条