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

TQ2440 u-boot-2012.04.01移植四支持NAND Flash

发布时间:2020-12-15 18:10:05 所属栏目:百科 来源:网络整理
导读:继?u-boot-2012.04.01移植二支持NOR Flash,继续修改代码支持NAND Flash。最后直接用NOR Flash里的u-boot烧写自己移植的u-boot到NAND,方便电脑没有并口或手上没有openjtag,照样能移植u-boot,当然有openjtag更方便。 开发环境: 系统:ubuntu 10.04.4 单板
继?u-boot-2012.04.01移植二支持NOR Flash,继续修改代码支持NAND Flash。最后直接用NOR Flash里的u-boot烧写自己移植的u-boot到NAND,方便电脑没有并口或手上没有openjtag,照样能移植u-boot,当然有openjtag更方便。

开发环境:
系统:ubuntu 10.04.4
单板:tq2440
NAND FLASH:K9F1216U0A 256MB
NOR Flash:EN29LV160AB 2MB
SDRAM:HY57V561620 x2 64MB
NET:DM9000AEP
编译器:arm-linux-gcc-4.3.2

搭建开发环境详见ubuntu 10.04.4开发环境配置。
目标:
1.支持NOR Flash启动,串口正常输出
2.支持NAND启动
3.支持DM9000网卡

虽然单板现在支持NOR Flash,但u-boot还不支持读写NAND Flash,继续完善u-boot.修改u-boot支持NAND Flash

1.增加NAND 支持

include/configs/TQ2440.h24:去掉以前屏蔽的#define CONFIG_CMD_NAND

change@change:~/Si/TQ2440/u-boot-2012.04.01$ cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c
change@change:~/Si/TQ2440/u-boot-2012.04.01$ vim drivers/mtd/nand/Makefile

增加62:COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o

然后在include/configs/TQ2440.h增加相关宏定义210::

#ifdef CONFIG_CMD_NAND

#ifdef CONFIG_S3C2410
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
#else
#define CONFIG_NAND_S3C2440
#define CONFIG_SYS_S3C2440_NAND_HWECC
#endif
#define CONFIG_SYS_MAX_NAND_DEVICE?1
#define CONFIG_SYS_NAND_BASE??0x4E000000
#endif

2.修改源码

接着修改drivers/mtd/nand/s3c2440_nand.c

129:struct s3c2410_nand *nand_reg = s3c2410_get_base_nand();改为struct s3c2440_nand *nand_reg = s3c2440_get_base_nand();

145:#if 0
?cfg = S3C2410_NFCONF_EN;
?cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
?cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
?cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);
#endif
?/*add? init clock*/
?cfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4);
?writel(cfg,&nand_reg->nfconf);

?writel ((1<<4)|(1<<1)|(1<<0),&nand_reg->nfcont);//**add error nfconf

将s3c2410_hwcontrol替换为s3c2440_hwcontrol

将s3c2410_dev_ready替换为s3c2440_dev_ready

去掉90:#ifdef CONFIG_S3C2410_NAND_HWECC整个宏定义的代码

修改s3c2440_dev_ready函数struct s3c2410_nand *nand = s3c2410_get_base_nand();改为struct s3c2440_nand *nand = s3c2440_get_base_nand();

修改board_nand_init函数中nand->select_chip = NULL;改为nand->select_chip = s3c2440_nand_select;,不使用默认的

修改s3c2440_hwcontrol(...)函数为

static void s3c2440_hwcontrol(struct mtd_info *mtd,int dat,unsigned int ctrl)
{
 //struct nand_chip *chip = mtd->priv;
 struct s3c2440_nand *nand = s3c2440_get_base_nand();

 if (ctrl & NAND_CLE)
 {
  // **send command
  writeb(dat,&nand->nfcmd);
 }
 else if (ctrl & NAND_ALE)
 {
  //**send address
  writeb(dat,&nand->nfaddr);
 }
}

参考默认的nand_select_chip写s3c2440_nand_select

static void s3c2440_nand_select(struct mtd_info *mtd,int chipnr)
{
 //struct nand_chip *chip = mtd->priv;
 struct s3c2440_nand *nand = s3c2440_get_base_nand();

 switch (chipnr) {
 case -1://* no selaect
  //chip->cmd_ctrl(mtd,NAND_CMD_NONE,0 | NAND_CTRL_CHANGE);
  nand->nfcont |= (1<<1);
  break;
 case 0://*select
  nand->nfcont &= ~(1<<1);
  break;

 default:
  BUG();
 }
}

change@change:~$ cd Si/TQ2440/u-boot-2012.04.01/
change@change:~/Si/TQ2440/u-boot-2012.04.01$ make distclean?
change@change:~/Si/TQ2440/u-boot-2012.04.01$ make TQ2440_config?
Configuring for TQ2440 board...
change@change:~/Si/TQ2440/u-boot-2012.04.01$ make
编译成功,烧写刚刚移植的u-boot,NOR 启动,串口输出

U-Boot 2012.04.01 (Oct 25 2012 - 22:47:25)

CPUID: 32440001
FCLK:????? 400 MHz
HCLK:????? 100 MHz
PCLK:?????? 50 MHz
DRAM:? 64 MiB
WARNING: Caches not enabled
Flash: 0 KB
NAND:? 256 MiB
*** Warning - bad CRC,using default environment

In:??? serial
Out:?? serial
Err:?? serial
Net:?? dm9000
Hit any key to stop autoboot:? 0
SMDK2410 # set ipaddr 172.16.1.111
SMDK2410 # set gatewayip 172.16.1.1
SMDK2410 # set serverip 172.16.1.132
SMDK2410 # tftp 0x32000000 u-boot.bin
dm9000 i/o: 0x20000000,id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:0c:29:4d:e4:f4
could not establish link
Using dm9000 device
TFTP from server 172.16.1.132; our IP address is 172.16.1.111
Filename 'u-boot.bin'.
Load address: 0x32000000
Loading: ##########################
done
Bytes transferred = 379668 (5cb14 hex)
SMDK2410 # nand erase 0 0x80000

NAND erase: device 0 offset 0x0,size 0x80000
Erasing at 0x60000 -- 100% complete.
OK
SMDK2410 # nand write 0x32000000 0 0x80000

NAND write: device 0 offset 0x0,size 0x80000
?524288 bytes written: OK
SMDK2410 #

烧写完毕,拨到NAND启动,上电,串口115200 8 n 1


U-Boot 2012.04.01 (May 03 2013 - 13:43:45)

CPUID: 32440001
FCLK:????? 400 MHz
HCLK:????? 100 MHz
PCLK:?????? 50 MHz
DRAM:? 64 MiB
WARNING: Caches not enabled
Flash: 2 MiB
NAND:? 256 MiB
*** Warning - bad CRC,using default environment

In:??? serial
Out:?? serial
Err:?? serial
Net:?? no support
TQ2440 #

看到nand输出信息了,基本正常,下一步支持DM9000

(编辑:李大同)

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

    推荐文章
      热点阅读