u-boot-2012.04.01移植到TQ2440(三):移植NOR FLASH
一、????移植NOR FLASH 去掉配置文件includeconfigstq2440.h中的宏并修改代码段基地址 #define CONFIG_SYS_TEXT_BASE 0x0 //#defineCONFIG_SKIP_LOWLEVEL_INIT 在boardtq2440lowlevel_init.S修改SDRAM’刷新频率 #define REFCNT???????????????????? 0x4f4 该文件中的这三条指令其实可以用一条指令替换adrl r0,SMRDATA ldr???? r0,=SMRDATA ldr??? r1,_TEXT_BASE sub? r0,r0,r1 进入/drivers/mtd/cfi_flash.c中的flash_init()函数 在该文件开头定义宏DEBUG打开调试信息 #define DEBUG 1 #define _DEBUG???? 1 重新编译 用原先的u-boot从NOR FLASH启动,将新u-boot.bin烧到NOR FLASH TQ2440 # tftp 32000000u-boot.bin dm9000 i/o: 0x20000000,id:0x90000a46 DM9000: running in 16 bitmode MAC: 00:0c:29:4d:e4:f4 Using dm9000 device TFTP from server172.28.12.60; our IP address is 172.28.12.10 Filename 'u-boot.bin'. Load address: 0x32000000 Loading: T ############# done Bytes transferred = 180828(2c25c hex) TQ2440 # protect off all Un-Protect Flash Bank # 1 TQ2440 # erase 0 +30000 ? ...... done Erased 6 sectors TQ2440 # cp.b 32000000 030000 Copy to Flash...9....8....7....6....5....4....3....2....1....done TQ2440 # 重启开发板 U-Boot 2012.04.01 (Dec 292012 - 14:25:05) ? CPUID: 32440001 FCLK:????? 400 MHz HCLK:????? 100 MHz PCLK:?????? 50 MHz DRAM:? 64 MiB WARNING: Caches not enabled Flash: fwc addr (null) cmdf0 00f0 16bit x 16 bit fwc addr 0000aaaa cmd aa00aa 16bit x 16 bit fwc addr 00005554 cmd 550055 16bit x 16 bit fwc addr 0000aaaa cmd 900090 16bit x 16 bit fwc addr (null) cmd f0 00f016bit x 16 bit JEDEC PROBE: ID 1c2249 0 fwc addr (null) cmd ff 00ff16bit x 16 bit fwc addr (null) cmd 90 009016bit x 16 bit fwc addr (null) cmd ff 00ff16bit x 16 bit JEDEC PROBE: ID 13 ea00 0 *** failed *** ### ERROR ### Please RESETthe board ### 搜索“JEDEC PROBE:” ? flash_read_jedec_ids(info); ?????????????????????? debug("JEDECPROBE: ID %x %x %xn", ???????????????????????????????????? info->manufacturer_id, ???????????????????????????????????? info->device_id, ???????????????????????????????????? info->device_id2); ?????????????????????? if (jedec_flash_match(info,info->start[0])) ????????????????????????????? break; ?????????????????????? else ????????????????????????????? unmap_physmem((void*)info->start[0], ???????????????????????????????????? ????? MAP_NOCACHE); driversmtdjedec_flash.c中的jedec_flash_match()函数: /*----------------------------------------------------------------------- ?* match jedec ids against table. If a match isfound,fill flash_info entry ?*/ intjedec_flash_match(flash_info_t *info,ulong base) { ? int ret = 0; ? int i; ? ulong mask = 0xFFFF; ? if (info->chipwidth == 1) ???????? mask = 0xFF; ? ? for (i = 0; i < ARRAY_SIZE(jedec_table); i++) { ???????? if ((jedec_table[i].mfr_id & mask) ==(info->manufacturer_id & mask) && ???????? ???(jedec_table[i].dev_id & mask) == (info->device_id & mask)) { ??????????????? fill_info(info,&jedec_table[i],base); ??????????????? ret = 1; ??????????????? break; ???????? } ? } ? return ret; } flash_read_jedec_ids(info)读出了我们的开发板的NOR FLASH的厂商ID为0x1c,设备ID为0x2249 jedec_flash_match(info,info->start[0])将读出的信息与jedec_table[]数组进行匹配,如果有匹配成功则填充flashin信息并返回1,否则返回0。说明这里没有匹配成功,需要在jedec_table[]数组中添加我们自己开发板的NOR FLASH信息。 修改配置文件includeconfigstq2440.h #defineCONFIG_SYS_FLASH_LEGACY_1024Kx16 在driversmtdjedec_flash.c文件中jedec_table[]数组中增加EN29LV160AB的配置根据芯片手册。 #ifdefCONFIG_SYS_FLASH_LEGACY_1024Kx16 ??? /* TQ2440 EN29LV160AB */ ??? {?? ??????????? .mfr_id???? = 0x1c,? /* 厂商ID */ ??????????? .dev_id???? = 0x2249,??/* 设备ID */ ????????? ??.name??????= "EON EN29LV160AB", ??????????? .uaddr????? = {/* 因为NOR FLASH的ADDR0接到了S3C2440的ADDR1 */ ??????????????? [1] = MTD_UADDR_0x0555_0x02AA/* x16 */ ??????????? },? ??????????? .DevSize??? = SIZE_2MiB, ??????????? .CmdSet???? = P_ID_AMD_STD, ??? ????????.NumEraseRegions= 4, ??????????? .regions??? = { ??????????????? ERASEINFO(0x04000,1), ??????????????? ERASEINFO(0x02000,2),? ??????????????? ERASEINFO(0x08000,? ??????????????? ERASEINFO(0x10000,31), ??????????? }?? ??????? },? #endif 重新编译通过工具将u-boot.bin烧写到NOR FLASH U-Boot 2012.04.01 (Dec 292012 - 15:26:09) ? CPUID: 32440001 FCLK:????? 400 MHz HCLK:????? 100 MHz PCLK:?????? 50 MHz DRAM:? 64 MiB WARNING: Caches not enabled Flash: fwc addr (null) cmdf0 00f0 16bit x 16 bit fwc addr 0000aaaa cmd aa00aa 16bit x 16 bit fwc addr 00005554 cmd 550055 16bit x 16 bit fwc addr 0000aaaa cmd 900090 16bit x 16 bit fwc addr (null) cmd f0 00f016bit x 16 bit JEDEC PROBE: ID 1c 2249 0 ERROR: too manyflash sectors 2 MiB *** Warning - bad CRC,usingdefault environment ? In:??? serial Out:?? serial Err:?? serial Net:?? No ethernet found. TQ2440 # 出现一个错误ERROR: too many flash sectors 修改配置文件includeconfigstq2440.h #defineCONFIG_SYS_MAX_FLASH_SECT (35) 取消调试信息driversmtdcfi_flash.c //#define DEBUG??? 1 //#define _DEBUG? 1 重新编译 U-Boot 2012.04.01 (Dec 292012 - 15:33:09) ? CPUID: 32440001 FCLK:????? 400 MHz HCLK:????? 100 MHz PCLK:?????? 50 MHz DRAM:? 64 MiB WARNING: Caches not enabled Flash: 2 MiB *** Warning - bad CRC,usingdefault environment ? In:??? serial Out:?? serial Err:?? serial Net:?? No ethernet found. TQ2440 # fflinfo ? Bank # 1: EON EN29LV160ABflash (16 x 16)? Size: 2 MB in 35 Sectors ? AMD Legacy command set,Manufacturer ID:0x1C,Device ID: 0x2249 ? Erase timeout: 30000 ms,write timeout: 100ms ? ? Sector Start Addresses: ? 00000000??RO?? 00004000?? RO??00006000?? RO?? 00008000??RO?? 00010000?? RO ? 00020000??RO?? 00030000??????? 00040000??????? 00050000??????? 00060000????? ? 00070000??RO?? 00080000??????? 00090000??????? 000A0000??????? 000B0000????? ? 000C0000??????? 000D0000??????? 000E0000??????? 000F0000??????? 00100000????? ??00110000???????00120000??????? 00130000??????? 00140000??????? 00150000????? ? 00160000??????? 00170000??????? 00180000??????? 00190000??????? 001A0000????? ? 001B0000??????? 001C0000??????? 001D0000??????? 001E0000??????? 001F0000????? TQ2440 # md.b 32000000 a 32000000: 13 00 00 ea 14 f09f e5 14 f0??? .......... TQ2440 # erase 100000 +a ? . done Erased 1 sectors TQ2440 # cp.b 32000000100000 a Copy to Flash... done TQ2440 # md.b 100000 a 00100000: 13 00 00 ea 14 f09f e5 14 f0??? .......... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |