现今嵌入式存储产品已渗透进人们生活工作中的方方面面,从atm 机到手持通讯设备。社会对嵌入式产品的性能也有越来越高的要求:大容量,高速度,断电保护,体积限制等等。当前数据记录仪的容量和速度普遍偏小。本文旨在研究一种的数据存储容量达512mb 高速数据记录仪,它可以用于多路信号采集系统中。重点研究在嵌入式linux 系统平台的架构下基于nandflash 的存储技术。
引言
flash 是一种不挥发性内存,在无电流供应的条件下也能够长久地保持数据,相对于传统的存储介质具有无可比拟的优势。目前主要的闪存分为两类:intel 首先开发的nor flash 和东芝发布的nandflash。
nor flash 的特点是芯片内执行。应用程序可以直接在闪存内运行。不必再把代码读到系统ram 中。nor 的传输效率很高,但是写入和擦除速度很低。nandflash 存储单元的读写是以页和块为单位来进行,这种结构最大的优点在于容量可以做得很大,nand 闪存的成本较低,有利于大规模普及。主要功能是存储资料。故而现在码相机闪存卡和mp3 播放器中存储设备几乎全部是nandflash。现在大部分的嵌入式设备厂商出于成本的考虑都选择了nandflash 作为存储设备。这样增加了软件设计的复杂度,降低了系统效率而且也限制了flash 容量。
结合两类闪存的优缺点,本文中我们选择nandflash 作为数据记录仪上午数据存储器,norflash 作为数据记录仪的程序存储器。
图 1:系统整体结构图图
数据记录仪设计整体包括两块,其部分是数据采集模块一部分是数据存储模块,用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 校验。
开源AI模型全新飞跃,深空激光传输革新里程碑
Marvell全球首发400GbE以太网芯片
使用STM32单片机点亮LED
5G最新应用正在湖南华菱湘钢园区智慧工厂陆续落地
汽车互动技术如何改善驾驶及乘坐体验?
基于Nand Flash 存储技术的嵌入式linux 系统设计
华为基于iEVO算法实现多节点探针AI检测模型持续的优化测试
曙光数创成功上市 开启节能新时代!
E5122的家庭网络控制系统
新能源汽车电瓶之锂电池起火的原因都有哪些
WAIC 2022商汤元创力论坛邀你洞见未来
人们为什么开始需要自动驾驶的平行宇宙
360推出球形室外监控摄像机:2K/双云台/360°全景
智能电表的的设计突破及面临哪些挑战
电瓶修复技术—电动车电池里是干的还是水的?
倾角传感器在汽车行业领域的应用
浅谈实现汽车零部件的射频类抗扰度EMS测试的软件
人工智能虽取得长足进步,但仍然处于初级阶段
智能LED照明系统的组成
钡铼技术发布新一代OPC UA分布式 I/O控制器BL200pro助力工业物联网的数字化