NAND FLASH 和NOR FLASH 有很大的差别,NOR FLASH 可以通过地址和数据总线直接访问,而
NAND FLASH 的访问需要通过NAND FLASH 控制器来实现。因为NOR FLASH 可以通过数据和地址总线
直接访问,所以可以根据FLASH 的型号编写一个适用于所有硬件平台的通用的NOR FLASH 驱动程序。
对NAND FLASH 而言,其访问和控制需要通过NAND FLASH 控制器来实现,而不同的MCU 都有自己的
NAND FLASH 控制器。这就决定了NAND FLASH 不能象NOR FLASH 那样,编写一个通用的FLASH 驱
动程序,适用于所有的硬件平台。对NAND FLASH,只能通过MCU + FLASH 组合的形式来编写相应的
FLASH 驱动程序。
要在 H-FLASHER 中添加自己的NAND FLASH 驱动,需要提供NAND FLASH 描述文件和对应的
FLASH 驱动程序。H-FLASHER 通过分析NAND FLASH 描述文件来获取相关的信息,包括,NAND FLASH
的容量,结构,ID 和驱动程序名称等。NAND FLASH 驱动程序是实际对FLASH 进行 *** 作的一段二进制
程序。H-FLASHER 通过与这段程序进行交互,来实现对FLASH 的 *** 作。关于描述文件和驱动程序的相
关信息,请查看下面的介绍。
Linux驱动原理具体内部很多实现,已经包含在drivers/mtd/nand/nand_base.c中了
【nand flash驱动加载识别nand类型过程】
在驱动加载的时候,会去调用:
nand_get_flash_type()
其中,就会对nand的类型和其他相关参数进行检查。
1) 选中对应设备,如果此时只有一个nand 芯片,则此步可以省略
/* Select the device */
chip->select_chip(mtd, 0)
x
2) 发读命令,去读取设备类型代码
/* Send the command for reading device ID */
chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1)
3) 判断是哪个厂商的,哪个类型的flash
/* Read manufacturer and device IDs */
*maf_id = chip->read_byte(mtd)
dev_id = chip->read_byte(mtd)
4) 在事先已经定义好的nand flash类型中查找属于何种厂商和型号
/* Lookup the flash id */
for (i = 0nand_flash_ids[i].name != NULLi++) {
if (dev_id == nand_flash_ids[i].id) {
type = &nand_flash_ids[i]
break
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)