🛠 Réveiller le Bluetooth de l'AP6212 : hci_uart et firmware BCM
Objectifs
Sur le BPI-M2 Zero, le Bluetooth de la combo AP6212 n'est pas un contrôleur USB : c'est une interface HCI série sur UART1 (nœud brcm,bcm43438-bt dans le device tree, 1 500 000 bauds, RTS/CTS sur PG11-PG13). Selon les versions de noyau, le chargement du firmware et l'attachement du discipline hci_uart ne se font pas seuls — les retours utilisateurs documentent un « no BT controller found » nécessitant de charger hci_uart et d'attacher le port série à la main. Vous allez amener le contrôleur jusqu'à bluetoothctl et un scan BLE.
Matériel
- BPI-M2 Zero sous Armbian (noyau 6.x) avec console disponible
- Paquet firmware BCM43xxx présent (linux-firmware non-free/brcm selon l'image)
- Un smartphone ou un capteur BLE à détecter
- Antenne U.FL vissée (le BT partage l'antenne du module)
Code complet
sudo apt update && sudo apt install -y bluez
# 1) Le noyau a-t-il déjà créé le contrôleur ?
bluetoothctl list
dmesg | grep -i -e bluetooth -e hci -e 4343
# 2) Sinon, apport manuel : firmware + discipline hci_uart + attach UART1
sudo apt install -y psmisc
sudo rfkill unblock bluetooth 2>/dev/null
sudo modprobe hci_uart
# Attacher le port série de l'UART1 au discipline HCI (BCM)
sudo sh -c 'echo "bcm43xxx 0" > /sys/bus/serial/device_add' 2>/dev/null || \
sudo btattach -n -B -s 1500000 /dev/ttyS1
sleep 3
hciconfig -a # hci0 doit être apparu
# 3) Scanner
bluetoothctl
# power on
# agent on
# scan on # les périphériques BLE défilent
# quit
# 4) Rendre le réveil permanent si nécessaire
echo hci_uart | sudo tee /etc/modules-load.d/bt.conf
Vérification attendue
Après l'attachement, hciconfig -a affiche hci0 avec une adresse MAC ; bluetoothctl scan on fait défiler des périphériques (montres, téléphones, capteurs) à quelques mètrès ; le lien reste stable après power on/off. Le Wi-Fi et le BT cohabitent sur la même antenne.
Erreurs fréquentes
- Viser ttyS0 : c'est la console (UART0) ; le BT de l'AP6212 est sur UART1 (ttyS1, brochage PG11-PG13).
- Lancer btattach à 9600 ou 115200 : le module attend 1 500 000 bauds, sinon timeout du premier échange de firmware.
- Oublier les lignes RTS/CTS : sans flux matériel à 1,5 Mbaud, le chargement de firmware échoue par débordement.
- Firmware brcm/ absent de l'image minimale : hci_uart se charge mais le contrôleur ne répond jamais — installer le paquet firmware adéquat.
- Accuser le matériel alors qu'une régression noyau est en cause : le forum Armbian documente des versions où le BT de cette famille ne s'initialise plus seul — d'où la procédure manuelle.
Autres tutoriels pour cette carte
- Flasher Armbian et premier boot du BPI-M2 Zero
- LED et bouton avec libgpiod sur le port 40 broches
- Wi-Fi AP6212 : le piège de l'antenne U.FL non fournie
- Console série sur USB-OTG : dépanner sans réseau ni câble UART
- Activer le bus SPI0 et piloter un petit écran TFT
- Survivre avec 512 Mo : zram, swap compressé et services légers
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash