[U-Boot] ppc, flash init on mpc8247, Unknown FLASH on Bank 0

wind_embedded wind_embedded at sina.com
Wed Oct 13 06:50:47 CEST 2010


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
   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);
   ...
   The functions that above code called is as following:
   #define U8_WRITE(reg, val)  (*((volatile uchar  *)(reg)) =
((uchar)((val)&0xFF)))
   #define U8_READ(reg)       (*((volatile uchar  *)(reg)))
   static void flash_cmd_reset (ulong base)
   {
   U8_WRITE (base + 0x0, 0xF0);
   }
   static void flash_cmd_unlock (ulong base)
   {
   U8_WRITE (base + 0x555, 0xAA);
   U8_WRITE (base + 0x2AA, 0x55);
   }
   static void flash_cmd_autoselect (ulong base)
   {
   flash_cmd_unlock (base + 0x555);
   U8_WRITE (base + 0x555, 0x90);
   }
 
   I want to get everyone's help, thank you very much!


More information about the U-Boot mailing list