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.
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
Circuito de referencia
Con kit de pequeños ajustes
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-upgradeHabilita los módulos usando **device-tree-compiler**
root@odroid:~# apt install device-tree-compilerCambia 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-utilsNecesitamos 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 can0En 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
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 upEscribe lo siguiente en el intérprete de comandos de la placa 1 (que se utiliza para probar /recibir en el dispositivo can0):
candump can0Escriba 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.33En 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