UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Observer francoislegal
Observer
10,750 Views
Registered: ‎07-09-2013

Asynchronous external data abort on baremetal application

Hello,

 

I created a piece of code used to verify if I can erase/write/read the FLASH on the Qspi interface.

I based my code on the FSBL code, and added the functions to erase and write.

My piece of code was working good on a custom SBC, I then had to run it on the target board (from which my testboard was derived).

The weird thing is that on that board, I get an asynchronous external data abort (with ARM DFSR at 0x1406 and DFAR at 0).

It is very strange, because this abort happens in the Qspi driver, in the XQspiPs_PolledTransfer function, when the code copies the data read from Qspi in user buffer.

 

Anybody has an idea of what is happening.

 

Thanks

 

François

 

 

0 Kudos
3 Replies
Xilinx Employee
Xilinx Employee
10,698 Views
Registered: ‎07-23-2012

Re: Asynchronous external data abort on baremetal application

What frequency are you operating at? What is the flash that you are targeting? Is it listed under AR#50991?

Can you please share QSPI schematic here?

Does this flash pass selftest driver code?
-----------------------------------------------------------------------------------------------
Please mark the post as "Accept as solution" if the information provided answers your query/resolves your issue.

Give Kudos to a post which you think is helpful.
0 Kudos
Highlighted
Observer francoislegal
Observer
10,414 Views
Registered: ‎07-09-2013

SOLVED : Asynchronous external data abort on baremetal application

So I finally found the error.

 

Did not take time to verify if this is outlined in the manual.

It turns out that the difference between the boards that made this problem appear is the size of the FLASH. The working one was a 256MBits, and the one that raised the error was 32MBits.

 

So that problem appears because the initialisation code of QSPI (the one from FSBL) set the QSPI to linear mode when the size of the flash permits this. Once the controller is set to linear mode, it is no more possible to explicitely send commands to the FLASH (read status flag for exemple).

 

If I let the QSPI in IO mode, my test code is working great.

Visitor lsq12272036
Visitor
1,513 Views
Registered: ‎11-28-2015

Re: SOLVED : Asynchronous external data abort on baremetal application

Hello!Do you know how to set the QSPI to IO mode? In your code,I made the following changes:

 

if (QspiFlashSize <= FLASH_SIZE_16MB) {
LinearBootDeviceFlag = 1;


XQspiPs_SetOptions(QspiInstancePtr, XQSPIPS_MANUAL_START_OPTION |
XQSPIPS_HOLD_B_DRIVE_OPTION);


XQspiPs_SetLqspiConfigReg(QspiInstancePtr, SINGLE_QSPI_IO_CONFIG_QUAD_READ);


XQspiPs_Enable(QspiInstancePtr);}

 

However, I can only read data from the QSPI, when I want to write data to the QSPI, it can not work.

Thank you!

 

0 Kudos