基于VxWorks的NAND FLASH驱动程序设计

发布者:sky0001最新更新时间:2010-05-25 来源: 现代电子技术关键字:NAND  FLASH  Vxworks  TrueFFS 手机看文章 扫描二维码
随时随地手机看文章

  0 引 言

  目前,随着电子技术的不断发展,计算机技术也得到飞速的发展,产生了很多新技术。但就计算机的基本结构来说,还是基本采用了冯·诺依曼结构。然而冯·诺依曼结构的一个中心点就是存储一控制,所以存储器在计算机系统中的作用是非常重要的。嵌入式计算机作为计算机中的一个类别,对执行速度和系统可靠性都有较强的要求,这也决定了嵌入式系统不仅要有实时性很强的操作系统,同时也需要一种安全、快速的存储设备。同时,嵌入式系统经常会涉及到海量数据的存储,这就要求存储设备必须具有可靠性高,功耗低,容量大,掉电数据不丢失等特点,而NAND FLASH芯片正好具有这些优点。

  VxWorks是嵌入式领域内公认的最有特色的高性能实时操作系统之一。它以其良好的可靠性和卓越的实时性,被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通信、军事演习、弹道制导、飞机导航等。

  目前,在VxWorks实现上,涉及文件系统的文章不少,但一般都是针对容量较小,操作相对简单的NORFLASH实现的。本文讨论了如何在以AMCC公司的Power PC芯片PPC440epx为核心的嵌入式平台上,利用三星公司的大容量NAND FLASH实现文件系统的具体办法。

  1 三星NAND FLASH芯片K9F2G08QOM

  K9F2G08QOM芯片的容量为256 M×8 b="2" Gb的数据区,再加上64 Mb的备用区。一块这种芯片被分为2 048个块,每个块又分为64页,每页由2 KB的数据区加上64 B的备用区组成。如图1所示,列地址为12 b(A11~A0)。当A12为0时,A10~A0确定对每页中2 KP;数据的访问;当A12为1时,访问的是64 B的备用区。由于NANDFLASH芯片在出厂时就可能出现坏块(块中的某个或多个bit不能有效的进行读写),为了将其标注出来,三星公司保证每个坏块的第一页和第二页备用区第一个byte的数据没有被初始化为0xFF。设计人员要确保在对该芯片进行擦除之前,先将这个信息保留起来(建一个坏块表)。行地址为17 b(A28~A12)。它确定了对2 048块×64页=128 K个页中的某一页进行访问。为了简化NAND FLASH芯片的管脚,其地址和数据信息共享8个I/O管脚,因此,其29 B的地址信息被设计为5个周期进行传输。具体操作如表1所示。

  注:起始地址是列地址;L表示必须置为低电平

  对NAND FLASH的操作流程比较简单,即在第一个周期里送操作相关的命令字,然后送地址,以及相应的数据,最后送确认字。需要说明的是,由于地址、命令和数据都共用8个I/O管脚来进行传输,因此在硬件上必须要有专用的管脚来区分传输类型(在传输命令的时候,命令锁存使能信号CLE有效;在传输地址的时候,地址锁存使能信号ALE有效)。具体的命令字、时序和操作流程在K9F2G08Q0M的数据手册上有较详细的描述,在此不一一详述。

  2 PPC440epx的NAND FLASH接口

  AMCC公司的PPC440epx芯片是一款性能指标较高的嵌入式CPU芯片,其主频可以达到667 MHz,拥有DDR2接口,可支持千兆以太网,USB 2.0接口,支持浮点运算,同时还支持NAND FLASH芯片。

  PPC440epx使用一个NAND FLASH Controller作为外部NAND FLASH与其外部总线通信的接口电路,该控制器最多可以支持4个NAND FLASH芯片,每个芯片的容量可以为4~256 MB,每页的大小可以为512 B+16 B或者2 KB+64 B。NDFC(NANDFLASH Controller)的存在使得对NAND FLASH的操作变的非常简单。根据前面对K9F2G08Q0M的介绍可知,对NAND FLASH的操作需要在硬件上产生ALE,CLE信号来区分传输类型。NDFC给程序设计人员提供两种实现时序的方法:硬件实现,软件实现。如果是前者, NDFC提供了几个寄存器:命令寄存器、地址寄存器、数据寄存器、配置寄存器和状态寄存器。通过对这几个寄存器执行相应的读/写操作就可以产生相应的时序。例如,如果需要对NAND FLASH写命令字80H,则只需将80H写人命令寄存器即可。NDFC自动将80H送到I/O7~I/O0上,同时置CLE为有效状态。而软件实现方法是根据K9F2G08Q0M的时序要求,通过对硬件控制寄存器中相应的bit写1或者0,使得对应的控制信号为高电平或者低电平。设计人员可以根据自己的情况,选择实现方法。这里推荐采用硬件实现的方法。不过,在有问题时,可采用软件实现的方法来进行调试。

  3 TrueFFS简介

  TureFFS(Ture Flash File System)是M-Systems公司为VxWorks操作系统定制的实现FLASH块设备的接口。通过使用TFFS,应用程序对FLASH的读写就像对拥有MS-DOS文件系统的磁盘设备操作一样。对于上层设计人员,TFFS屏蔽了底层多种多样FLASH设备的具体细节。同时,由于FLASH存储芯片自身的一些特性(如擦除、编程次数有限并且操作时间较长;容易进入过度编程状态等),TFFS采用虚拟块、损耗均衡、碎片回收、错误恢复等机制来提高 FLASH的使用寿命,确保数据完整,优化性能。

  4 TrueFFS的实现

  4.1 TrueFFS的基本结构

  TrueFFS由1个核心层和3个功能层组成,它们是翻译层(Translation Layer)、MTD(Memory Tech-nology Drivers Layer)层和Socket层,其结构框图如图2所示。

  (1)交互功能。它包含了控制FLASH映射到块、wear-lev-eling、碎片回收和数据完整性所需的智能化处理功能。目前,有三种不同的翻译层模块可供选择。选择哪一种层需要看所用的FLASH介质是采用NOR-based,还是NAND-based,或者SSFDC-based技术而定。

  (2)MTD(Memory Technology Driver)层实现具体的FLASH芯片底层程序设计,包括读、写、擦、ID识别、映射等功能,以及一些与FLASH芯片相关的参数设置。

  (3)Socket层提供了TrueFFS和硬件之间的接口服务,负责电源管理、检测设备插拔、硬件写保护、窗口管理和向系统注册Socket等;

  (4)核心层将其他3层有机结合起来,另外还处理全局问题,如信号量、碎片回收、计时器和其他系统资源等。

  在VxWorks中,由于翻译层和核心层以二进制形式提供给设计人员的,因此实现TFFS的主要工作集中在对MTD层和Socket层的设计上。

  4.2 Socket层的实现

  如果VxWorks中包含TFFS,在系统启动后,先完成内核的初始化,之后开始进行I/O的初始化操作。系统调用UsrRoot()函数,该函数再调用 tffsDrv()函数,这样就产生如图3所示的调用流程。调用这些函数的目的之一就是注册socket驱动函数。最后的注册操作都是由 xxxRegister()函数完成(这个函数和sysTff-sInit()函数的定义都在sysTffs.c中)的。该函数是通过更新 FLSocket结构体来完成注册操作的。该结构体的定义以及相关细节可以通过阅读VxWorks的帮助文件获得,在此不详述。

  sysTffs.C文件的编写,可以参考其他的BSP来完成。config目录下的任何一个BSP都有该文件,设计人员可以复制其中一个到自己的BSP目录下。例如:复制wrPpmc440gp目录下的sysTffs.c文件,再根据自己的硬件电路修改FLASH BASE ADRS以及FLASHSIZE的宏定义,同时添加宏定义:#define INCLUDE_MTD_NAND。其他地方一般不需要改动。

  4.3 MTD层驱动程序的实现

  要创建一个TFFS块设备,首先应该调用函数tffsDevCreate(),这样就产生了如图4所示的一系列的调用函数。系统通过这一系列的调用函数来确认具体的MTD层程序。确认过程在flIdentifyFlash()函数中完成。flIdentifyFlash()通过逐个执行 xxxIdentify()表中的程序来确定合适的MTD。如果系统只有一种FLASH,则只需写一个Identify()函数可。与Socket层类似,MTD层的核心工作也是针对一个数据结构(FLFLASH)而进行的初始化操作。通过初始化操作来注册FLASH芯片的处理函数,具体的实现是在函数 xxxldentify()中完成的。

  根据前面的介绍知道,MTD层的主要功能是实现对FLASH芯片的读、写、擦、ID识别、映射等操作。而对不同FLASH芯片的相应操作是有一定差别的,所以使用不同的FLASH芯片时,MTD层的程序设计也是不一样的。开发人员的工作是根据系统使用的具体FLASH芯片来完成相应的程序设计。

  Tornado提供了几种FLASH的TrueFFS MTD层驱动的参考设计。在installDir\target\src\drv\tffs中,主要包括Intel,AMD等公司的几种FLASH的 TrueFFS MTD层驱动。虽然没有需要的K9F2G08驱动程序,但可以根据其结构来设计自己的MTD程序。具体做法是在BSP目录下建立一个MTD层驱动文件,将其取名为K9F2G08Mtd.C。在该文件中首先编写函数nandMTDIdentify(),如下所示为程序片段:

  完成上述代码后,剩下的工作就是完成在函数nandMTDIdentify()中引用的readFlashID(),nand-MTDRead()。 nandMTDWrite(),nandMTDErase(),nandMTDMap()这几个函数的代码编写。由于不同的FLASH芯片,时序不同,因此这几个函数的实现也不同。必须根据芯片K9F2G08的数据手册上时序的要求,对PPC440epx的相应寄存器进行读/写操作,以完成这些功能。由于篇幅原因,这几个函数的具体代码就不再赘述。建议在Boot Loader工作正常后,先在应用程序中对这些函数进行调试。这样就可以利用单步和断点等工具进行调试,并且在修改后可立即通过网络下载程序。

  4.4 TrueFFS的配置

  在完成上述代码的编写后,还要做如下工作:在配置文件config.h中增加定义INCLUDE_TFFS和IN-CLUDE_DOSFS,使得 TrueFFS组件和DOS文件系统被包含进来。并且要在MakeFile文件MACH_EXTRA一项中添加K9F2G08Mtd.o,这样可将 TureFFS文件驱动程序加入系统。另外,还要在tffsConfig.c文件中的mtdTable[]表中添加上述的函数nandMTDI- dentify。

  5 结 语

  在此介绍如何在由AMCC公司的CPU芯片PPC440epx、三星公司的NAND FLASH构成的硬件平台上和VxWorks软件平台上,实现TrueFFS。按照上述设计流程,实现了NAND FLASH的驱动程序设计。能够对K9F2G08进行正常的读、写、擦、ID识别、映射等操作。同时,在VxWorks操作系统上,实现了 TrueFFS。这样就提高FLASH使用寿命,确保数据完整,优化了FLAsH的性能。以此为基础的系统在某机载设备上得到成功运用。

关键字:NAND  FLASH  Vxworks  TrueFFS 引用地址:基于VxWorks的NAND FLASH驱动程序设计

上一篇:基于NiosⅡ的电能质量监测系统设计
下一篇:基于嵌入式LINUX的电能量数据采集终端的开发

推荐阅读最新更新时间:2024-05-02 21:03

前苹果技术高手推新软件 iPad可虚拟运行Flash
      北京时间2月23日消息,据国外媒体报道,iPad不允许运行Flash。而日前,前苹果技术高手创办的一家公司OnLive推出新软件,可让iPad用户观看Flash内容。   位于旧金山的科技新创公司OnLive之前曾面向iPad推出“OnLive桌面”,让iPad支持Windows应用软件。本周三,该公司对该产品进行了升级,实现了对Adobe的Flash的支持。   据悉,用户看到的只是运行结果和界面,真正的Windows软件和Flash软件则运行于网络服务器上,界面通过高速互联网以流媒体方式传递给用户。在新版桌面中,OnLive公司推出了一个支持Flash的浏览器,可以浏览任何Flash内容。  
[手机便携]
NAND闪存价格走好 东芝晶圆厂产能满载利润大涨
Jefferies Japan高级分析员David Motozo Rubenstein日前透露,东芝(Toshiba)公司NAND闪存晶圆厂的产能利用率已经处于最高位。 事实上,东芝公司的业务表现正在发生变化。David表示,“东芝认为供需形势处于有利状况,由于晶圆厂产能利用率达到100%,公司不得不回绝了25%的订单。” 还有更好的消息。NAND闪存“2006年平均售价下降70%,东芝曾经预计2007年更进一步下滑50%,但是到目前为止,价格还高于预计之上。” 价格已经触底。David表示,“由于闪存价格走好,在2007年第1季度,该公司将运营利润从400亿日元(3.455亿美元)修订为700亿日元(6.05亿美元)。”
[焦点新闻]
推进3D XPoint™ 技术,美光科技将收购IM Flash Technologies
美光科技公司今日宣布,公司计划对英特尔在双方的合资公司 IM Flash Technologies, LLC (简称“IM Flash”) 中的权益行使认购期权。 美光科技总裁兼首席执行官 Sanjay Mehrotra 表示:“美光科技对 IM Flash 的收购表明,我们坚信 3D XPoint 技术和其他新兴存储技术将为公司提供独一无二的差异化优势,并为海量数据需求的新型应用提供不可或缺的重要解决方案。这项投资能让美光科技拥有成熟的研发和制造工厂,拥有在创新和执行方面有着卓越纪录并高技能型人才队伍。” 美光科技可以从 2019 年 1 月 1 日起行使认购期权。这笔交易将在美光科技执行认购期权后的 6 到 12 个
[半导体设计/制造]
下载程序时出现Cannot Load Flash Device Description!情况
下载程序时出现Cannot Load Flash Device Description! 情况如下图: 解决办法:
[单片机]
下载程序时出现Cannot Load <font color='red'>Flash</font> Device Description!情况
MSP430F5438A 内存Flash 读写操作
1、msp430的存储结构采用冯.依曼结构,即RAM和Flash在同一个寻址空间内统一编址,没有代码空间和数据空间之分。 2、Flash是以段为为基本结构进行存储的。总体上分三部分: Flash主存储区:用于存储程序代码,被分成4个扇区,每个扇区分128seg, 每个seg段 大小为 64 * 1024 / 128 = 512B。 Flash控制器可以以位、字节、或者字的格式写入Flash控制器。但是控制器最小的擦除单位是段 。 BSL存储区:是存储器的引导加载存储器,可以用于存储引导加载程序,分4段,每段512B,每段可以单独擦除、 信息存储区:主要用于存储需要掉电后永久保存的数据,分4段,每段128B。 每段可以
[单片机]
NAND Flash价格崩盘前夕,国内存储面临大考验!
据悉,在经过为期一年半的价格暴涨之后,部分存储芯片的价格突然急速下滑,之后三星电子发布了一份并不乐观的2017年业绩预期,这两件事情让那些押注芯片行业的投资人陷入了深深的不安,一些投资人曾经认为芯片行业的红火至少还将持续一年半的时间。 此前有新闻指出,被广泛用在智能手机上的闪存芯片的价格在2017年第四季度出现了下跌,跌幅将近5%左右。伴随着这样的消息,一些分析人士预期今年存储芯片的市场增幅只能达到30%,较去年下降一半以上。 受此消息影响,上周三星电子的股票价格暴跌7.5%,另外三星的竞争对手SK海力士的股价也出现了大幅下跌,跌幅达6.2%。但是在分析人士看来,存储芯片市场应该不会出现突然间的大跌,2018年应该会是相对
[嵌入式]
Spansion研发工厂完成300mm转变,有意布局NAND市场
Spansion公司在介绍其成长策略的同时,宣布其研发工厂已完成从200mm向300mm晶圆的转变。Spansion公司的亚微米开发中心(SDC)位于美国加州桑尼维尔,是该公司先进制造工艺的核心。Spansion将把先进制造工艺转移到它在日本即将投产的SP1 300mm晶圆厂。 Spansion是全球最大的NOR闪存供应商,日前亦宣布了令人失望的销售业绩,并公布连续第10个季度亏损。 有些人猜测,Spansion亏损缘于手机厂商摩托罗拉的增长放缓。Spansion的最大市场是手机,其次是嵌入领域。 Spansion在公布业绩的同时,介绍了成长策略。它计划扩展其核心的NOR业务,布局NAND市场,并加快建设其300mm工厂。
[焦点新闻]
U-boot-2014.04移植到MINI2440(8) nand flash 读写支持移植
上一篇帖子分析了nand flash,这篇帖子开始移植u-boot对nand flash的读写支持,进入正题。 一.修改mini2440.h 之前再初步移植的时候注释掉了nand的相关部分,这里再打开,在mini2440.h的第96行: #define CONFIG_CMD_NAND 既然打开了nand的配置,就需要在nand configuration里面做配置,在mini2440.h里面只有s3c2410的,这里需要进行添加,在第187行,红色字体为添加进去的部分: /* *NAND configuration */ #ifdef CONFIG_CMD_NAND #ifde
[单片机]
U-boot-2014.04移植到MINI2440(8) <font color='red'>nand</font> <font color='red'>flash</font> 读写支持移植
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved