加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

移植u-boot12.04到jz2440 -->支持nandflash启动

发布时间:2020-12-15 20:01:17 所属栏目:百科 来源:网络整理
导读:u-boot2012.04支持nandflash 1. 重新添加#define CONFIG_CONFIG_CMD ?? ?driversmtdnand ?? ?下s3c2410_nand.c 拷贝为s3c2440_nand.c ?? ? ?? ? 怎么决定编译s3c2440_nand.c 而不编译 s3c2410-nand.c ?? ? ?? ? 看文件下的Makefile 找到相应的配置文件 ??
u-boot2012.04支持nandflash

1. 重新添加#define CONFIG_CONFIG_CMD

?? ?driversmtdnand
?? ?下s3c2410_nand.c 拷贝为s3c2440_nand.c
?? ?
?? ? 怎么决定编译s3c2440_nand.c 而不编译 s3c2410-nand.c
?? ?
?? ? 看文件下的Makefile 找到相应的配置文件

?? ?? 配置文件添加
?? ?? #define CONFIG_NAND_S3C2440
?? ??? ?#define CONFIG_SYS_S3C2440_NAND_HWECC
?? ??? ?
?? ? ?? ?Makefile中添加 以下代码
?? ??? ?
?? ??? ?? COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o? ?
?? ??? ? ?
          
     board_init_r
     #if defined(CONFIG_CMD_NAND)
        puts("NAND:  ");
        nand_init();        /* go init the NAND */
        #endif



                
    void nand_init(void)   Nand.c (driversmtdnand
                nand_init_chip(i);
                            board_nand_init //设置nand_chip 结构体。提供底层函数
                                    nand->select_chip = NULL;
                                    nand->cmd_ctrl = s3c2440_hwcontrol;
                                    nand->dev_ready = s3c2440_dev_ready;
                                nand_scan
                                     nand_scan_ident
                                             nand_set_defaults(chip,busw);
                                                     chip->select_chip = nand_select_chip;
                                                     chip->cmdfunc = nand_command;
                                           nand_get_flash_type
                                                          chip->select_chip(mtd,0);
                                                          chip->cmdfunc(mtd,NAND_CMD_RESET,-1,-1);
                                                                      nand_command (struct mtd_info *mtd,unsigned int command,int column,int page_addr)// 发地址,发命令
                                                                              chip->cmd_ctrl(mtd,command,ctrl);
                                                                                          s3c2440_hwcontrol  
                                                                                                      static void s3c2440_hwcontrol(struct mtd_info *mtd,int cmd,unsigned int ctrl)
                                                                                                              
                                                                                      
                                                           chip->cmdfunc(mtd,NAND_CMD_READID,0x00,-1);
                                                          *maf_id = chip->read_byte(mtd);
                                                          *dev_id = chip->read_byte(mtd);


?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?int board_nand_init(struct nand_chip *nand)
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//初始化
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?cfg = ((tacls-1) <<12) |( (twrph0-1) << 8) | ((twrph1 - 1) << 4 );
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?writel(cfg,&nand_reg->nfconf);
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?/* 使能NAND Flash控制器,初始化ECC,禁止片选 */
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//writel ((1<<4)|(1<<1)|(1<<0),nand_reg->nfcont);
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?writel ((1<<4)|(1<<1)|(1<<0),&nand_reg->nfcont);
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ???
          s3c2440_hwcontrol 自己重写
                                                        
                                                            struct nand_chip *chip = mtd->priv;
                                                            struct s3c2440_nand *nand = s3c2440_get_base_nand();

                                                            if(ctrl & NAND_CLE)
                                                            {
                                                                /*发命令*/

                                                                writeb(dat,&nand->nfcmd);
                                                            }
                                                            else if(ctrl & NAND_ALE)
                                                            {
                                                                /*发地址*/
                                                                writeb(dat,&nand->nfaddr);// 地址
                                                            }
                                                                                                    
                                                            自己编写 s3c2440_nand_select 函数
                                                            
                                                            struct s3c2440_nand *nand = s3c2440_get_base_nand();

                                                            switch (chipnr) {
                                                            case -1: /*不选*/
                                                                nand->nfcont |= (1 <<1);
                                                                break;
                                                            case 0:  /*选中,没有进行操作*/
                                                                nand->nfcont &= ~(1 <<1);
                                                                break;

                                                            default:
                                                                BUG();
                                                            }
                                                            


?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ??? ?nor 启动
?? ??? ??? ??? ??? ??? ??
           U-Boot 2012.04.01 (Jul 23 2016 - 13:18:18)

                                    CPUID: 32440001
                                    FCLK:      400 MHz
                                    HCLK:      100 MHz
                                    PCLK:       50 MHz
                                    DRAM:  64 MiB
                                    WARNING: Caches not enabled
                                    Flash: 2 MiB
                                    NAND:  256 MiB  //能够识别出 nand
                                    *** Warning - bad CRC,using default environment

                                    In:    serial
                                    Out:   serial
                                    Err:   serial
                                    Net:   CS8900-0
                                    
                                    
                                    nand erease 0 80000
                                    nand write 0 0 80000  0:nor 0 nand  80000 长度
                                    nand read 30000000 0 80000//3000000 读到哪里 0 从nand 0 开始读 80000 读的长度
                                    cmp.b 0 30000000
                                    
                                    
                                    U-Boot 2012.04.01 (Jul 23 2016 - 13:18:18)
                                nand 启动
                                CPUID: 32440001
                                FCLK:      400 MHz
                                HCLK:      100 MHz
                                PCLK:       50 MHz
                                DRAM:  64 MiB
                                WARNING: Caches not enabled
                                Flash: 0 KB  // nand 启动0 地址对应片内内存,无法读取 nor flash的值
                                NAND:  256 MiB
                                *** Warning - bad CRC,using default environment

                                In:    serial
                                Out:   serial
                                Err:   serial
                                Net:   CS8900-0
                                SMDK2410 #

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读