cancel
Showing results for 
Search instead for 
Did you mean: 

Interruption of CPU read burst access to an end of SDRAM row

Krishna M
Associate II
Posted on June 20, 2017 at 10:41

=====================================================================================

We find the following silicon limitation as per section 2.15 ofSTM32F42xx and STM32F43xx Errata Sheet (April 2017 DocID023833 Rev 11). Our queries are appended further below.

=====================================================================================

2.15 SDRAM bank address corruption upon an interruption of CPU read burst access

Description

If an interrupt occurs during an CPU AHB burst read access to one SDRAM internal bank followed by a second read to another SDRAM internal bank, it may result in wrong data read if all the conditions below are met:

• SDRAM read FIFO enabled. RBURST bit is set in the FMC_SDCR1 register

• An interrupt occurs while CPU is performing an AHB incrementing bursts read access of unspecified length (using LDM = Load Multiple instruction) to one SDRAM internal bank and followed by another CPU read access to another SDRAM internal bank.

The issue occurs only when the address of the second data read access in the following bank match one of the data address in the read FIFO.

Our queries:

1. What happens if an interrupt occurs during an CPU AHB burst read access to one SDRAM internal bank, and a different SDRAM bank is read from within the interrupt? Will the issue be applicable here? If the issue is applicable, would a write to a dummy SDRAM location in some arbitrary bank at the beginning of the interrupt service routine be a safe work around?

2. Is the issue valid for burst and not burst types of read for the 'second read to another SDRAM internal bank' ?

3. Should we take care of any thing else if there are nested interrupts and there is a chance of burst reads to different banks being interrupted in a nested manner? i.e., say the following occurs:

interrupt-1 interrupts a burst read to SDRAM bank-1 and

in interrupt-1 service routine a burst read to SDRAM bank-2 is interrupted by interrupt-2 and

in interrupt-2 service routine a burst read to SDRAM bank-3 is performed and finally it returns to interrupt-1 service routine and then back to non-interrupt level

4. If we do a dummy write to some fixed SDRAM location after all burst reads that are followed by a read to another SDRAM bank in all interruptible contexts (including lower priority interrupt routines), can we be assured that there will be no corrupted data durung SDRAM read?

5. If consequtive burst reads from a particular SDRAM bank is of size greater than the SDRAM read FIFO (all different addresses), can we be sure that there will be no data in the SDRAM read FIFO that is from a different bank, and thereby the subsequent read to a different SDRAM bank will not be corrupted?

NOTE: The workaround to 'disable the SDRAM read FIFO' cannot be used in our project as our SDRAM uses a 16-bit data interface and due to errata clause 2.5 titled 'Interruption of CPU read burst access to an end of SDRAM row', as a workaround we are forced to enable SDRAM read FIFO.

Regards,

Krishna Prasad M

https://ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif

interruption-of-cpu-read-burst-access-to-end-of-sdram

2 REPLIES 2
Posted on July 08, 2017 at 17:23

I would avoid using SDRAM for a stack, it is slow, and likely to be the primary source of LDM activity. I don't have time/resources to wade into the specifics of this. Discuss with your FAE

Tips, buy me a coffee, or three.. PayPal Venmo Up vote any posts that you find helpful, it shows what's working..
Krishna M
Associate II
Posted on July 14, 2017 at 12:00

Thank you Clive for replying...