Hi Alexis,
I've gotten quite a bit more data on the failure now,--at this point it
does look like the processor is definitely having problems doing long-long
writes (and possibly reads as well). The address is fixed at 0x1c000xxx,
this is in a bank of 1024 adresses used as a portal into an FPGA. I did
discover a pretty easy (if quite a bit slower) workaround--issuing two long
accesses in sequence with correctly shifted data never causes the failure,
I never see any extra writes with bad data.
The fail frequency is extremely variable even with no change to the
code--note for this test, no interrupts are enabled which should rule out
any interruptions to the test that might cause this fail. Sometimes I will
get an extra access fail after 10 iterations, sometimes it's in the
millions of iterations. The failure seems to be independent of the data
transferred. The 4 layer board power/ground planes are heavily bypassed, I
see no indication of erratic operation for around 30000 lines of code with
extensive testing of all data types. Only the long-long accesses seem to
somehow get confused.
Some more system data: the chip is operating at 200Mhz core frequency
from an external oscillator running at 25Mhz. The EMC bus talks to only
two devices, an SRAM and an FPGA, and I see no evidence of signal integrity
issues--other tests have run for hundreds of billions of iterations without
any failures. The EMC configuration is set as follows
// Speed up the FPGA reads and writes (0x1c000000)
LPC_EMC->CONTROL = 0x00000001; // turn off EMC reset
LPC_EMC->STATICCONFIG0 = 0x00000088; // set for 8 bit bus, enable
nwe, pagemode
LPC_EMC->STATICWAITRD0 = 0x00000004; // UPDATE SET TO 4
LPC_EMC->STATICWAITPAG0 = 0x00000001; // UPDATE SET TO 1
LPC_EMC->STATICWAITWR0 = 0x00000002; // UPDATE SET TO 2
LPC_EMC->STATICWAITTURN0 = 0x00000003; // 3 cycle turnaround
Robert