新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Flash的大容量高速数据记录仪设计

基于Flash的大容量高速数据记录仪设计

作者:时间:2012-02-14来源:网络收藏

现今嵌入式存储产品已渗透进人们生活工作中的方方面面,从ATM 机到手持通讯设备。社会对嵌入式产品的性能也有越来越高的要求:度,断电保护,体积限制等等。当前的容量和速度普遍偏小。本文旨在研究一种的存储容量达512MB ,它可以用于多路信号采集系统中。重点研究在嵌入式linux 系统平台的架构下Nand 的存储技术。

本文引用地址:http://www.eepw.com.cn/article/149698.htm

引言

FLASH 是一种不挥发性内存,在无电流供应的条件下也能够长久地保持数据,相对于传统的存储介质具有无可比拟的优势。目前主要的闪存分为两类:Intel 首先开发的NOR flash 和东芝发布的Nand

Nor 的特点是芯片内执行。应用程序可以直接在闪存内运行。不必再把代码读到系统RAM 中。NOR 的传输效率很高,但是写入和擦除速度很低。Nandflash 存储单元的读写是以页和块为单位来进行,这种结构最大的优点在于容量可以做得很大,NAND 闪存的成本较低,有利于大规模普及。主要功能是存储资料。故而现在码相机闪存卡和MP3 播放器中存储设备几乎全部是NandFlash。现在大部分的嵌入式设备厂商出于成本的考虑都选择了NandFlash 作为存储设备。这样增加了软件的复杂度,降低了系统效率而且也限制了Flash 容量。

结合两类闪存的优缺点,本文中我们选择NandFlash 作为数据上午数据存储器,norflash 作为数据记录仪的程序存储器。

图 1:系统整体结构图图

图 2:系统应用软件流程

数据记录仪整体包括两块,其部分是数据采集模块一部分是数据存储模块,用TLC2578 芯片来实现数据采集AD 转换,系统的调度核心是ARM 处理器,在这里使用S3c2440,ARM 主要负责核心处理和控制。存储器负责程序和数据的存储,其中Nand FLASH 存储数据文件,Nor Flash 负责存储bootloader,操作系统内核和文件系统,SDRAM 存储系统运行时的程序和数据,ARM 通过GPIO 连接相关继电器、触发设备、输出电压控制设备、以及特定设备采样A/D 并进行驱动。

S3C2440 是三星公司的ARM920T 的ARM 控制器:支持32 b 的AMBA 总线接口;带有MMU,可以进行Linux 操作系统的移植;支持大页NAND 闪存控制器。NandFlash 芯片选用K9F4G08U0M,这是Samsung 生产的512 MB 的NAND Flash 存储器。内部存储结构为(2K+64)字节×32 页×4 096 块,NAND Flash 接口信号比较少,数据线宽度只有8bit,CLE 和ALE 两个引脚信号用来区分总线上的数据类型,没有地址总线。Nor Flash 采用16MX16 位的E28F128J3A,NORFlash 接口与系统总路线完全匹配,16 个数据输入输出引脚,可以连接在系统总线上。NORFlash 有三个芯片片选引脚信号,选用

作为片选信号,与处理器

引脚相连。BYTE接高电平,表示Flash 在16 位数据传输模式下。

系统软件组成

本系统的软件部分包括应用程序和系统程序,应用程序主要是 AD 采集和读写Flash,见图2,而系统程序就是应用程序工作的软件平台。它由以下部分组成:系统引导程序、嵌入式操作系统linux 内核、文件系统。

系统引导程序负责将操作系统内核固化到Flash 中和系统初始化工作,然后将系统控制权交给操作系统。在本文里我们使用uboot 作为系统引导程序。嵌入式操作系统内核是嵌入式系统加电运行后的管理平台,负责实时性任务和多任务的管理,这里选择嵌入式linux 内核。

文件系统是对一个存储设备上的数据和元数据进行组织的机制。Linux 文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。JFFS2 是专门针对嵌入式系统中的Flash 存储器的特性而的一种日志文件系统。YAFFS2 支持大页面的NAND 设备,并且对大页面的NAND 设备做了优化。

软件平台固化在Nor Flash 中。根据软件平台的内容 对Nor Flash 的地址空间进行分区,这里分三个区,分别存放bootloader、Linux 内核和文件系统。

NandFlash 驱动设计

NandFlash 驱动程序框架

按照 linux 下驱动编写规范编写nand flash 驱动,其实主要工作就是实现下面这个结构体中的函数。

s3c2440_nand_drive 这个结构体用于向内核注册Nand Flash 设备,它会被platform_driver_register 函数调用到。其中s3c2440_nand_probe 是最重要的,它完成对nand 设备的探测。

Nand_scan 是在初始化nand 的时候对nand 进行的一步非常好重要的操作,在nand_scan 中会对我们所写的关于特定芯片的读写函数重载到nand_chip 结构中去,并会将mtd_info 结构体中的函数用nand 的函数来重载,实现了mtd 到底层驱动的联系。并且在nand_scan 函数中会通过读取nand 芯片的设备号和厂家号自动在芯片列表中寻找相应的型号和参数,并将其注册进去。

NandFlash 读页操作函数

NandFlash 读数据操作以页为单位,读数据首先写入读数据命令00H(如图3),然后输入要读取页的地址,接着从数据寄存器中读取数据,最后进行ECC 校验。

NandFlash 写操作

写操作其实就是对页进行编程命令。见图4,首先写入80h 开始编程模式,接下来写入地址和数据; 最后写入10h 表示编程结束。程序如下:

图3:读NandFlash 流程

图4: 写NandFlash 流程

NAND Flash 块擦除

本论文所用到的Nand Flash 的块大小是32X(2k+64)Byte,整块擦除。命令代码流程:首先写入60h 进入擦写模式,然后输入块地址,接下来写入D0h, 表示擦写结束。

测试结果

在测试 Nand Flash 的读写速度时,我们通过TFTP 将数据下载到RAM 中,Nand Flash 进行读、编程、擦写测试。这样可以比较真实的测试Nand Flash 的读写速度,测试结果表明从NandFlash 读4MBbytes 的数据所用的时间是3886ms,向Nand Flash 写4Mbytes 数据所用的时间是14026ms,擦除NandFlash 中的4MByte 需要的时间是6 毫秒。这个速度还是比较理想的,完成对32 路AD 采集过来数据的实时存储是足够的。而且512MByte 的数据存储空间对于数据记录仪而言是一个非常大的容量。

结论

测试结果表明数据记录仪存储速度是比较理想的,完成对AD 采集过来数据的实时存储是足够的。而且512MByte 的数据存储空间对于数据记录仪而言是一个非常大的容量。



评论


相关推荐

技术专区

关闭