NAND FLASH学习笔记之MTD下nand flash驱动(七)---我的调试

来源:互联网 发布:思科网络系统 编辑:程序博客网 时间:2024/06/05 15:21

转自http://blog.csdn.net/wang_zheng_kai/article/details/19039529

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, 0,4096, 0, 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, 0,

10,5, 10, 5, 15, 5, 7, 5, 10, 7, 

                                                20, 20, 70, 200, 100, 60, 200,10, 20, 0, 100,

                                                100, 100 *1000, 0, 0, 0, 5, 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, 0,4096, 0, LP_OPTIONS},

三、对bootloader中相关文件的修改

  1)在bootable/bootloader/xboot/boot/nand/nand_ids.c中添加相应的nand的相关信息,这里以MT29F32G08为例:

        {"MICRON_MT29F32G08CBADAWP",0x2C44, 0x00A94B44, 2, 1, 10, 5, 15, 15, 100, 60, 200, 20, 100, 70, 0, 8192,2048*1024, 744, 3, 74, 2128,  1024, 40,8, 0, MICRON_NAND, 0x03, 0x02, 0x01,  0x00, 0x04},

  以上关于nand的信息,包括idextidplane的个数,页大小,块大小,冗余区大小,采用多少位的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”


0 0