We have an MCF5372 chip.Randomly we are getting overrun error in receive side.Receive data rate is every one milli second 550 bytes of data is received.
The OV bit is set in the receive buffer and the count of "receive fifo overruns" is incremented.
As per the reference manual OV bit is set only for the below reason
19.5.15.2.1 Overrun Error
If the receive block has data to put into the receive FIFO and the receive FIFO is full, FEC sets RxBD[OV].
All subsequent data in the frame is discarded and subsequent frames may also be discarded until the
receive FIFO is serviced by the DMA and space is made available. At this point the receive frame/status
word is written into the FIFO with the OV bit set. The driver must discard this frame.
But the behaviour in my controller is different we have free descriptors but still overrun is set.
We have 16 descriptors each one with the size of 256*7 bytes.Incoming data maximum size observed is 550 bytes
When the overrun is observed i have displayed all the descriptors.
Below is the attached capture when overrun is occured
I/O: index 0
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 1
I/O: nx_mcf5372_record.pRxDescTableStart[i].status802
I/O: nx_mcf5372_record.pRxDescTableStart[i].length22a
I/O: index 2
I/O: nx_mcf5372_record.pRxDescTableStart[i].status800
I/O: nx_mcf5372_record.pRxDescTableStart[i].length71
I/O: index 3
I/O: nx_mcf5372_record.pRxDescTableStart[i].status800
I/O: nx_mcf5372_record.pRxDescTableStart[i].length71
I/O: index 4
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 5
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 6
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 7
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 8
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 9
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 10
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 11
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 12
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 13
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 14
I/O: nx_mcf5372_record.pRxDescTableStart[i].status8000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
I/O: index 15
I/O: nx_mcf5372_record.pRxDescTableStart[i].statusa000
I/O: nx_mcf5372_record.pRxDescTableStart[i].length0
Please let me know why overrun is occurred still there are free descriptors.