El Wifi de la Raspberry 3b+ se desconecta

Hoy vamos a ver un error bastante extraño que puede llegar a provocar que el Wifi de la Raspberry 3b+ se desconecte.

Lo que ocurre es que el Wifi se desconecta, y si nos conectamos a la Raspberry e investigamos el archivo /var/log/messages y buscamos errores, encontramos lo siguiente:

Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt failed with error -2

Por cierto, aquí tenemos una relación de códigos de error en Linux y sus significados. En este caso se trata de un error -2, que significa que el fichero no existe.

Parece ser que es un error relacionado con el firmware del wifi, y es que si buscamos con atención en los registros de la Raspberry, encontramos:

root@raspberry:/lib/firmware/brcm# dmesg | grep -e brcm -e sdio
[ 22.177961] brcmfmac: F1 signature read @0x18000000=0x15264345
[ 22.196439] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[ 22.198957] usbcore: registered new interface driver brcmfmac
[ 22.229094] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt failed with error -2
[ 22.454917] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[ 22.468709] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Feb 27 2018 03:15:32 version 7.45.154 (r684107 CY) FWID 01-4fbe0b04
[ 26.127686] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save disabled

Investigando un poco, encontramos que el firmware para el Wifi de la Raspberry se encuentra en /lib/firmware/brcm
Así que vamos a ver qué ficheros tenemos ahí:

root@raspberry:/lib/firmware/brcm# ls -la
total 12776
drwxr-xr-x 2 root root 4096 jul 26 01:25 .
drwxr-xr-x 31 root root 12288 abr 29 2019 ..
-rw-r--r-- 1 root root 96224 ago 20 2018 bcm43xx-0.fw
-rw-r--r-- 1 root root 180 ago 20 2018 bcm43xx_hdr-0.fw
-rw-r--r-- 1 root root 397312 ago 20 2018 brcmfmac43143.bin
-rw-r--r-- 1 root root 385067 ago 20 2018 brcmfmac43143-sdio.bin
-rw-r--r-- 1 root root 348160 ago 20 2018 brcmfmac43236b.bin
-rw-r--r-- 1 root root 455745 ago 20 2018 brcmfmac43241b0-sdio.bin
-rw-r--r-- 1 root root 403855 ago 20 2018 brcmfmac43241b4-sdio.bin
-rw-r--r-- 1 root root 408682 ago 20 2018 brcmfmac43241b5-sdio.bin
-rw-r--r-- 1 root root 479232 ago 20 2018 brcmfmac43242a.bin
-rw-r--r-- 1 root root 253748 ago 20 2018 brcmfmac4329-sdio.bin
-rw-r--r-- 1 root root 222126 ago 20 2018 brcmfmac4330-sdio.bin
-rw-r--r-- 1 root root 397378 ago 20 2018 brcmfmac43340-sdio.bin
-rw-r--r-- 1 root root 451566 ago 20 2018 brcmfmac4334-sdio.bin
-rw-r--r-- 1 root root 569291 ago 20 2018 brcmfmac4335-sdio.bin
-rw-r--r-- 1 root root 219557 ago 20 2018 brcmfmac43362-sdio.bin
-rw-r--r-- 1 root root 493599 ago 20 2018 brcmfmac4339-sdio.bin
-rw-r--r-- 1 root root 388739 ago 20 2018 brcmfmac43430-sdio.bin
-rw-r--r-- 1 root root 1121 ago 20 2018 brcmfmac43430-sdio.txt
-rw-r--r-- 1 root root 600487 ago 20 2018 brcmfmac43455-sdio.bin
-rw-r--r-- 1 root root 14036 ago 20 2018 brcmfmac43455-sdio.clm_blob
-rw-r--r-- 1 root root 2054 ago 20 2018 brcmfmac43455-sdio.txt
-rw-r--r-- 1 root root 623304 ago 20 2018 brcmfmac4350c2-pcie.bin
-rw-r--r-- 1 root root 626140 ago 20 2018 brcmfmac4350-pcie.bin
-rw-r--r-- 1 root root 591837 ago 20 2018 brcmfmac4354-sdio.bin
-rw-r--r-- 1 root root 557056 ago 20 2018 brcmfmac43569.bin
-rw-r--r-- 1 root root 623012 ago 20 2018 brcmfmac4356-pcie.bin
-rw-r--r-- 1 root root 550333 ago 20 2018 brcmfmac43570-pcie.bin
-rw-r--r-- 1 root root 595472 ago 20 2018 brcmfmac43602-pcie.ap.bin
-rw-r--r-- 1 root root 635449 ago 20 2018 brcmfmac43602-pcie.bin
-rw-r--r-- 1 root root 989401 ago 20 2018 brcmfmac4366b-pcie.bin
-rw-r--r-- 1 root root 623448 ago 20 2018 brcmfmac4371-pcie.bin

Vaya, parece que sí que existe el fichero “brcmfmac43455-sdio.bin“, y “brcmfmac43455-sdio.txt“, pero no el fichero “brcmfmac43455-sdio.raspberrypi,3-model-b- plus.txt” que aparece en el log que veíamos más arriba.

TE RECOMENDAMOS  Aumentar alimentación de puertos USB en Raspberry Pi

Listamos el directorio buscando el archivo mencionado, pero lo dicho, no existe …  :

root@raspberry:/lib/firmware/brcm# ls brcmfmac43455-sdio.raspberrypi,3-model-b- plus.txt

Como info adicional bastante interesante, para asegurarnos de que los módulos wifi de la Raspberry están cargados, ejecutamos:

root@raspberry:/lib/firmware/brcm# modinfo -k $(uname -r) brcmfmac
filename: /lib/modules/5.4.51-v7+/kernel/drivers/net/wireless/broadcom/brc m80211/brcmfmac/brcmfmac.ko
license: Dual BSD/GPL
description: Broadcom 802.11 wireless LAN fullmac driver.
author: Broadcom Corporation
firmware: brcm/brcmfmac43012-sdio.bin
firmware: brcm/brcmfmac4373-sdio.bin
firmware: brcm/brcmfmac4356-sdio.bin
firmware: brcm/brcmfmac4354-sdio.bin
firmware: brcm/brcmfmac43456-sdio.bin
firmware: brcm/brcmfmac43455-sdio.bin
firmware: brcm/brcmfmac43436-sdio.bin
firmware: brcm/brcmfmac43430-sdio.bin
firmware: brcm/brcmfmac43430a0-sdio.bin
firmware: brcm/brcmfmac4339-sdio.bin
firmware: brcm/brcmfmac43362-sdio.bin
firmware: brcm/brcmfmac4335-sdio.bin
firmware: brcm/brcmfmac43341-sdio.bin
firmware: brcm/brcmfmac43340-sdio.bin
firmware: brcm/brcmfmac4334-sdio.bin
firmware: brcm/brcmfmac4330-sdio.bin
firmware: brcm/brcmfmac4329-sdio.bin
firmware: brcm/brcmfmac43241b5-sdio.bin
firmware: brcm/brcmfmac43241b4-sdio.bin
firmware: brcm/brcmfmac43241b0-sdio.bin
firmware: brcm/brcmfmac43143-sdio.bin
firmware: brcm/brcmfmac4373.bin
firmware: brcm/brcmfmac43569.bin
firmware: brcm/brcmfmac43242a.bin
firmware: brcm/brcmfmac43236b.bin
firmware: brcm/brcmfmac43143.bin
srcversion: 75C506AB557789F78EF1636
alias: usb:v04B4p0BDCd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0A5Cp0BDCd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v043Ep3101d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4pBD29d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v13B1p0039d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0A5CpBD27d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0A5CpBD1Fd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0A5CpBD17d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0A5CpBD1Ed*dc*dsc*dp*ic*isc*ip*in*
alias: sdio:c*v02D0dA804*
alias: sdio:c*v02D0d4373*
alias: sdio:c*v02D0d4356*
alias: sdio:c*v02D0d4354*
alias: sdio:c*v02D0dA9BF*
alias: sdio:c*v02D0d4345*
alias: sdio:c*v02D0dA9A6*
alias: sdio:c*v02D0d4339*
alias: sdio:c*v02D0d4335*
alias: sdio:c*v02D0dA9A4*
alias: sdio:c*v02D0dA962*
alias: sdio:c*v02D0dA94D*
alias: sdio:c*v02D0dA94C*
alias: sdio:c*v02D0d4334*
alias: sdio:c*v02D0d4330*
alias: sdio:c*v02D0d4329*
alias: sdio:c*v02D0d4324*
alias: sdio:c*v02D0dA887*
depends: brcmutil,cfg80211
intree: Y
name: brcmfmac
vermagic: 5.4.51-v7+ SMP mod_unload modversions ARMv7 p2v8
parm: txglomsz:Maximum tx packet chain size [SDIO] (int)
parm: debug:Level of debug output (int)
parm: p2pon:Enable legacy p2p management functionality (int)
parm: feature_disable:Disable features (int)
parm: alternative_fw_path:Alternative firmware path (string)
parm: fcmode:Mode of firmware signalled flow control (int)
parm: roamoff:Do not use internal roaming engine (int)
parm: iapp:Enable partial support for the obsoleted Inter-Access Point Protocol (int)
parm: ignore_probe_fail:always succeed probe for debugging (int)

 

 

Solucionando el error

 

–> Opción 1: Opcional y arriesgado (solo si ya te has quedado sin opciones y ya tienes hecha una copia de seguridad de tu SD)

 

  • Actualizar paquetes del sistema, el kernel de la Raspberry, y el sistema operativo Raspbian.

 

*Lo primero siempre es hacer una copia de seguridad de la SD. En mi caso clono la tarjeta SD completa, con imageUSB

– Después, lo típico, actualizar los paquetes del sistema a la última versión:

sudo apt-get update && sudo apt-get upgrade && sudo reboot

 

– Actualizamos el kernel de la Raspberry:

rpi-update

– Y finalmente, si seguimos igual, actualizamos el sistema operativo:

sudo apt-get update && sudo apt-get -y dist-upgrade

 

–> Opción 2: Solución creativa del problema (la más efectiva)

En mi caso hice todo esto pero el problema seguía ahí. Igual. La Raspberry arrancaba, se conectaba al wifi, y al rato, si volvía a comprobar que estuviera conectada, ya no lo estaba .. de nuevo problemas con el wifi en la Raspberry ..

Hasta que encontré este artículo : No se encuentra el Wifi de la Raspberry Pi 3 B+

enlace simbolico brcmfmac43455
Y ahí se me iluminó la bombilla ..
Está claro que el fichero que contiene el firmware del wifi es brcmfmac43455-sdio.bin y brcmfmac43455-sdio.txt contiene su configuración.

Entonces, si ya tenemos el firmware para el wifi, vamos a hacer un “bypass” del problema: o copiamos el fichero correcto y lo llamamos brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt,

o hacemos un symlink y nos quedamos tan anchos…

Pues alla vamos:

Hacemos una copia del archivo .txt y lo renombramos con el nombre “brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt” :

root@raspberry:/lib/firmware/brcm# cp -p brcmfmac43455-sdio.txt brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt

—> o crear un enlace simbolico:

ln -s brcmfmac43455-sdio.txt brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt

 

Hecho esto, reiniciamos y comprobamos el log del arranque con DMESG. Como podemos ver ya no aparece el error :

root@raspberry:/home/pi# dmesg | grep -e brcm -e sdio
[ 22.243061] brcmfmac: F1 signature read @0x18000000=0x15264345
[ 22.253508] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[ 22.255374] usbcore: registered new interface driver brcmfmac
[ 22.533161] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[ 22.548970] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Feb 27 2018 03:15:32 version 7.45.154 (r684107 CY) FWID 01-4fbe0b04
[ 26.192703] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save disabled