I think I may have finally gotten to the bottom of my Raspberry Pi 4 WiFi problems. I installed Ubuntu 18 and the WiFi networking never worked properly. It would work sometimes, then drop off randomly. I thought it might be a hardware problem and returned the unit for a new one. Still the same. Thought it could be a power supply issue, so I offloaded everything on the USB to a powered USB hub. It ran a bit cooler but that wasn’t it either. There were lots of reports of signal issues when using certain hi-def HDMI modes on the monitor. Nope that wasn’t it either. I had a fancy metal heatsink case which was rumored to cause WiFi problems. Nope.
Gave up an bought a USB dongle which appeared to work at first, then it didn’t. Later I put the WiFi dongle on the end of a short USB cable, thinking that moving the WiFi away from the actual Raspberry Pi 4 unit might do something, It seemed to work for a while. Then I upgraded to Ubuntu 20 (because I accidentally trashed my SD card). Well, it was time to upgrade anyway.
After the upgrade there was no WiFi at all. Found out that it had to be enabled in /etc/network-config. Things were looking up. Now I could boot up and see a reasonable WiFi. But soon it deteriorated again. More googling lead to all sorts of people with similar problems, including people using different versions of the Cypress firmware. I didn’t want to go there. I would use a wired ethernet and wait for a fix if I had to.
Yesterday I read something that sounded worth pursuing. Some people had WiFi set to the wrong country (UK for instance). That would be a problem. I also noticed my 5 GHz WiFi wasn’t showing up. Probably a warning sign I had ignored too long.
I’m not a networking or WiFi guy (and I don’t really want to be one) but a quick look turned up my WiFi country set to “country 00: DFS-UNSET“. Probably not what I want. Manually set it with “sudo iw reg set US” and immediately I saw my 5 GHz WiFi! Seems more stable, and it should be. Now I just have to figure out where to set this in the file system so I don’t have to remember to type this command after every reboot.
I’m not a networking guy either (in fact, probably less so than you are), but this is one I know one solution to. The easy solution is to put that command in your rc.local file and it will execute on boot.
In theory, you could add the country code to the file /etc/default/crda and you won’t need to execute the is command in your rc.local, but I have no idea if this still works. Last time I dealt with this was about 5 years ago when I last used an OS other than Raspbian on a Pi, and that was pure Debian and not Ubuntu, although they usually work pretty much the same way.
Related note: How is the heatsink case working? I have a standard plastic case on mine, and I’m into heat related clock-down within 2 minutes after boot if I don’t pop the lid off.
LikeLike
I made the CRDA change and all is well. I think it may have even been messing up WiFi signals in the house. Kids were complaining about something wrong while I was sorting this out, but it all seems better now. I like my little heatsink case. I have a script that checks the temperature in /proc and it tends about 150F. Only seen it dial back the clock to 1 GHz once when I was setting up. I’m pretty impressed so far.
LikeLike
I’m not a networking guy either, but I have a couple of solutions.
Put that command in your rc.local file and it should execute on boot every time.
A real purist would make the country code a boot parameter so you didn’t have to override the default. At one time (5 or 6 years ago) you could do that by making the proper entry into /etc/default/crda, but I make no claims as to whether that still works in Ubuntu’s current release.
How is the heatsink case working? My Pi 4 is in a standard plastic case, and if I don’t pop the lid off when it is running I start to suffer heat-related clock-down within 2 minutes of boot.
LikeLike