linux nand flash驱动,Linux 下 Nand Flash 驱动说明

注册 driver_register

通过 module_init(s3c2410_nand_init);注册 Nand Flash 驱动. 在 s3c2410_nand_init ()中通过 driver_register()注册

s3c2410_nand_driver 驱动程序,如下所示:

static struct device_driver s3c2410_nand_driver = {

.name          = "s3c2410-nand",

.bus           = &platform_bus_type, /* 在 drivers/base/platform.c 中定义 */

.probe         = s3c2410_nand_probe,

.remove        = s3c2410_nand_remove,

};

探测设备 probe

在注册的 Nand Flash 驱动程序中, probe 方法为 s3c2410_nand_probe(). s3c2410_nand_probe()再调用 s3c24xx_nand_probe(). 在该函数中, 把*info 作为 Nand Flash 驱动的私有数据结构, 并通过 dev_set_drvdata(dev, info)把*info 保存在*device 的*driver_data 字段中.然后通过 clk_get(dev, "nand")获取 Nand Flash 的时钟资 源, clk_use(info->clk)增加时钟资源的使用计数, clk_enable(info->clk)开启资源.填写*info 的其它字段, 其中包括:

通过 request_mem_region()为 Nand Flash 寄存器区申请 I/O 内存地址空间区,并通过 ioremap()把它映射到虚 拟地址空间.

调用 s3c2410_nand_inithw()初始化 Nand Flash 控制器. 3.  为 mtd 设备分配设备信息的存储空间.

4. 对当前 mtd 设备,调用 s3c2410_nand_init_chip()进行初始化.

5. 对当前 mtd 设备, 调用 nand_scan()检测 Nand Flash 芯片, nand_scan()函数在 drivers/mtd/nand/nand_base.c 中 定义.该函数的作用是初始化 struct nand_chip 中一些方法, 并从 Nand Flash 中读取芯片 ID, 并初始化 struct mtd_info 中的方法.

6.  对当前 mtd 设备,加入其分区信息.

7. 如果还有更多 mtd 设备,到 4 执行.

初始化 Nand Flash控制器

s3c2410_nand_inithw()函数会初始化 Nand Flash 控制器, 通过设置 Nand Flash 控制寄存器(S3C2410_NFCONF)来

完成, 这里最重要的是根据 S3C2410 的 PCLK 计算出 tacls, twrph0 以及 twrph1 值.

移除设备

s3c2410_nand_remove()当设备被移除时,被 device 核心驱动调用.它完成的主要工作如下:

把*device 的*driver_data 字段置空.

2. 释放 mtd 设备信息. 3. 释放 clk 资源.

4. 通过 iounmap()取消映地址空间. 5. 释放申请的 I/O 内存资源.

6. 释放设备私有数据*info 的空间.

Nand Flash芯片初始化

s3c2410_nand_init_chip()初始化 struct nand_chip 中的一些主要字段以及方法.其中主要包括的方法有:

s3c2410_nand_hwcontrol(); 硬件控制

2. s3c2410_nand_devready(); 设备是否准备好

s3c2410_nand_write_buf(); 写一个 buffer 到 nand flash

s3c2410_nand_read_buf(); 读一个 buffer 到 nand flash 5. s3c2410_nand_select_chip(); 选择操作芯片

如果支持 ECC 硬件校验,还设置如下方法:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值