完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在介绍具体如何写Nand Flash驱动之前,我们先要了解,大概的,整个系统,和Nand Flash相关的部分的驱动工作流程,这样,对于后面的驱动实现,才能更加清楚机制,才更容易实现,否则就是,即使写完了代码,也还是没搞懂系统是如何工作的了。让我们以最常见的,Linux内核中已经有的三星的Nand Flash驱动,来解释Nand Flash驱动具体流程和原理。此处是参考2.6.29版本的Linux源码中的driversmtdnands3c2410.c,以2410为例。1. 在nand flash驱动加载后,第一步,调用对应的init函数 ---- s3c2410_nand_init: 去将nand flash驱动注册到Linux驱动框架中。2. 驱动本身真正的开始,是从probe函数: s3c2410_nand_probe->s3c24xx_nand_probe,
在probe过程中: clk_enable //打开nand flash控制器的clock时钟, request_mem_region //去申请驱动所需要的一些内存等相关资源。 s3c2410_nand_inithw //去初始化硬件相关的部分,主要是关于时钟频率的计算,以及启用nand flash控制器,使得硬件初始化好了,后面才能正常工作。3. 需要多解释一下的,是这部分代码:for (setno = 0; setno < nr_sets; setno++, nmtd++) { pr_debug("initialising set %d (%p, info %p)n", setno, nmtd, info);/*调用init chip去挂载你的nand驱动的底层函数到"nand flash的结构体"中,以及设置对应的"ecc mode",挂载ecc相关的函数 */ s3c2410_nand_init_chip(info, nmtd, sets);/* scan_ident,扫描nand 设备,设置nand flash的默认函数,获得物理设备的具体型号以及对应各个特性参数,这部分算出来的一些值,对于nand flash来说,是最主要的参数,比如nand flash的芯片的大小,块大小,页大小等。 */ nmtd->scan_res = nand_scan_ident(&nmtd->mtd, (sets) ? sets->nr_chips : 1);if (nmtd->scan_res == 0) { s3c2410_nand_update_chip(info, nmtd);/*扫描的后一阶段,经过前面的scan_ident,我们已经获得对应nand flash的硬件的各个参数, *然后就可以在scan tail中,根据这些参数,去设置其他一些重要参数,尤其是ecc的layout,即ecc是如何在oob中摆放的, *最后,再去进行一些初始化操作,主要是根据你的驱动,如果没有实现一些函数的话,那么就用系统默认的。 */ nand_scan_tail(&nmtd->mtd);/*add partion,根据你的nand flash的分区设置,去分区 */ s3c2410_nand_add_partition(info, nmtd, sets); } if (sets != NULL) sets++; }4. 等所有的参数都计算好了,函数都挂载完毕,系统就可以正常工作了。上层访问你的nand falsh中的数据的时候,通过MTD层,一层层调用,最后调用到你所实现的那些底层访问硬件数据/缓存的函数中。深圳雷龙发展有限公司从事NANDFLASH行业10+年.目前代理ATO Solution小容量SLC NAND,SPI NAND,MCP等。想了解更多请咨询扣二八伍二扒二陆扒六八;电话一三陆玖一玖八二一零柒 |
|
相关推荐 |
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之Makefile修改
710 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备组织架构
1617 浏览 0 评论
1092 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备树组成和结构
1326 浏览 0 评论
【敏矽微ME32G070开发板免费体验】点亮WS2812B灯板
1783 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12173 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 05:04 , Processed in 0.344748 second(s), Total 30, Slave 24 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号