Content originally posted in LPCWare by mch0 on Thu Oct 09 03:49:52 MST 2014
Hi,
I think this might be systematic problem, nothing you can correct or avoid.
There are several buffers (GPDMA, EMC, to some extent the active row in the SDRAM) that help a lot for writes but much less for reads.
For writes the much faster GPDMA (double clock, double width) can refill the EMC buffer while the last data is written out (burst of 8) to the active row.
Since the EMC knows already the address of the next write and also has some data available, it can generate a back-to-back write burst.
For reads the GPDMA will most probably only generate the read request for the next burst when it has read (and maybe even stored) the last word of the previous burst.
Therefore the EMC must leave a gap (in clock cycles) between the two read bursts, it just doesn't know earlier about the new request. Maybe it even closes the row, which would prolong the gap even more.
This is highly dependant on the internal stratetegy of the EMC of which we know close to nothing - the UM is not very informative here :/
But the underlying problem is still present, regardless of the relative "smartness" or "dumbness" of the EMC.
This is just my opinion, I don't have any more information than the UM provides.
I'll be interested in further results, if you have some, however.
Our next custom board shall also include an SDRAM, we'll try to get a 2Mx32 working at up to 200MHz (AS4C2M32S-5). I'm not sure we can get there, though.
Anyway, the write rate you achieve is very good, I think.
Mike