I wrote:
> Performing the same write cycles to an unconnected chip-select
> controller (but performing the same bus cycles and generating the same
> noise and under/overshoots on the bus) doesn't fail.
It is harder to set up than it looks. I was using the wrong address range. Fix that and the unit fails the same way.
The SDRAM corrupts when writing data to the Flexbus using an unconnected chip-select.
Changing the "AA" bits (Address to Chip Select Delay) to 2 or 3 makes it a lot worse, and I don't know why. Changing the Flexbus hold timing, the SDRAM timing, the refresh rate and the Crossbar setting has no effect.
Writing 32-bits of zero to an all-ones address has it fail nearly instantly. It depends on the number of zero data bit.
26 bits doesn't fail, and it gets progressively worse with 27, 28, 29, 30, 31 and 32 zero bits. It doesn't matter which data lines are zero, just the number of them. The "all ones address" is important as the FlexBus puts out the address on the data bus and then switches to driving the data. All-ones to all-zeros is a worst-case for something.
Changing from a Micron to an ISSI SDRAM chip makes the problem go away. So it looks like the ISSI is less sensitive to bus over and undershoots during reads and refresh cycles. We are probably exceeding the chip specifications.
A big part of the problem is that the MCF5239 doesn't work well with SDR SDRAM. It is means to be used with DDR, and there's a lot of support (and warnings on needing termination everywhere, VREF shields, etc). This isn't mentioned as being required for SDR, but it looks like it is. The MCF5329 doesn't support a "Low Drive Strength" option like previous SDR-only chips (like the MCF5235) did. So there's a lot of noise on the data and address lines because it forces a "high strength" drive.