cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
mrbietola
Scholar
Scholar
9,351 Views
Registered: ‎05-31-2012

very slow SPI bootloader

Jump to solution

Hi,we have a Artix Design with AXI QSPI and Microblaze. I updated to SDK 2015.2.

The AXI QSPI is clocked at 100MHz.

 

I use the bootloader example from SDK,  i need about 22 seconds to load a SREC of 900KB.

 

I tried with AXI QSPI configured as performance mode(with AXI4 instead AXI4 lite), btw, Vivado suggests as connection automation the AXI4lite interconnect, so i manually connected the AXI QSPI to the AXI4 interconnect.  With no result, same boot time.

 

I tried to understand the bootloader code, i find that it reads 1 byte at the time with the function:

Status = XIsf_Read(&Isf, XISF_READ, (void*) &ReadParam);

 

I tried to replace  XISF_READ with  XISF_QUAD_OP_FAST_READ, but  it doesn't work at all.

 

These boot times are expected?    How to improve them?

 

 

 

0 Kudos
Reply
1 Solution

Accepted Solutions
asm2750
Contributor
Contributor
15,459 Views
Registered: ‎11-17-2014

How many bytes are you reading per transfer?

 

I had a similar issue with the Avnet LX9 SREC bootloader where it would only transfer one byte at a time. Typically a transfer for a SPI flash device is four to five control bytes then all subsuquent bytes are data. Obiously if the bootloader is transfering one byte at a time it will take a while to read the entire SREC. If you read more bytes from the SPI flash per transfer you can speed up the bootloader signifigantly.

 

In my case I ended up changing the bootloader to read the first four bytes of a srec line to get the line length, then issued another transfer to read the rest of the line. 

 

Hopefully this is the solution you are looking for. :)

View solution in original post

0 Kudos
Reply
4 Replies
asm2750
Contributor
Contributor
15,460 Views
Registered: ‎11-17-2014

How many bytes are you reading per transfer?

 

I had a similar issue with the Avnet LX9 SREC bootloader where it would only transfer one byte at a time. Typically a transfer for a SPI flash device is four to five control bytes then all subsuquent bytes are data. Obiously if the bootloader is transfering one byte at a time it will take a while to read the entire SREC. If you read more bytes from the SPI flash per transfer you can speed up the bootloader signifigantly.

 

In my case I ended up changing the bootloader to read the first four bytes of a srec line to get the line length, then issued another transfer to read the rest of the line. 

 

Hopefully this is the solution you are looking for. :)

View solution in original post

0 Kudos
Reply
mrbietola
Scholar
Scholar
9,264 Views
Registered: ‎05-31-2012

Hi, thanks you for your reply!

I don't know if i'll have time to rewrite the bootloader.

Have you used the library's functions?

Could you share the code?

 

Thanks!

0 Kudos
Reply
6,435 Views
Registered: ‎05-13-2016

Can you share this code?

0 Kudos
Reply
legend198908
Visitor
Visitor
2,566 Views
Registered: ‎12-07-2017

Hi asm2750,

             How did you solve this problem ?  I also met this problem, my boot period is more than 32s.

0 Kudos
Reply