nand flash erase 函数调用流程

来源:互联网 发布:bilibili for mac发热 编辑:程序博客网 时间:2024/05/21 09:55

本文跟踪linux4.1源码中driver/mtd/mtdcore.c文件中mtd_erase()函数的调用流程。

当其它模块或文件系统想要某个flash 块时,可通过MTD子系统提供的mtd_erase()函数来操作。
本文只是erase的流程框架,不会详细描述细节。

mtd_erase(struct mtd_info *mtd, struct erase_info *instr)    //对于nand flash 来说mtd->_erase指向nand_erase()函数。    mtd->_erase(mtd, instr);        //检查擦除地址与擦除长度是否是按擦除块对齐,如果不是出错返回。        return nand_erase_nand(mtd, instr, 0);            while (len) {                //检查要擦除的块是否为坏块,如果是坏块,则不擦除,直接退出                nand_block_checkbad()                // chip->erase指向single_erase()函数。此函数负责擦除块。                status = chip->erase(mtd, page & chip->pagemask);                    //擦除块,需要两条指令,分别为NAND_CMD_ERASE1,NAND_CMD_ERASE2,                    //发送完成后,再调用chip->waitfunc函数等待erase完成。                    chip->cmdfunc(mtd, NAND_CMD_ERASE1, -1, page);                        //在发送NAND_CMD_ERASE1时,会附带上要擦除的块地址。                        //所以这两条chip->cmd_ctrl指令,第一条是用来发送命令的,                        //第二条是用来发送地址的。                        chip->cmd_ctrl(mtd, command, NAND_NCE| NAND_CLE|NAND_CTRL_CHANGE);                        chip->cmd_ctrl(mtd, page_addr >> 16,NAND_NCE | NAND_ALE);                    chip->cmdfunc(mtd, NAND_CMD_ERASE2, -1, -1);                    //chip->waitfunc指向nand_wait()函数。                    return chip->waitfunc(mtd, chip);            }            //如果失败,则调用erase_info->callback()函数。            if (!ret)                mtd_erase_callback(instr);                    instr->callback(instr);
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 精庄金依祈白里透红 依祈白里透红蚕丝面膜 依祈白里透红三合一 依祈白里透红2十1 依祈白里透红效果 依祈白里透红化妆品 依祈化妆品第五代 依祈白里透红面膜 依祈白里透红玫瑰精华露 依祈白里透红晚霜 依祈白里透红怎么用 精装金依祈怎么样 依祈白里透红含铅吗 金装依祈白里透红 精庄金依祈化妆品系列 依祈白里透红日霜 精庄金依祈第三代 精庄金依祈价格 精庄金依祈第二代 精庄金依祈旗舰店 名蔻 水密码套装 瑾泉化妆品 韩束套装 依稀 依稀可见 依稀的意思 依稀是什么意思 依稀的网络意思是什么 党卫队前进 依稀森林 武行诸天 依稀去年 依稀的反义词 别梦依稀温小圆全文免费阅读 风雪依稀秋白发尾 别梦依稀温小园 依替米星注射剂 依米康 硫酸依替米星注射液 阿丽米罕色依提 依米康股吧 依替米星注射夜说明书