Flash基础入门之SylixOS nand驱动框架理解
小标 2019-02-21 来源 : 阅读 1234 评论 0

摘要:本文主要向大家介绍了Flash基础入门之SylixOS nand驱动框架理解,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门之SylixOS nand驱动框架理解,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

Flash基础入门之SylixOS nand驱动框架理解

1.适用范围

该应用笔记适用于帮助用户在SylixOS下使用nandflash器件。

2.原理概述

2.1nandflash存储结构

nandflash存储结构如图2-1所示,下面以mini2440开发板上的k9f1g08系列nandflash为例,简单介绍nandflash的存储结构。


图2-1 nandflash存储结构

nandflash的存储结构主要有两个单位:页(page),块(block)。每页大小为2K+64字节,2K用来存储数据,64字节用来存储控制信息(OOB区,例如坏块信息、ECC校验),每块大小为64页。整个nand有2048个块组成,所以mini2440中的nand大小为:(2K+64)*64*2048=228B=256MB。

nand的地址编排精确到字节,但是实际读写却只能精确到页,并且每次写之前都需要擦除nand,擦除的单位是块。nand读写时地址传递是通过IO线发送的,因为地址有30位而IO只有8位,所以需要多个cycle(循环)才能发送完毕。一般的nand都是4cycle或者5cycle发送地址。

2.2SylixOS下nand的驱动框架

2.2.1整体框架

SylixOS下nand的整体框架如图2-2所示:


图2-2 nand总体框架

2.2.2MTD设备

nandflash与传统块设备相似,都是存储设备,但又有所不同。比如块设备不区分写和擦除操作,也没有OOB区。这些区别决定了系统需要一种特殊的设备来抽象nandflash设备,简化驱动开发,这就是MTD设备,MTD既不属于块设备也不属于字符设备。

MTD是memory technology Device的缩写。MTD支持类似于内存的存储器,它是底层硬件和上层软件之间的桥梁。对底层来说,它无论对norflash或是nandflash都有很好的驱动支持。对上层来说,它抽象出文件系统所需要的接口函数。有了MTD,编写nandflash的驱动变得十分轻松,因为上层的架构都已经做好,驱动编写者只用参考nandflash的datasheet写最底层的硬件初始化即可。

2.2.3nand通用层

Nand_chip是nand通用层的核心结构体,它与nand芯片密切相关,主要包含两方面内容:

1、对nand芯片进行实际操作的函数,包括读、写、擦除等函数。

2、nand芯片特性的成员变量,包括页大小、块大小、坏块信息位置等。

2.2.4yaffs2文件系统层

yaffs2文件系统是一个专门为nandflash设计的嵌入式型文件系统提供磨损平衡和掉电恢复的健壮性。yaffs2与MTD设备的连接是通过yaffs_dev结构体来完成的。一个yaffs_dev结构体表示一个yaffs分区。

2.3代码实现

在mini2440 BSP驱动里面,nand挂载到yaffs2文件系统由三个*.c文件实现。

如图2-3所示:


图2-3 nand驱动文件

    各个*.c文件的作用分别是:

s3c24xx_nand.c函数实现nand控制器硬件的初始化。

nand.c是将nand封装成mtd设备。

k9f1g08.c是调用MTD提供的函数读取nand的信息,并将其挂载到yaffs2文件系统下。

2.3.1封装MTD设备

nand驱动的代码由nand_init函数开始,调用nand_init_chip函数初始化nand芯片,函数里主要调用如图2-4、图2-5所示的三个函数来实现具体初始化的步骤。


图2-4 nand芯片初始化

 

图2-5 nand初始化

驱动需要定义两个重要的结构体:

mtd_info 表示了一个MTD设备。2.nand_chip表示了一个nand设备。将nand_chip结构体放到mtd_info结构体下,以完成mtd_info结构体封装。

图2-4的三个函数主要是对以上两个结构体的初始化。下面介绍三个函数的主要功能:

board_nand_init函数实现nandfalsh控制器的初始化和相关时间参数的设置;并填充nand_chip结构体下的两个操作函数。如图2-6所示:


图2-6 nand_chip的操作函数

cmd_ctrl函数作用:想要对nandflash进行读写擦除等操作,必须要先选中nandflash并向其发送相应的命令和地址,cmd_ctrl函数完成上述功能。

向nandflash写完数据后,要等待一段时间,直到nandflash运行就绪,dev_ready函数用来判断nandflash是否运行就绪。

nand_scan函数用来填充nand_chip结构体和mtd_info结构体。主要操作如图2-6所示:    


图2-7 nand_scan函数

nand_register函数调用核心层提供的函数add_mtd_device函数将MTD加入到MTD核心层(mtd_table数组中),这样nandflash就被封装成了MTD设备。

2.3.2MTD设备挂载到yaffs2文件系统

yaffs_dev结构体表示了yaffs2文件系统的一个分区。这里面封装了对nand分区的参数、nand硬件信息以及mtd_info结构体下的操作函数,mini2440的驱动中将nand分成了两个区,一个是boot区,主要存放设备固件及一些常用配置文件;一个是comm区,主要存放通用文件。如图2-7所示:


图2-8 yaffs2分区

对yaffs_dev填充,如图2-9所示:


图2-9 yaffs_dev封装

 

封装好之后只需执行下面三个函数数,即可完成挂载,如图2-10所示。


图2-10 分区挂载

注意:yaffs文件系统的分区在驱动里已经分好,不能再用fdisk再进行分区。

3.参考资料

SylixOS应用开发手册

以上就介绍了Flash的相关知识,希望对Flash有兴趣的朋友有所帮助。了解更多内容,请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程