[U-Boot] Does U-boot supports Spansion S29GL512P NOR Flash?

prakash bedge prakash.bedge at gmail.com
Fri Apr 16 16:38:13 CEST 2010


Hi,



I removed the changes as you suggested and now it is working without
modifying the code.

Only thing is that I had to add a flag *CONFIG_SYS_WRITE_SWAPPED_DATA* and
it works.



But here I am getting the error in erasing the sector as well in saveenv.



U-Boot $  *saveenv*

Saving Environment to Flash...

copy old content: sect_addr: FFFA0000  env_addr: FFFA0000  offset: 00000000

Protect off FFFA0000 ... FFFBFFFF

Un-Protecting sectors 509..509 in bank 1

Un-Protected 1 sectors

Erasing Flash...Erase Flash from 0xfffa0000 to 0xfffbffff in Bank # 1

fwc addr fffa0aaa cmd aa aa00 16bit x 16 bit

fwc addr fffa0554 cmd 55 5500 16bit x 16 bit

fwc addr fffa0aaa cmd 80 8000 16bit x 16 bit

fwc addr fffa0aaa cmd aa aa00 16bit x 16 bit

fwc addr fffa0554 cmd 55 5500 16bit x 16 bit

fwc addr fffa0000 cmd 30 3000 16bit x 16 bit

*flash_is_busy: 0*

. done

Erased 1 sectors

*Writing to Flash... Flash not Erased*

Protecting sectors 509..509 in bank 1

Protected 1 sectors



Here the data is not erase but the last erase sector command data is
displayed instead of environment parameters.

U-Boot $  md 0xfffa0000

fffa0000: 3000ffff ffffffff ffffffff ffffffff    0...............

fffa0010: ffffffff ffffffff ffffffff ffffffff    ................



I tired to program the word and erase the sector but here again erase
failed.

U-Boot $  mw.w 0xfdfa0000 0xfc00

 U-Boot $  mw.w 0xfdfa0aaa 0xaa00

 U-Boot $  mw.w 0xfdfa0554 0x5500

 U-Boot $  mw.w 0xfdfa0aaa 0xa000

 U-Boot $  mw.w 0xfdfa0000 0x3132

 U-Boot $  md.w 0xfdfa0000

fdfa0000: 3132 ffff ffff ffff ffff ffff ffff ffff    12..............

fdfa0010: ffff ffff ffff ffff ffff ffff ffff ffff    ................

fdfa0020: ffff ffff ffff ffff ffff ffff ffff ffff    ................

fdfa0030: ffff ffff ffff ffff ffff ffff ffff ffff    ................

fdfa0040: ffff ffff ffff ffff ffff ffff ffff ffff    ................

fdfa0050: ffff ffff ffff ffff ffff ffff ffff ffff    ................

fdfa0060: ffff ffff ffff ffff ffff ffff ffff ffff    ................

fdfa0070: ffff ffff ffff ffff ffff ffff ffff ffff    ................

 U-Boot $  erase 0xfdfa0000 +0x20000

Erase Flash from 0xfdfa0000 to 0xfdfbffff in Bank # 1

fwc addr fdfa0aaa cmd aa aa00 16bit x 16 bit

fwc addr fdfa0554 cmd 55 5500 16bit x 16 bit

fwc addr fdfa0aaa cmd 80 8000 16bit x 16 bit

fwc addr fdfa0aaa cmd aa aa00 16bit x 16 bit

fwc addr fdfa0554 cmd 55 5500 16bit x 16 bit

fwc addr fdfa0000 cmd 30 3000 16bit x 16 bit

flash_is_busy: 0

. done

Erased 1 sectors

 U-Boot $  erase 0xfdfa0000 +0x20000

 U-Boot $   md.w 0xfdfa0000

fdfa0000: *3000* ffff ffff ffff ffff ffff ffff ffff    0...............

fdfa0010: ffff ffff ffff ffff ffff ffff ffff ffff    ................


But, when I program the 0xfcfa0000 address and tried to erase the sector
then I am able to erase the sector.


U-Boot $  mw.w 0xfcfa0000 0xfc00

U-Boot $  mw.w 0xfcfa0aaa 0xaa00

U-Boot $  mw.w 0xfcfa0554 0x5500

U-Boot $  mw.w 0xfcfa0aaa 0xa000

U-Boot *$ mw.w 0xfcfa0000 0x3132*

U-Boot $  md.w 0xfcfa0000

fcfa0000: *3132* ffff ffff ffff ffff ffff ffff ffff    12..............

fcfa0010: ffff ffff ffff ffff ffff ffff ffff ffff    ................



U-Boot $  *erase 0xfcfa0000 0x20000*

Erase Flash from 0xfcfa0000 to 0xfcfbffff in Bank # 1

fwc addr fcfa0aaa cmd aa aa00 16bit x 16 bit

fwc addr fcfa0554 cmd 55 5500 16bit x 16 bit

fwc addr fcfa0aaa cmd 80 8000 16bit x 16 bit

fwc addr fcfa0aaa cmd aa aa00 16bit x 16 bit

fwc addr fcfa0554 cmd 55 5500 16bit x 16 bit

fwc addr fcfa0000 cmd 30 3000 16bit x 16 bit

flash_is_busy: 1

flash_is_busy: 1

flash_is_busy: 1

.

.

.

flash_is_busy: 1

flash_is_busy: 1

flash_is_busy: 0

. done

Erased 1 sectors

 U-Boot $  md 0xfcfa0000

*fcfa0000: ffffffff ffffffff* ffffffff ffffffff    ................

fcfa0010: ffffffff ffffffff ffffffff ffffffff    ................

fcfa0020: ffff ffff ffff ffff ffff ffff ffff ffff    ................

fcfa0030: ffff ffff ffff ffff ffff ffff ffff ffff    ................



I am able to erase 128 sector from flash base i.e. I am able to erase the
flash from flash base 0xfc000000 upto 16 MB size.

But I am not able to erase the remaining 384 sectors from 0xFD000000
onwards.



My current flash settings

/*-----------------------------------------------------------------------

 * FLASH related

 *----------------------------------------------------------------------*/

#define CONFIG_SYS_FLASH_CFI

#define CONFIG_FLASH_CFI_DRIVER

#define CONFIG_SYS_FLASH_EMPTY_INFO                  /* print 'E' for empty
sector on flinfo */

#define CONFIG_SYS_FLASH_BASE                 0xfc000000        /* start of
FLASH           */

#define CONFIG_ENV_IS_IN_FLASH     1



#define CONFIG_SYS_WRITE_SWAPPED_DATA



#define CONFIG_SYS_FLASH_CFI_WIDTH (FLASH_CFI_16BIT)



#define CONFIG_SYS_FLASH_BANKS_LIST    {CONFIG_SYS_FLASH_BASE}

#define CONFIG_SYS_MAX_FLASH_BANKS     1                            /*
number of banks         */

#define CONFIG_SYS_MAX_FLASH_SECT         512                       /*
sectors per device   */

#define CONFIG_FLASH_SHOW_PROGRESS    1

#define CONFIG_SYS_FLASH_ERASE_TOUT     300000  /* Timeout for Flash Erase
(in ms)           */

#define CONFIG_SYS_FLASH_WRITE_TOUT      500       /* Timeout for Flash
Write (in ms)            */



#define CONFIG_SYS_MONITOR_BASE      0xFFFC0000            /* Start of
U-Boot           */

#define CONFIG_SYS_MONITOR_LEN         256



#define CONFIG_ENV_SECT_SIZE         0x20000 /* size of one complete sector
*/

#define CONFIG_ENV_ADDR
(CONFIG_SYS_MONITOR_BASE-CONFIG_ENV_SECT_SIZE)

#define CONFIG_ENV_SIZE                         0x4000        /* Total Size
of Environment Sector          */





But when I give the “erase all” command then the complete flash gets erased.
I am little bit confused by this abnormal behavior.

Is there something in code needs to check or there be an issue with chip
address bus?



Regards,

Prakash




On Wed, Apr 14, 2010 at 5:35 PM, Stefan Roese <sr at denx.de> wrote:

> Hi Prakash,
>
> On Wednesday 14 April 2010 07:03:59 prakash bedge wrote:
> > Does the latest code supports S29GL512P chip, since I am not seeing any
> > instance of this chip in 2010.03 uboot code.
>
> Yes. We have told you multiple times, that this chip is supported. You
> can't
> find it in the source though, since no code was needed to specifically
> support
> this chip. But its working!
>
> > >>So you have chipwidth *and* portwidth of 16! This is the most common
> use
> >
> > case.
> > But when flash is getting detected it shows the chipwidth is 8 and
> > portwidth is 16. If you see the logs in earlier mail it is like
> > *found port 2 chip 1 port 16 bits chip 8 bits. *Is it correct or wrong?
> >
> > >> Again, please use the mainline CFI driver and give it another try.
> >
> >  I can not use the current code as we have to use the present code for
> some
> > reason. I believe the uboot code 2009.08, I am using, must also support
> the
> > S29GL512P chip.
>
> Yes. 2009.08 already supported this chip. But you seem to be using a
> special
> patch for this driver, which might afflict this.
>
> > I replaced the cfi_flash.c with the new cfi_flash.c file from latest
> uboot
> > version 2010.03 and done relevant changes.
>
> Which changes? No changes to this driver are needed to support this chip!!!
>
> > But still I didn't get the
> > postive result. Is there anything else that I have to check, or by using
> > only cfi_flash.c and cfi_flash.h from 2010.03 uboot code CFI flash driver
> > will work?
> >
> > I can not use the latest code but I want the CFI support for S29GL512P.
> > Can you please tell that, what I need to do to make the CFI driver works
> > for the S29GL512P chip?
>
> See above.
>
> > >> What kind of "utility"? Don't you use the BDI3000 for FLASH
> programming?
> >
> > We have customized utility to flash the binary.
>
> Still not clear to me, what this "utility" is.
>
> > Using BDI3000 I tried to
> > erase the flash but it didn't work.
>
> So the BDI FLASH commands ("erase", "prog" etc) don't work?
>
> > I followed the CFI erase command
> > seuence but it fails to erase the flash.
> > BDI3000>md 0xfe7c0000
> > fe7c0000 : 27051956 552d426f 6f742032 3030392e  '..VU-Boot 2009.
> > fe7c0010 : 30382028 41707220 31342032 30313020  08 (Apr 14 2010
> > fe7c0020 : 2d203130 3a30313a 32392900 00000000  - 10:01:29).....
> > fe7c0030 : 00000000 00000000 00000000 00000000  ................
> > fe7c0040 : 00000000 00000000 00000000 00000000  ................
> > fe7c0050 : 00000000 00000000 00000000 00000000  ................
> > fe7c0060 : 00000000 00000000 00000000 00000000  ................
> > fe7c0070 : 00000000 00000000 00000000 00000000  ................
> > fe7c0080 : 00000000 00000000 00000000 00000000  ................
> > fe7c0090 : 00000000 00000000 00000000 00000000  ................
> > fe7c00a0 : 00000000 00000000 00000000 00000000  ................
> > fe7c00b0 : 00000000 00000000 00000000 00000000  ................
> > fe7c00c0 : 00000000 00000000 00000000 00000000  ................
> > fe7c00d0 : 00000000 00000000 00000000 00000000  ................
> > fe7c00e0 : 00000000 00000000 00000000 00000000  ................
> > fe7c00f0 : 00000000 00000000 00000000 00000000  ................
> > *BDI3000>mmb 0xfc000000 0xf0
> > BDI3000>mmb 0xfc000aaa 0xaa
> > BDI3000>mmb 0xfc000555 0x55
> > BDI3000>mmb 0xfc000aaa 0x80
> > BDI3000>mmb 0xfc000aaa 0xaa
> > BDI3000>mmb 0xfc000555 0x55
> > BDI3000>mmb 0xfe7c0000 0x30
> > *BDI3000>mmb 0xfc000000 0xf0
> > BDI3000>md 0xfe7c0000 -- *sector data is not erased
>
> You are using byte access. You should be using word (16bit) access instead!
> And the word unlock addresses.
>
> Cheers,
> Stefan
>
> --
> DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de
>


More information about the U-Boot mailing list