u-boot2012.04移植到jz2440 支持norflash
发布时间:2020-12-15 20:01:18 所属栏目:百科 来源:网络整理
导读:u-boot2012.04支持norflash ?? ?1. nand flash 启动启动代码 ?? ??? ??? ?U-Boot 2012.04.01 (Jul 22 2016 - 13:26:28) ?? ??? ??? ?CPUID: 32440001 ?? ??? ??? ?FCLK:????? 400 MHz ?? ??? ??? ?HCLK:????? 100 MHz ?? ??? ??? ?PCLK:?????? 50 MHz ?? ???
u-boot2012.04支持norflash
?? ?1. nand flash 启动启动代码 ?? ??? ??? ?U-Boot 2012.04.01 (Jul 22 2016 - 13:26:28) ?? ??? ??? ?CPUID: 32440001 ?? ??? ??? ?FCLK:????? 400 MHz ?? ??? ??? ?HCLK:????? 100 MHz ?? ??? ??? ?PCLK:?????? 50 MHz ?? ??? ??? ?DRAM:? 64 MiB ?? ??? ??? ?WARNING: Caches not enabled ?? ??? ??? ?Flash: *** failed *** ?? ??? ??? ?### ERROR ### Please RESET the board ### ?? ??? ?搜索:Flash: ? ?? ??? ??? ??? ??? ?puts("Flash: ");?? ?Board.c (archarmlib)?? ? 代码关系:?? ? ?? ??? ? board_init_r puts("Flash: "); flash_size = flash_init(); //对nor flash的初始化 if (flash_size > 0) print_size(flash_size,"n"); else { puts(failed); // static char *failed = "*** failed ***n"; hang(); // puts("### ERROR ### Please RESET the board ###n") for (;;); } ?? ??? ??? ?==> nand flash 启动没有必要 hang 。 ?? ??? ??? ??? ??? ?==>注销 ??? ?puts(failed); ?? ?hang();? ? ?? ??? ??? ??? ??? ? 2. 解决无法nor flash启动的问题 ?? unsigned long flash_init (void) cfi_flash_bank_addr(在si中显示灰色) (drivers/mtd/cfi_flash.c:100:static phys_addr_t __cfi_flash_bank_addr(int i) -->phys_addr_t cfi_flash_bank_addr(int i) __attribute__((weak,alias("__cfi_flash_bank_addr"))); static phys_addr_t __cfi_flash_bank_addr(int i) { return ((phys_addr_t [])CONFIG_SYS_FLASH_BANKS_LIST)[i]; } ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?(结果为0) ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?面对复杂的问题。使用打印信息解决 ?? ??? ??? ??? ??? ?打开cfi_flash 的 DEBUG宏 ?? ??? ??? ??? ??? ?nor flash启动。 usb 下载 ?? ??? ??? ??? ??? ?usb 1 30000000 ?? ??? ??? ??? ??? ?protect off all ?? ??? ??? ??? ??? ?erase 0 7ffff ?? ??? ??? ??? ??? ?cp.b 30000000 0 80000 ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ??? ??? ?U-Boot 2012.04.01 (Jul 22 2016 - 22:02:57) CPUID: 32440001 FCLK: 400 MHz HCLK: 100 MHz PCLK: 50 MHz DRAM: 64 MiB WARNING: Caches not enabled Flash: fwc addr (null) cmd f0 00f0 16bit x 16 bit fwc addr 0000aaaa cmd aa 00aa 16bit x 16 bit fwc addr 00005554 cmd 55 0055 16bit x 16 bit fwc addr 0000aaaa cmd 90 0090 16bit x 16 bit fwc addr (null) cmd f0 00f0 16bit x 16 bit JEDEC PROBE: ID c2 2249 0 fwc addr (null) cmd ff 00ff 16bit x 16 bit fwc addr (null) cmd 90 0090 16bit x 16 bit fwc addr (null) cmd ff 00ff 16bit x 16 bit JEDEC PROBE: ID 13 ea00 0 0 KB *** Warning - bad CRC,using default environment In: serial Out: serial Err: serial Net: CS8900-0 ?? ??? ??? ??? ?搜索:JEDEC PROBE ?? ??? ??? ??? ? ?? ??? ??? ??? ?确定取得的ID 数据对不对 ?? ? ?? ?没有识别出所用的这个nor flasdh 芯片 ?? 在 static const struct amd_flash_info jedec_table[] = { // Jedec_flash.c (driversmtd) 添加一下代码 /*jz2440 v2 MT29D160DT*/ { .mfr_id = (u16)MX_MANUFACT,/*厂家 ID*/ .dev_id = 0X2249,/*设备ID*/ .name = "MXIC MT29D160DT",/*名字*/ .uaddr = { /*解锁地址 ,nor flash写之前需要解锁,这个地址是nor flash角度看到的地址*/ [1] = MTD_UADDR_0x0555_0x02AA /* x16 */ },.DevSize = SIZE_2MiB,/*总大小*/ .CmdSet = P_ID_AMD_STD,.NumEraseRegions= 4,/*擦除区域的个数,擦除块是多少*/ .regions = { ERASEINFO(16 * 1024,1),ERASEINFO(8 * 1024,2),ERASEINFO(32 * 1024,ERASEINFO(64 * 1024,31),} } ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ?修改:#define CONFIG_SYS_MAX_FLASH_SECT?? ?(19) 为 ?? ??? ??? ??? ?#define CONFIG_SYS_MAX_FLASH_SECT?? ?(120) ?? ??? ??? ??? ? ?? ??? ??? ??? ?去掉 cfi_flash 的调试信息 ?? ??? ??? ??? ? ?? ??? ??? ??? ?make ?? ??? ??? ??? ? ?? ??? ??? ??? ? ?? ? CPUID: 32440001 FCLK: 400 MHz HCLK: 100 MHz PCLK: 50 MHz DRAM: 64 MiB WARNING: Caches not enabled Flash: ERROR: too many flash sectors 2 MiB //已经识别出来 *** Warning - bad CRC,using default environment In: serial Out: serial Err: serial Net: CS8900-0 SMDK2410 # flinfo Bank # 1: MXIC MT29D160DT flash (16 x 16) Size: 2 MB in 19 Sectors AMD Legacy command set,Manufacturer ID: 0xC2,Device ID: 0x2249 Erase timeout: 30000 ms,write timeout: 100 ms Sector Start Addresses: 00000000 RO 00004000 RO 00006000 RO 00008000 RO 00010000 RO 00020000 RO 00030000 RO 00040000 RO 00050000 RO 00060000 RO 00070000 RO 00080000 00090000 000A0000 000B0000 000C0000 000D0000 000E0000 000F0000 ?? ??? ??? ? ?? ??? ??? ? ?? ??? ??? ?//RO 软件指定为只读 ? ?? ??? ??? ?测试 u-boot 之后的数据。能否写 ?? ??? ??? ?SMDK2410 # erase 80000? 8ffff ?? ??? ? . done Erased 1 sectors SMDK2410 # cp.b 30000000 80000 10000 //对刚才擦除的地方进行写 Copy to Flash... 9....8....7....6....5....4....3....2....1....done md.b 30000000 SMDK2410 # md.b 30000000 30000000: 14 00 00 ea 14 f0 9f e5 14 f0 9f e4 14 f0 9f e5 30000010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 30000020: 60 01 f0 33 c0 01 f0 33 20 02 f0 33 80 02 f0 33 30000030: e0 02 f0 33 40 03 f0 33 a0 03 f0 33 ef be ad de SMDK2410 # md.b 80000 00080000: 14 00 00 ea 14 f0 9f e5 14 f0 9f e4 14 f0 9f e5 00080010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 00080020: 60 01 f0 33 c0 01 f0 33 20 02 f0 33 80 02 f0 33 00080030: e0 02 f0 33 40 03 f0 33 a0 03 f0 33 ef be ad de mw.b 30000000 12345678 erase 80000 8ffff cp.b 30000000 80000 10000 cmp.b 30000000 80000 10000 SMDK2410 # cmp 30000000 800000 10000 word at 0x30000008 (0xe49ff014) != word at 0x00800008 (0xe59ff014) Total of 2 words were the same?? ??? ??? ?//如果在第二阶段之前,没有重新设置栈,将会有问题 ?? ??? ??? ? ?? ??? ??? ? ?? ??? ??? ?可以使用loady 来进行下载 (使用超级终端 ) ?? ??? ??? ? ?? ??? ?没有网络的情况下,可以使用这种方法,进行u-boot的更新 ?? ??? ??? ? ?? ??? ??? ??? ??? ? ?? ??? ???? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |