I have been trying to hunt down the cause of this strange issue for weeks, to no avail, so now I'm turning to the community for help. Maybe someone more experienced than me will have some idea!
Quick background: I am developing an application for a 6-core C6472 connected to 256MB of DDR2 memory. My board configuration is as follows:
L1P$ and L1D$: 32KB each (all L1 is cache)
LL2$: 0KB (all L2 is managed manually)
DDR2: 64MB
DDR2_CORE[0-5]: 32MB
The last 32MB are not used by anyone (contingency plan, in case we run out of memory at the end of the project.)
Each core has 2 heaps configured: one on its LL2 (128KB) and one on its own DDR2 region (4MB). I also configure shared region 0 on SL2 and instruct it to create a 320KB heap. Finally, IPC is configured with ProcSync_ALL.
On startup, I call Ipc_start() on each core - and that's it!
The problem:
If I load all image sections to LL2, then everything appears to be working correctly.
However, if I move all sections to DDR2, then the project fails with a "memory access took more than 100000 cycles" somewhere in a GateAAMonitor_asm file.
Please note that the image for each core is uploaded to a different 32MB region of DDR2 - there should be no overlap to cause corruption!
Here is a simple test case that reproduces the issu: 8284.test.zip
(On my complete project, and when run on actual hardware, I get severe corruption where the image of one core appears to corrupt the image of another core during load time (execution doesn't even reach main). On an emulator I get the same symptoms as this test case.)
Has anyone ever encountered this before? Does anything jump out as wrong in my cfg file? Or any other ideas on how to debug this?