系统解决方案 ≯≮≮警簟鬈 NAND Flash在嵌入式Linux平台下的驱动实现 赵俊杰,刘相兴,牛东涛,许克 (国网山东省电力公司菏泽供电公司,山东菏泽274000;山东智洋电气股份有限公司,山东淄博255000) 摘 要:以A Ⅵ9MCIMX287处理器为例,以嵌入式Linux操作系统为平台,介绍基于MTD的NAND Flash驱动 的实现,为NANDFlash设备驱动的移植提供参考。 关键词:嵌入式系统;Linux;NAND Flash:MTD 0引言 随着嵌入式产品的快速发展,存储器成为其中重 要部分,NAND Flash因具有体积小、读取速度快、容 量大等优势,非常适用于嵌入式设备的存储 。如何 快速进行NAND Flash设备驱动的移植,是每一个开 发人员关注的问题。本文以ARM9MCIMX287处理器 为核心,以MX30LF1G08AA—TI NAND Flash芯片的驱 动移植为例,介绍嵌入式Linux系统下基于MTD的 NAND Flash驱动实现。 1硬件平台 本文采用的嵌入式硬件平台以Freescale公司的 ARM9MCIMX287处理器为核心,NAND Flash存储器 选用MX30LF1G08AA—TI E3]。该Flash芯片有128MB存 储空间,通过SPI接口实现与ARM9MCIMX287的数 据通信,其电路如图1所示。 图1 NAND Flash硬件电路 2 MTD的实现 MTD是用于访问Memory设备的Linux子系统, 为Linux系统与Memory设备间提供一个抽象的接 口,其体系结构如图2所示 。 收稿日期:2016.06.24 图2 MTD结构 要实现MTD驱动.需在MTD选项中进行如下配置 < >Memory Technology Device(MTD)support [ ]MTD Technology support < >Direct char device access to MTD devices <*>Caching block device access to MTD devices NAND Flash Device Drivers < >SMC Device support <*>Simple Block Device for Nand Flash r ]Use MTD From SMC 3 Nand Flash驱动实现 选用的NAND Flash为MX30LF1G08AA-TI,查找手 册,可知其厂商ID为cb(C2,设备ID为0XF1,128MB。 3.1注册设备 (1)编辑内核和uboot下的driveo'mtd/nand/nand—ids. C,添加设备ID为0xF1,128MiB的设备描述: f‘‘NAND 128MiB 3.3V 8一bit”,0xF1,128,0,LP一 0PTINOSl 添加芯片厂商描述: Structnand—manufacturesnand—manuf_ids[]=f {0Xc2,”MX30LF1G08AA-TI”) f0x0,”Unkonwn”} }; (2)编辑driver/mtd/nand_device_info.c,在结构体 nand—deviceinfo—_table—type一2中插入如下代码: Static structnand device infcnand device info table 自动化应用 2016 11期 34 _type—initdata={ {~end of table=false, .(2)修改启动参数如下: ”boota gs=gpmi_g console=ttyAM0,1 15200n8 ubi.mtd=2 root=ubiO:rootfs rootfstype=ubifs fecmac=ethact mem=64M\0” —manufacturercode=0Xc2. _.devicecode=0xF1. _3。2-2修改内核 .celltechnology=NANDDEVICECELL__TECH —编辑driver/mtd/nand/gpmi—nfc/gpmi—nfc—mil.c,修 改分区信息为: partitions[0].name=“bootloader/params/kernel”; partitions[0].offset=0: partitions『0].size=12"1024"1024; SLC, .chipsizeinbytes=1 2811 S21 M, —.blocksizeinpages=64, ————_.page_totalsizeinbytes=2 SZ1K+64, ———一.ecc—strengthinbits=4, ——partitions[0].mask_flags=0; .eccsizeinbytes=5 1 2, —_——.datasetup—inns=5, dataholdinns=5, partition[3].name[3].name=“opt”; partition[3].offset=MTDPART_OFS_APPEND;//紧 .——.addresssetup—inns=20, —_接上一个分区 partition[3 ̄.size=MTDPART_SIZE—FULL;// ̄]余大 小 .gpmisampledelayinns=6, ———.tREAinns=一1, ——.tRLOHinns=一1, ———partition[3].mask_flags=0; “ZHYNAND”, } 在结构体nand device mfr directory中添加如下 代码: { .id=0xC2, .4结语 通过大量实验测试,基于该方法的NAND Flash 可稳定运行,可以在NAND Flash上快速进行程序的 移植。 ————nfomfn=nanddeviceix, 参考文献 [1]苏缨墩,钟汉如.嵌入式Linux系统中的NAND Flash } 3.2 NAND Flash分区 3.2.1修改uboot (1)编辑ubo0t,include/c0nfigs/mx28一evk.h,修改分 区表信息如下: #define MTDPARTSDEFAULT“mtdparts= —驱动详解[J].工业仪表与自动化装置,2011(4):56—60 [2]高丽,张欢庆.嵌入式Linux中NAND Flash设备驱动 研究[J].电脑开发与应用,2014(5):l1.16 [3]张剑伟.Flash损耗均衡的嵌入式文件系统设计【J].单 片机与嵌入式系统应用.2011f6):74.76 [4】吴振英,余鑫东.基于MTD系统实现NAND Flash的 nandflash0:1 2m(bootloader/params/kerne1).”\ “2m(1og).”\ “64m(rootfs).”\ “一设备驱动[J].苏州大学学报(工科版),2012(4):12—17 [5]周斌,林喜荣,黄析伟.嵌入式Linux系统下NORFlash的 配置和使用[J].单片机与嵌入式系统应用200 ̄2):82.84 (opt)’’ (上接第23页) 5结语 “电子技术实训”信息化教学的实施,从根本上改变 了传统教学模式,用现代化的教学手段和方法来提升教 辨硼r 》 ” . 学的效率和效果,对于拓展学生学习空间、促进学生自主 学习有着非常好的作用。信息化教学的独特优势,能为 学生的学习和发展提供丰富多彩的教育环境和有力的 学习工具,有利于开阔学生的知识眼界。激发学生的学习 啦m 趣 啦妊.瓣e 赫 慨逝啦 r t 驰礴 恤 魂 。。 前 谛j 谢 图5 项目测评界面 热情及改善学生的认知方式,大大提高学习效率。 35 WWW.auto—apply.com 自动化应用