I finally got my hands on a Pi 4B (8GB version) along with the official PoE+ Hat. I plugged it all in and I was hoping everything would just turn on but no, unfortunately my PoE injector was only 24V, whereas PoE+ Hat requires 48V, so I got a different injector (Ubiquity 48V 0.5A PoE Adapter).
Now, the Pi finally turns on (I can see the red & green LEDs blinking) and I can SSH to the Pi, but when I run ifconfig
, I can see that only WiFi is connected, with no Ethernet connection being active. The Ethernet port LEDs aren't blinking either. How could this be? There are no other cables connected to the Pi, only the Ethernet cable from the PoE injector.
I've tried plugging the same cable into my laptop and when I did that, my laptop got connected to LAN without issues, so the connection is 100% active.
1 Answer
After some of digging, I found this post, which made me realize that the problem might be lie with speed negotiation. After finding this post, I was pretty much sure I was on the right track.
The thing is that the Ethernet cable with LAN is connected to a 1Gbps switch on the other end, however the PoE injector only supports Fast Ethernet (which I wasn't aware of when buying) - Fast Ethernet is only 100Mbps (also didn't know this before haha) and the RPi 4 Ethernet connector is 1Gbps as well. Essentially, the PoE injector is bottlenecking the path from the switch to the RPi.
When PoE**+** Hat (not sure if the same applies for the originial PoE Hat) is connected, for some reason the speed negotiation either doesn't happen at all, or fails at some point, resulting in the eth0
not being connected. It is possible to solve this by manually telling the OS to use 100Mbps Full Duplex connection using ethtool
- specifically the following command:
sudo ethtool -s eth0 advertise 0x008
Command found in this answer, which also describes how to set this persistently (after reboot).
After applying this command (had to take off the PoE Hat, power through a USB-C cable, plug in Ethernet cable with LAN only (without PoE), SSH into the OS, set up WiFi connection, do all the steps in reverse, SSH into the OS connected over WiFi and apply the command above, then turn off the WiFi to force all traffic to go through eth0
, not wlan0
), lo and behold, the LEDs on the Ethernet connector lit up and after running ifconfig
, IP address got assigned, yay!