S32R294 Enet Rx IRQ not entered
We found a problem that we use MAC:S32R294 ENET with PHY:88Q2110 to transefer 1000Base-T1 ethernet packages.
MCU sometimes received some wrong data cause of the channel disturbance on 1000Base-T1. Sometimes the data bytes is wrong, and other times the packages are spliced unintendeely.
The problem is that, once the BABR bit is set in EIR, the receive frame/buffer interrupt can not enter any longer, althrough the receive counter in statistics register is added.
We try to clear the BABR bit in error irq, but it helps nothing. How to solve this problem? Thanks.
We compare the module dump(start at 0xFC080000), the module memory dump in the failure situtation is same as the dump memory once enet finish to initialize itself, excepet for statistics registers.
The icache and dcache is disable at startup.s
Dest, Source MAC address is checked(work in PROMISCUOUS_MODE can reproduce the same problem).
New finding is that , this problem can reproduce even if there is no error event during the whole test, but rx event can not entered after enet receive ethernet frames for a period of time.But, the rx statistic register add normally at this time.
So we suppose that when a disturbance on a "special position in the ethernet frame", enet receive the frame, and after that the enet state machine might to be locked.
last idea I have...use more descriptors in the ring.
BR, Petr
Hi Petr, thanks so much for your support. We will try to investigate and do what we can except it is a module design problem locks the module if a speical frame received.
Hi Petr,
I reproduce the problem, and check both of RxBD[E] and RDAR are set.
But the rx interrupt event still not entered.
The rxbd dump after reproduce the problem as following.
Hi,
descriptor looks normal, I think. Further hints:
- compare configuration/registers upon init and after issue appears
- be sure descriptors and buffers are not cached
- be sure it is not address check issue
BR, Petr
Hi,
do you clear BABR properly, means just BABR bit?
After that, do you have still some RX descriptor empty a ready for receiving, i.e. having RxDB[E] set and RDAR bit set?
BR, Petr
Dear Petr,
After this siutuation occurs(rx event flag do not set any longer), I pause the MCU by debugger, and dump the ENET module. Then I send a frame on my PC, and dump the ENET module again. The rx counter in register is able to see it is increased. But no rx event set in interrupt flag during the test.