Cómo Configurar y Usar el Bus CAN: Utilizando el ODROID-N2 con Microcontroladores

Este artículo explica cómo habilitar el bus CAN en ODROID-N2 a través de la interfaz HW SPI. También incluye instrucciones detalladas para obtener datos a través de una placa Monitor Bus MCP2515.

Fig. 01

Conexión H/W

Los siguientes artículos son necesarios para configurar el hardware:

  • ODROID-N2
  • Kit de pequeños ajustes.
  • Módulo CAN MCP2515

Fig. 02

Fig. 03

Fig. 04

Circuito de referencia

Fig. 05

Con kit de pequeños ajustes

Fig. 06

Fig. 07

Instalación del Software

Nota:

  • Operación confirmada con imagen mínima de Ubuntu ODROID-N2 sobre el kernel 4.9.205-64.
  • El ejemplo de can-bus usa el mismo pin cs que spidev, de modo que no deben habilitarse al mismo tiempo.
  • Si spidev está activado, el can-bus puede no funcionar correctamente

Se recomienda encarecidamente actualizar el kernel. Todo esto funciona con Linux odroid 4.9.205-64 o versión superior

root@odroid:~# apt update && apt full-upgrade
Habilita los módulos usando **device-tree-compiler**
root@odroid:~# apt install device-tree-compiler
Cambia el estado a **okay** en los nodos SPI del árbol de dispositivos.
# SPICC0
root@odroid:~# fdtput -t s /media/boot/meson64_odroidn2.dtb \
                 /soc/cbus@ffd00000/spi@13000 
[status okay
root@odroid:~#
# can0
root@odroid:~# fdtput -t s /media/boot/meson64_odroidn2.dtb \
                 /soc/cbus@ffd00000/spi@13000/can@0 
status okay
root@odroid:~#
Comprueba si el estado ha cambiado
# SPICC0
root@odroid:~# fdtget /media/boot/meson64_odroidn2.dtb \
                 /soc/cbus@ffd00000/spi@13000 
Status okay
root@odroid:~#
# can0
root@odroid:~# fdtget /media/boot/meson64_odroidn2.dtb \
                 /soc/cbus@ffd00000/spi@13000/can@0 
Status okay
root@odroid:~#
Luego reinicia para aplicar los cambios. También puedes verificar si los módulos se han cargado correctamente.
root@odroid:~# lsmod | grep spi
spi_meson_spicc      20480  0
root@odroid:~# lsmod | grep mcp251x
mcp251x              24576  0
can_dev              24576  1 mcp251x
root@odroid:~#

Verificando la configuración de soporte CAN

Comprueba que el driver del host CAN esté registrado correctamente.

root@odroid:~# ls /sys/class/net/
can0  eth0  lo
root@odroid:~# ifconfig can0
can0: flags=128  mtu 16
      unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
      RX packets 0  bytes 0 (0.0 B)
      RX errors 0  dropped 0  overruns 0  frame 0
      TX packets 0  bytes 0 (0.0 B)
      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
root@odroid:~#
Enciende el hardware CAN. Ajusta la tasa de bits antes de realizar cualquier operación. Ejemplo: Fija la tasa de bits de la interfaz can0 a 125 kbps:
root@odroid:~# ip link set can0 type can bitrate 125000 triple-sampling on
root@odroid:~# ifconfig can0 up
root@odroid:~# ifconfig
can0: flags=193<UP,RUNNING,NOARP>  mtu 16
      unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
      RX packets 0  bytes 0 (0.0 B)
      RX errors 0  dropped 0  overruns 0  frame 0
      TX packets 0  bytes 0 (0.0 B)
      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
      inet 192.168.10.8  netmask 255.255.255.0  broadcast 192.168.10.255
      inet6 fe80::e160:7710:5360:f82a  prefixlen 64  scopeid 0x20
      ether 02:00:00:0d:1d:01  txqueuelen 1000  (Ethernet)
      RX packets 24  bytes 6066 (6.0 KB)
      RX errors 0  dropped 0  overruns 0  frame 0
      TX packets 54  bytes 6420 (6.4 KB)
      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      device interrupt 22  
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
      inet 127.0.0.1  netmask 255.0.0.0
      inet6 ::1  prefixlen 128  scopeid 0x10
      loop  txqueuelen 1  (Local Loopback)
      RX packets 129  bytes 10117 (10.1 KB)
      RX errors 0  dropped 0  overruns 0  frame 0
      TX packets 129  bytes 10117 (10.1 KB)
      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
root@odroid:~#

Instalar las utilidades SocketCAN.

El paquete can-utils es un conjunto de drivers CAN y herramientas de red para Linux. Permite interactuar con dispositivos de bus CAN de forma similar a otros dispositivos de red.

sudo apt install can-utils
Necesitamos realizar una prueba de circuito cerrado en un solo puerto CAN. Configura el modo loopback en can0
ifconfig can0 down
ip link set can0 type can bitrate 125000 loopback on
ifconfig can0 up
ip -details link show can0

root@odroid:~# ifconfig can0 down
root@odroid:~# ip link set can0 type can bitrate 125000 loopback on
root@odroid:~# ifconfig can0 up
root@odroid:~# ip -details link show can0
3: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 10
  link/can  promiscuity 0
  can <LOOPBACK,TRIPLE-SAMPLING> state ERROR-ACTIVE restart-ms 0
        bitrate 125000 sample-point 0.850
        tq 400 prop-seg 8 phase-seg1 8 phase-seg2 3 sjw 1
        mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
        clock 5000000numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
root@odroid:~#
El siguiente comando muestra el mensaje recibido desde el bus CAN
candump can0
En un segundo terminal, el siguiente comando envía 3 bytes sobre el bus (0x11, 0x22, 0x33) con el identificador 500.
cansend can0 500#11.22.33

Cómo probar el enlace CAN-bus entre 2 placas ODROID-N2

Conecta los pines CANL, CANH entre dos placas ODROID-N2

Fig. 08

Enciende ambas placas y escribe lo siguiente en el intérprete de comandos de ambas placas para configurar el dispositivo de bus CAN:

ip link set can0 type can bitrate 125000 triple-sampling on
ifconfig can0 up
Escribe lo siguiente en el intérprete de comandos de la placa 1 (que se utiliza para probar /recibir en el dispositivo can0):
candump can0
Escriba lo siguiente en el intérprete de comandos de la placa 2 (que se utiliza para probar/enviar paquetes de datos a través del dispositivo can0):
cansend can0 500#11.22.33
En este punto, la placa 1 recibirá el paquete de datos que ha sido enviado desde la placa 2:
root@odroid:~# candump can0
  can0  500   [3]  11 22 33
  can0  500   [3]  11 22 33

Referencias

https://wiki.odroid.com/odroid-n2/application_note/gpio/can-bus

Be the first to comment

Leave a Reply