🛠 Override du device tree : OTG en gadget, UART2, et l'Euler bus oublié
Objetivos
El device tree mainline de la PINE A64 (sun50i-a64-pine64.dts, compatible pine64,pine64) realiza elecciones pragmáticas que pueden cuestionarse: el puerto OTG está fijado como host (usb_otg dr_mode = "host"), el UART2 del conector Pi-2 está desactivado, y el bus Euler 2×17 —la verdadera originalidad de la placa, con UARTs adicionales, SPI, SPDIF y CAN— no es explotado por ninguna imagen por defecto. Este tutorial avanzado: comprender la estructura del DTS, escribir un overlay y reclamar por cuenta propia los periféricos silenciosos de la placa.
Material
- 1 × PINE A64/A64+ bajo Armbian mainline (
apt install device-tree-compiler - Cable micro-USB a un PC host (prueba gadget)
- El PDF oficial « Pine A64 Pin Assignment » a mano para el pinout Pi-2/Euler
- Opcionalmente, el módulo Wi-Fi/BT RTL8723BS en su conector SDIO 3.0
Código completo
/* pine64-otg-peripheral.dts — overlay : rendre l'OTG périphérique */
/dts-v1/;
/plugin/;
&usb_otg {
dr_mode = "peripheral"; /* le mainline impose "host" */
status = "okay";
};
&uart2 {
status = "okay"; /* PB0/PB1 = broches UART2 du connecteur Pi-2 */
};
# Compiler l'overlay :
dtc -@ -I dts -O dtb -o pine64-otg-peripheral.dtbo pine64-otg-peripheral.dts
sudo cp pine64-otg-peripheral.dtbo /boot/dtb/allwinner/overlay/
# Déclarer l'overlay (Armbian : /boot/armbianEnv.txt, ligne : overlays=...)
# reboot, puis vérifier côté PC hôte : lsusb voit apparaître la carte (gadget).
# Inventaire des contrôleurs présents mais désactivés :
ls /sys/firmware/devicetree/base/soc/ | head -40
grep -rl '"disabled"' /sys/firmware/devicetree/base/ 2>/dev/null | head
# Les banques GPIO exposées (PB..PH) et leur numérotation bank*32+pin :
# PD16 -> 112 PH2 -> 226 (pinctrl-sun50i-a64.c)
gpioinfo gpiochip0 | grep -E 'PD|PH'
Verificación esperada
Tras reiniciar con el overlay, el puerto micro-USB OTG es visto como dispositivo desde el PC host (lsusb en el PC, dmesg | grep -i gadget en la placa) — prueba de que el dr_mode del DTS mainline era efectivamente el bloqueo. El UART2 activado aparece (ls /dev/ttyS* o ttySN según el orden de numeración) en los pines PB0/PB1 del conector Pi-2. Para el bus Euler (2×17 pines: UARTs adicionales, SPI, SPDIF, CAN), el camino es el mismo: activar los controladores correspondientes en un overlay y cablear según el PDF oficial de pinout — la placa ofrece más conectores de los que su imagen por defecto activa.
Errores frecuentes
- Editar el .dtb compilado en lugar de un overlay: las imágenes Armbian soportan overlays (
/boot/armbianEnv.txt) — un .dtb editado a mano se sobreescribe en la próxima actualización del paquete del kernel. - Olvidar que cambiar el modo OTG rompe el arranque por FEL una vez lanzado el kernel: el FEL vive en el BROM antes del kernel, pero un puerto en modo gadget sorprende cuando se quiere conectar una llave USB — documentar el retorno al estado mainline.
- Asignar pines al UART2 «como en un RPi»: PB0/PB1 corresponden a los pines físicos 11/12 del conector Pi-2 (comentario « On Pi-2 connector » del DTS) — no a los pines UART del Raspberry Pi. >
- Activar un controlador cuyos pines están en conflicto: los grupos pinctrl se comparten (PB, PC, PD, PE, PF, PG, PH) — un CAN y un UART pueden apuntar al mismo pin; verificar el PDF de pinout antes.
- Esperar el Bluetooth del RTL8723BS sin precaución: el soporte BT mainline del módulo SDIO es ampliamente reportado como inestable. >
- Confundir offsets GPIO y pines físicos: se habla en offsets bank×32+pin (PH2 = 226) en las herramientas, nunca en número de fila del conector.
Otros tutoriales para esta placa
- Premier boot d'Armbian sur la PINE A64 (microSD, console série, rootfs)
- PINE A64 ou PINE A64+ ? Le pièg du réseau gigabit dès le premier regard
- Faire clignoter une LED avec libgpiod (numérotation GPIO du A64 : PB0 = 32)
- Benchmark Ethernet iperf3 : mesurer le piège 10/100 vs gigabit
- Lire un capteur I²C (BME280) sur le bus i2c-1 du connecteur Pi-2
- Un serveur maison qui consomme 2,5 W : Docker léger sur la PINE A64
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash