第19章Flash设备驱动之NandFlash驱动实例

19.5 NAND Flash驱动实例:S3C6410 外围的 NAND Flash 驱动

19.5.1 S3C6410 NAND 控制器硬件描述

    S3C6410 处理器集成了一个 NAND 控制器,它支持页大小为 512 字节和 2048 字节的 SLC 或MLC NAND Flash。对 SLC 工艺 Flash,支持 1-bit 的硬件 ECC,对 MLC 工艺 Flash,支持 4-bit或 8-bit 的硬件 ECC。

    LDD6410 开发板连接一块 K9F2G08 的 NAND Flash,其原理如图 19.7 所示,使用的驱动是
drivers/mtd/nand/s3c_nand.c, K9F2G08同时支持 S3C64XX、S5P64XX、S5PC1XX 处理器,对应的内核配置选项为MTD_NAND_S3C,如果要使用硬件ECC 功能,还需要使能MTD_NAND_S3C_HWECC。

图19.7 LDD6410 开发板上的 NAND 连接原理

19.5.2 S3C6410 nand_chip 初始化与 NAND 探测

        S3C6410 的 NAND 驱动以 platform 驱动的形式存在,在执行 probe()时,初始化 nand_chip 实例并运行 nand_scan()扫描 NAND 设备,最后调用 add_mtd_partitions()添加板文件 platform 中定义的分区表。nand_chip是NAND Flash驱动的核心数据结构,这个结构体中的成员直接对应着NANDFlash 的底层操作,针对具体的NAND 控制器情况,本驱动中初始化了IO_ADDR_R、IO_ADDR_W、cmd_ctrl()、dev_ready()、scan_bbt()以及 ECC 相关的信息。

        分析:

        drivers/mtd/nand/s3c_nand.c 是一个 platform 驱动,在 LDD6410 的 BSP 中只需要添加相关的针对 NAND 的 platform 设备和分区信息即可


猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/80763422