🛠 Bus CAN : exploiter les deux contrôleurs DCAN avec can-utils
Objetivos
El AM335x incorpora DOS controladores CAN (DCAN) — un argumento industrial masivo frente a las tarjetas de consumo general. Vas a exponer el CAN0 en los pines P8_17/P8_18 (los pines MCASP0 multiplexados como DCAN mediante el overlay comunitario KCP-0001), configurar la interfaz con ip link e intercambiar tramas con can-utils entre dos nodos.
Material
- 2 BeagleBone Black (o 1 BBB + 1 segundo nodo CAN)
- 2 transceptores CAN de 3,3 V (clase SN65HVD230 / TJA1050 en versión de 3,3 V) en los pines P8_17/P8_18
- 2 resistencias de terminación de 120 Ω (una en cada extremo del bus)
- Cableado: CAN_H a CAN_H, CAN_L a CAN_L, masa común entre las tarjetas
Código completo
sudo apt install can-utils device-tree-compiler
# Exposer CAN0 sur P8_17/P8_18 :
# - ancienne image : overlay KCP-0001 via le capemanager
echo cape_can | sudo tee /sys/devices/platform/bone_capemanager/slots
# - image récente : l'overlay est embarqué (KCP-0001) ou chargé via configfs
ls /sys/class/net/ # can0 doit apparaître
# Configurer l'interface (impérativement interface DOWN pour changer le débit)
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 500000
sudo ip link set can0 up
ip -details link show can0
# Émettre / écouter
candump can0 &
cansend can0 123#DEADBEEF
# Test seul sur une carte : activer le loopback interne
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 500000 loopback true
sudo ip link set can0 up
cansend can0 321#CAFEBABE && candump -n 1 can0
Verificación esperada
En modo loopback, candump recibe la trama 321#CAFEBABE enviada por cansend. En un bus con dos tarjetas, cansend en una hace aparecer la trama en candump en la otra; ip -details muestra el bitrate 500000 activo y la interfaz en estado UP.
Errores frecuentes
- Olvidar las resistencias de terminación de 120 Ω en ambos extremos: tramas corruptas, errores de CRC, interfaz que pasa a estado bus-off.
- Bitrates diferentes entre los dos nodos: no pasa ninguna trama sin mensaje de error explícito — siempre verificar ambos lados.
- Cambiar el bitrate de una interfaz activa: ip link set type can bitrate requiere ponerla previamente en DOWN.
- Conectar CAN_H/CAN_L directamente a los pines de 3,3 V: se necesita un transceptor diferencial; los pines por sí solos no constituyen un bus CAN.
- Olvidar la masa común entre las dos tarjetas: la señal diferencial no «flota» tan bien como se cree.
- El overlay CAN no está presente por defecto en las imágenes modernas: verificar la presencia de can0 antes de cablear (dmesg | grep -i can).
Otros tutoriales para esta placa
- Premier boot de la BeagleBone Black avec un seul câble mini-USB
- Comprendre les triggers en pilotant les 4 LED utilisateur
- Bouton et LED avec Adafruit_BBIO, la bibliothèque historique
- Lire l'ADC 12 bits sans griller le SoC : la règle des 1,8 V
- Ajouter une horloge temps réel sur le bus I2C des capes
- Micro-HDMI : exploiter les limites d'affichage de la BBB
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash