cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Anonymous
Not applicable
8,846 Views

Spansion serial FLASH write problems (xilisf + axi_quad_spi in Microblaze)

Jump to solution

I'm trying to access an FPGA attached Spansion S25FL064P serial FLASH
memory chip. The hardware is fine: FLASH can be programmed via iMPACT.


After building a MicroBlaze system with xilifs support, I am able to
read entire FLASH content correctly. The chip detection, it's geometry
(pages, sectors) is correctly recognized. Also sector erase operation
(after enabling writes in the memory) works as expected. Only the write
operation always fails in my system and I cannot figure out why.

 

The SPI command stream in the xilifs library when requesting write 

operation on AXI looks reasonably well: XISF_WRITE command followed by
24-bits of address and requested data.

 

I use Xilinx SDK 14.4, axi_quad_spi_spi core 2.00.a and Standalone
board support package in revision 3.08.a. The FPGA is Spartan 6 LX.

 

Entire, compilable project with board support package and
hardware configuration is attached for verification. An extracted
short source file performing FLASH access via xilifs is in a separate
attachment - maybe someone can take a look and quickly spot the error
there.

 

Anyone successfully wrote something to Spansion serial FLASH memories?
Anyone can point what am I doing wrong? Probably it's something
trivial. I already tried different variants of AXI_QUAD_SPI module settings. It

was set to QUAD mode and STANDARD mode, which doesn't seem to make

any difference: reads and erase operations work, while writes don't. The

FLASH family in board support package xilisf configuration is set to
'5'. The description tells that '5' represents Numonyx chips, however
library headers define Spansion family to be number 5. Maybe that's my
incorrect understanding.

 

Any help or suggestion would be highly appreciated.

 

--

Tomek

axi_quad_spi_config.png
bsp_xilisf_config.png
0 Kudos
1 Solution

Accepted Solutions
gjswalling
Newbie
Newbie
15,543 Views
Registered: ‎10-15-2014

Hello Tomek,

If f_write_enable is calling WREN to set WEL, then the erase call should clear WEL.  Please add another call between the erase and program operations:

f_write_enable (TRUE);

 

Best Regards,

Gary

 

View solution in original post

0 Kudos
2 Replies
gjswalling
Newbie
Newbie
15,544 Views
Registered: ‎10-15-2014

Hello Tomek,

If f_write_enable is calling WREN to set WEL, then the erase call should clear WEL.  Please add another call between the erase and program operations:

f_write_enable (TRUE);

 

Best Regards,

Gary

 

View solution in original post

0 Kudos
Anonymous
Not applicable
8,475 Views

Thank you. That worked. The solution was as simple as you suggested.

 

--

Tomek

0 Kudos