ESP32 not receiving multicast Ethernet frames (rare)


I am using ESP32 WROVER + LAN8742A PHY with mongoose-os 2.15.0.

The ESP32 occasionally cannot receive multicast ethernet frames. It can send multicast, send & receive unicast, and send & receive broadcast without problems. The receive multicast problem happens roughly in 1% of startups, and it persists until a power cycle - even a chip reset doesn’t fix the problem. I suspect it is a silicon or driver problem.

I noticed the git commit to the ESP-IDF ethernet driver emac_dev.c in late 2018 that sets the PAM bit enabling all received multicast frames to be passed to the application:

I checked at runtime and print out to the console the value of this register on every received frame, and I can confirm the register PAM bit is set. However in 1% of the startups the frames are not received.

I suspected this was a silicon or driver setup issue, so now I tried clearing and setting the PAM bit on every connect/disconnect of the Ethernet link (achieved by removing and plugging in the CAT5 cable). This seems to address the issue, but the problem happens so rarely it is difficult to recreate consistently.

  1. My goal is: receive every Ethernet multicast frame everytime the ESP32 starts up.
  2. My actions are: trying to recreate the problem and I can simulate it by clearing the PAM bit in the EMAC_GMACFF_REG register.
  3. The result I see is: 1% of startups have the problem until a power cycle.
  4. My expectation & question is: has anyone else seen this issue, perhaps showing up with no answers from the ESP32 to mDNS queries?

Fix is detailed here: