添加了Unique ID介绍
添加了对应的MTD中检测不同类型芯片的代码
增加了关于Nand Flash的软件和硬件的ECC算法的简介
1. 了解硬件的nandflash的各个参数和工作原理
具体参考nand flash的datasheet,主要包括,自己nand
flash的厂商,型号等。
Nand flash的页大小,oob大小,块大小,位宽8bit还是16bit。
工作原理,上面已经做了一定描述,不清楚的,可以参考datasheet,多看看,就会明白很多。
2. 按照linux下驱动编写规范编写nand
flash驱动,
可以参考其他已经有的驱动,比如内核源码中已经有的
drivers/mtd/nand/s3c2410.c
就是个很好的例子。
自己以其为模板,实现自己板子的nand flash驱动。
其实主要工作就是,实现
static struct platform_driver s3c2410_nand_driver =
{
.probe=
s3c2410_nand_probe,
.remove =
s3c2410_nand_remove,
.suspend =
s3c24xx_nand_suspend,
.resume =
s3c24xx_nand_resume,
.driver= {
.name =
"s3c2410-nand",
.owner=
THIS_MODULE,
},
}
中的
XXX_nand_probe函数
XXX_nand_remove函数
XXX_nand_enable_hwecc,如果支持硬件ecc的话。
对nand flash的读写,这两个函数,实现了对nand的具体 *** 作。
【Linux下Nand Flash驱动编写简单步骤】
软件和硬件知识,都已经了解的话,由于上层的linux的 mtd框架中,已经完全封装好了,对nand
flash的write page,write oob等相关函数的实现,那么剩下的只是相对来说已经是很少量的,关于nand
驱动具体内部 *** 作方面的工作:
1.初始化
先是在nand 芯片初始化的时候,对其
XXX_nand_init_chip()
给对应的芯片chip赋给对应的
XXX_nand_read_buf和XXX_nand_write_buf等函数:
chip->cmd_ctrl =
XXX_nand_hwcontrol
chip->dev_ready =
XXX_nand_devready
chip->read_buf =
XXX_nand_read_buf
chip->write_buf =
XXX_nand_write_buf
以实现后续的对nand芯片的 *** 作。
然后根据ecc类型,赋给对应的ecc的校验与纠错函数:
chip->ecc.hwctl =
XXX_nand_enable_hwecc
chip->ecc.calculate = XXX
_nand_calculate_ecc
3.
实现上面提到的对应的各个函数,关于如何实现,参考一下其他nand驱动,就会理解很多了。
4. 驱动测试,参考具体的 ldd3(Linux
Device Driver version 3)的测试相关部分内容。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)