NAND FLASH学习笔记之MTD下nand flash驱动(七)---我的调试
转载请注明出处:http://blog.csdn.net/wang_zheng_kai 七、如何调试新的NAND FLASH芯片
调试新的NAND FLASH芯片步骤如下: 一、驱动程序的修改,例如:jz4780_nand.c中的修改
(1)加入NAND flash 名称和 Nand flash 设备id????? ?????????????????? 在??? ******************************************************* ??????????????????????????? *? NAND flash chip name & ID???? ??????????????????????????? ******************************************************* ?????????????????? 加入NAND flash 名称 和 Nand flash 设备id???????? ?????????????????? 例如: ??????????????????????????? #defineNAND_FLASH_MT29F32G08CBACAWP_NAME???"MT29F32G08CBACAWP“ ??????????????????????????? #defineNAND_FLASH_MT29F32G08CBACAWP_ID????? 0x68 (2)加入 NAND flash 匹配信息(这里用的是重载) ?????????????????? 在??? ******************************************************* ??????????????????????????? *???? Supported NAND flash chips???????? ??????????????????????????? ******************************************************* ?????????????????? 中builtin_nand_flash_table[]加入 NAND flash匹配信息????? ?????????????????? 例如: ?????????????????? ??????? { NAND_FLASH_MT29F32G08CBACAWP_NAME,NAND_FLASH_MT29F32G08CBACAWP_ID,4096,LP_OPTIONS ?},? ? ??
(3)加入NAND flash 芯片信息 ?????????????????? 在??? ******************************************************* ??????????????????????????? *???? Supported NAND flash chips???????? ??????????????????????????? ******************************************************* ?????????????????? 中加入NAND flash芯片信息???? ?????????????????? 例如: ?????????????????? {??? /* ??????????????????????????? ?* Datasheet of MT29F32G08CBACA,Rev-E,P109,Table-17??????????????? ??????????????????????????? ?* ECC : 24bit/1080bytes???????????????? ??????????????????????????? ?*/??????????????? COMMON_NAND_CHIP_INFO(NAND_FLASH_MT29F32G08CBACA3W_NAME,NAND_MFR_MICRON,?????????????????????????????????????NAND_FLASH_MT29F32G08CBACA3W_ID,1024,24, 10,5,10,15,7,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 20,20,70,200,100,60, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100,100 *1000,BUS_WIDTH_8, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NAND_OUTPUT_NORMAL_DRIVER,? NAND_RB_DOWN_FULL_DRIVER, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?micron_nand_pre_init)???? ??? ?????????????????? }, ?????????????????? 其中包含了针对特定Nandflash的:?????????????????? ???????????????????????????????????? .ECC 强度??????????????? ???????????????????????????????????? .时序信息????????????? ???????????????????????????????????? .驱动力调整????????????????? ???????????????????????????????????? .预初始化函数??? ???????? ???? 更具体的定义请参考arch/mips/xburst/soc-4780/include/mach/jz4780_nand.h (4)修改于预始化函数 ?????????????????? 根据目标芯片的芯片手册,配置Timing mode 、Programmable output drive strength以及ProgrammableRB# pull-down strength等等。 ?????????????????? 例如: ??????????????????????????? 根据MT29F32G08CBCAC手册中的ConfigurationOperations ??????????????????????????? 在函数micron_nand_pre_init(structjz4780_nand *nand)中进行相关配置 ? 二、修改mtd/nand/nand_ids.c文件 ? 定义了两个全局类型的结构体: ? structnand_flash_devnand_flash_ids[ ] ? structnand_manufacturersnand_manuf_ids[ ] ? 其中前者定义了一些NAND芯片的类型,后者定义了NAND芯片的几个厂商。NAND芯片的ID至少包含两项内容:厂商ID和厂商为自己的NAND芯片定义的芯片ID。 ? 当NAND驱动被加载的时候,它会去读取具体NAND芯片的ID,然后根据读取的内容到上述定义的nand_manuf_ids[ ]和nand_flash_ids[ ]两个结构体中去查找,以此判断该NAND芯片是那个厂商的产品,以及该NAND芯片的类型。若查找不到,则NAND驱动就会加载失败,因此在开发NAND驱动前必须事先将你的NAND芯片添加到这两个结构体中去(其实这两个结构体中已经定义了市场上绝大多数的NAND芯片,所以除非你的NAND芯片实在比较特殊,否则一般不需要额外添加)。 ? 例如: ? nand_manuf_ids[] ? {NAND_MFR_MICRON,"Micron"}, ? ? nand_flash_ids[] ? {"NAND 4GiB 3,3V 8-bit",0x68,LP_OPTIONS}, 三、对bootloader中相关文件的修改 ? (1)在bootable/bootloader/xboot/boot/nand/nand_ids.c中添加相应的nand的相关信息,这里以MT29F32G08为例: ??????? {"MICRON_MT29F32G08CBADAWP",0x2C44,0x00A94B44,2,1,8192,2048*1024,744,3,74,2128,? 1024,40,8,MICRON_NAND,0x03,0x02,?0x01,? 0x00,0x04}, ? 以上关于nand的信息,包括id,extid,plane的个数,页大小,块大小,冗余区大小,采用多少位的ecc,以及对应的几个时间参数都要按照芯片手册上的说明进行填写,这样才可以进行nand的读取写入等操作?? ? (2)在bootable/bootloader/xboot/include/asm/jz_mem_nand_configs/目录下添加新增nand对应的头文件:NAND_MT29F32G08CBACA.h,内容如下:? ? #ifndef __NAND_CONFIG_H#define__NAND_CONFIG_H ? /* *? *This file contains the nand configuration parameters for thecygnusboard. *?? */ ? /*----------------------------------------------------------------------- ? ?*? * NAND FLASH configuration *?? */ ? #define CONFIG_NAND_K9GAG08U0D#defineCFG_NAND_BCH_BIT???? 24?????? /*Speif () { ? y the hardware BCH algorithm for nand(4|8) */ ? #define CFG_NAND_BW8??????????? 1???????? /* Data bus width: 0-16bit,1-8bit */ ? #define CFG_NAND_PAGE_SIZE????? 4096 ? #define CFG_NAND_OOB_SIZE?????? 224??????/* Size of OOB space per page (e.g. 64 128 etc.) */ ? #define CFG_NAND_ROW_CYCLE????? 3 ? #define CFG_NAND_BLOCK_SIZE???? (1024 << 10)? /* NAND chip block size*/ ? #define CFG_NAND_BADBLOCK_PAGE? 0????????????/* NAND bad block was marked at this page in a ? block,starting from 0 */ ? #define CFG_NAND_TOTAL_BLOCKS?? (1024*4)?????/*4Gnand*/ ? #define X_DELAY_TRR???????????? 20 ? #define X_DELAY_TADL??????????? 70 ? #define X_DELAY_TWHR??????????? 60 ? #endif /* __NAND_CONFIG_H */~ ? 这里同样要正确设置nand的相关信息,比如ecc是多少位,页大小,块大小,冗余区大小等,如果这里设置的不对,在启动时候会出错。 ??(3)在bootable/bootloader/xboot/include/configs/grus.h中包含新加的头文件:#include“asm/jz_mem_nand_configs/NAND_MT29F32G08CBACA.h” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |