阿虚的mtd nand驱动学习手册

阿虚的mtd nand驱动学习手册

ID:40774112

大小:166.00 KB

页数:17页

时间:2019-08-07

阿虚的mtd nand驱动学习手册_第1页
阿虚的mtd nand驱动学习手册_第2页
阿虚的mtd nand驱动学习手册_第3页
阿虚的mtd nand驱动学习手册_第4页
阿虚的mtd nand驱动学习手册_第5页
资源描述:

《阿虚的mtd nand驱动学习手册》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、3月31日前言:为了深入了解MTD如何处理Nand问题,决定跟一下MTDNand层代码。mtd.h重要结构体:★structerase_info如果擦除失败,fail_addr将指示坏块地址。★structmtd_infomtd层函数指针存放处。nand.hNand基本指令:#defineNAND_CMD_READ00#defineNAND_CMD_READ11#defineNAND_CMD_PAGEPROG0x10#defineNAND_CMD_READOOB0x50#defineNAND_CMD_ERASE10x60#defineNAND_CMD_STATUS0x70#d

2、efineNAND_CMD_STATUS_MULTI0x71#defineNAND_CMD_SEQIN0x80#defineNAND_CMD_READID0x90#defineNAND_CMD_ERASE20xd0#defineNAND_CMD_RESET0xff和K9F1208指令对比重要结构体:★structnand_chip具体操作Nand的函数指针都在这个结构体里面。★structnand_bbt_descrNand坏块表?具体如何使用还不清楚。174月1日nand_base.c◆intnand_scan(structmtd_info*mtd,intmaxchips)

3、{structnand_chip*this=mtd->priv;priv是mtd_info结构体里面的一个空指针,现在指向this。if(this->cmdfunc==NULL)this->cmdfunc=nand_command;判断驱动编写者是否提供了command函数,后来几个类似。this->cmdfunc(mtd,NAND_CMD_READID,0X00,-1);读取Nand芯片信息,包括厂商信息的芯片ID,对于K9F1208是0xEC和0x76。对应nand_ids.c中的{"NAND64MiB3,3V8-bit",0x76,512,64,0x4000,0}。含义

4、:三星的这颗Nand芯片是64MB的,3.3V供电,8bit位宽,ID为0x76,每一页大小为512Byte,64MB容量,擦除块尺寸为0x4000,操作0。对擦除块为0x4000的解释:这颗Nand芯片的容量是这样划分的,512Bytex32x4096=64MB,一共有4096个块(block),因此每一个块的大小为512Bytex32=16384Byte=0x4000Byte。这些信息接下来都会被MTD层获得,如果全部没有问题,则在启动时会打印:printk(KERN_INFO"NANDdevice:ManufacturerID:""0x%02x,ChipID:0x%02

5、x(%s%s)",nand_maf_id,nand_dev_id,nand_manuf_ids[maf_id].name,mtd->name);/*Calculatetheaddressshiftfromthepagesize*/this->page_shift=ffs(mtd->oobblock)-1;this->bbt_erase_shift=this->phys_erase_shift=ffs(mtd->erasesize)-1;this->chip_shift=ffs(this->chipsize)-1;▼这一段不太明白,翻译过来是根据页面大小计算地址变化?我在启

6、动时将其打印了出来:mtd->oobblockis0x200mtd->oobsizeis0x10mtd->erasesizeis0x4000this->page_shiftis0x9this->bbt_erase_shiftis0xethis->chip_shiftis0x1affs函数第一次见到,看看是什么东西:#defineffs(x)generic_ffs(x)继续,蛮有意思的函数:staticinlineintgeneric_ffs(intx){intr=1;if(!x)return0;if(!(x&0xffff)){17x>>=16;r+=16;}if(!(x&0x

7、ff)){x>>=8;r+=8;}if(!(x&0xf)){x>>=4;r+=4;}if(!(x&3)){x>>=2;r+=2;}if(!(x&1)){x>>=1;r+=1;}returnr;}这函数人如其名,找到第一个bit位(findfirstbitset),比如0x80,将返回7。/*Setthebadblockposition*/this->badblockpos=mtd->oobblock>512?NAND_LARGE_BADBLOCK_POS:NAND_SMALL_BADBLOCK_POS;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。