Hello wind_embedded, wind_embedded wrote: > Hello: > > Now I port u-boot into mpc8247, I need everyone's help, thanks! > > my board configuration is following: > chip select chip size address > CS0 AM29LV040B 512K 0xfff00000 > CS1 S29GL256P 64M 0xff800000 > CS2 SDRAM 256M 0x00000000 > > Before I use VxWorks, it works fine. When I port u-boot, my project > based on IDS8247. I changed configuration in IDS8247.h and updated > flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. > Console output(DEBUG is defined): > CPU: MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 400 MHz
Which version of u-boot do you use? > Board: ADS 8247 > I2C: ready > DRAM: 128 MB > Top of RAM usable for U-Boot at: 08000000 > Reserving 160k for U-Boot at: 07fd7000 > Reserving 192k for malloc() at: 07fa7000 > Reserving 76 Bytes for Board Info at: 07fa6fb4 > Reserving 72 Bytes for Global Data at: 07fa6f6c > Stack Pointer at: 07fa6f48 > New Stack Pointer is: 07fa6f48 > Now running in RAM - U-Boot at: 07fd7000 > FLASH: Manuf. ID @ 0xfff00000: 0x00000004 > ## Unknown FLASH on Bank 0 - Size = 0x00000000 = 0 MB > flash_protect ON: from 0xFFF00000 to 0xFFF22FFF > flash_protect ON: from 0xFFF70000 to 0xFFF7FFFF > *** failed *** > ### ERROR ### Please RESET the board ### > > I found the manufacture ID of flash is error , it should be 0x01, but > it is 0x04, it is the first byte that u-boot.bin file was burned into > AM29LV040. In my flash.c file, the code that I get manufacture ID as > following: > ... > flash_cmd_autoselect (base); > mfrId= U8_READ (base); > flash_cmd_reset (base); Hmm.. what code is this? It looks to me, that you don;t use the CFI drvier! Please try this driver to access your flash. bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany This code are section of flash_get_size function in flash.c. the related functions are as following: static ulong flash_get_size (volatile uchar * addr, flash_info_t * info) { ulong base; uchar value; base = (ulong) addr; flash_cmd_autoselect (base); asm("sync"); value = U8_READ (base); flash_cmd_reset (base); debug ("Manuf. ID @ 0x%08lx: 0x%02x\n", (ulong)addr, value); switch (value) { case (uchar) AMD_MANUFACT: info->flash_id = FLASH_MAN_AMD; break; default: info->flash_id = FLASH_UNKNOWN; info->sector_count = 0; info->size = 0; addr[0] = (uchar) 0x00FF00FF; /* restore read mode */ return (0); /* no or unknown flash */ } flash_cmd_autoselect (base); asm("sync"); value = U8_READ (base + 1); flash_cmd_reset (base); debug ("Device ID @ 0x%08lx: 0x%02x\n", (ulong)(&addr[0x1]), value); switch (value) { case (uchar) AMD_ID_LV040B: info->flash_id += FLASH_AM040; info->sector_count = 8; info->size = 0x00080000; break; /* => 512K */ default: info->flash_id = FLASH_UNKNOWN; break; } if (info->sector_count > CFG_MAX_FLASH_SECT) { printf ("** ERROR: sector count %d > max (%d) **\n", info->sector_count, CFG_MAX_FLASH_SECT); info->sector_count = CFG_MAX_FLASH_SECT; } return (info->size); } unsigned long flash_init (void) { unsigned long size_b0; int i; volatile immap_t * immr = (immap_t *)CFG_IMMR; volatile memctl8260_t *memctl = &immr->im_memctl; /* Init: no FLASHes known */ for (i = 0; i < CFG_MAX_FLASH_BANKS; ++i) { flash_info[i].flash_id = FLASH_UNKNOWN; } /* Static FLASH Bank configuration here - FIXME XXX */ size_b0 = flash_get_size ((volatile uchar *) CFG_FLASH_BASE, &flash_info[0]); if (flash_info[0].flash_id == FLASH_UNKNOWN) { printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n", size_b0, size_b0 << 20); } memctl->memc_or0 = 0xfff00866; memctl->memc_br0 = 0xfff00801; flash_get_offsets (0xfff00000, &flash_info[0]); #if CFG_MONITOR_BASE >= CFG_FLASH_BASE /* monitor protection ON by default */ (void) flash_protect (FLAG_PROTECT_SET, CFG_MONITOR_BASE, CFG_MONITOR_BASE + monitor_flash_len - 1, &flash_info[0]); #endif #ifdef CFG_ENV_IS_IN_FLASH /* ENV protection ON by default */ flash_protect (FLAG_PROTECT_SET, CFG_ENV_ADDR, CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]); #endif flash_info[0].size = size_b0; return (size_b0); } _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot