I'm having a problem with concurrent accesses done by the NAND Flash
controller and the EBIU (async memory accesses) on a BF548M system.
I'm programming the NAND flash with data I receive from an Ethernet chip,
which sits on the asynchronous memory interface (chip select /AMS1).
Occasionally the NAND flash accesses stop (forever), so the programming
hangs. I could trigger with my scope on the problem:
When programming a page (2kbytes), the NAND flash driver writes data in
chunks of 512 bytes. After this it get's an callback from the DMA so that it
can save the ECC data. Then it continues with the next 512 byte chunk.
A short time before the hang occurs, the Ethernet chip gets accessed from
the core via the EBIU. These accesses mix with the NAND flash accesses
on the asynchronous memory bus.
I counted the accesses to the NAND flash and found, that in the case where
the problem occurrs, the last chunk of 512 bytes is not completely written
(12 bytes were missing). As the NAND flash driver waits for completion, it
waits forever and the programming hangs.
I wonder how this can happen. Is there a problem with the arbitration inside
the BF548M? Where did the missing bytes go to?
P.S.: The Ethernet chip is a LAN9218 which is compatible to the LAN9221.
We use a driver from the EZ-Kit software.