Esta página explica cómo habilitar el bus CAN en ODROID-C1/C1+/C0 a través de la interfaz HW SPI. También se incluyen instrucciones detalladas de cómo intercambiar información con una placa MCP2515 Bus Monitor.
Conexión H/W
Los siguientes productos son necesarios para configurar el hardware:
- ODROID-C1+
- Kit Tinkering C
- Módulo MCP2515_CAN
Before installing the software, you must modify the mcp2515 driver to set the amlogic GPIO IRQ. Apply este parche a tu kernel. Descomprime el archivo zip y escribe "git apply odroid-c1-mcp251x.patch". A continuación, edita arch/arm/boot/dts/meson8b_odroidc.dts y elimina el signo de línea comentada de la sección can0.
Habilitar el driver del kernel controlador de CAN
La configuración para la plataforma ODROID-C1 con un chip MCP2515 es: Linux Kernel Configuration > Networking support > CAN bus subsystem support > CAN device drivers > Platform CAN drivers with Netlink support > CAN bit-timing calculation > Microchip MCP251x SPI CAN controller
Luego, actualiza el kernel y el sistema de archivos root. Recurre a estas instrucciones para compilar e instalar el kernel.
Verificar la configuración de soporte CAN
Carga todos los drivers necesarios, usando la contraseña de sudo "odroid":
$ sudo su # modprobe can_raw # modprobe spicc # modprobe mcp251x mcp251x_enable_dma=1Luego, verifica el driver CAN host:
# ls /sys/class/net/ can0 eth0 ip6tnl0 lo sit0 # ifconfig can0 can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 NOARP MTU:16 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Encender el hardware CAN
Ajusta la tasa de bits antes de realizar cualquier operación, similar al siguiente ejemplo donde la tasa de bits de la interfaz can0 está configurada en 125 kbps:
# ip link set can0 type can bitrate 125000 triple-sampling on # ifconfig can0 up # ifconfig can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 UP RUNNING NOARP MTU:16 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth0 Link encap:Ethernet HWaddr 00:1e:06:10:18:1c UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:40 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1360 errors:0 dropped:0 overruns:0 frame:0 TX packets:1360 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:108256 (108.2 KB) TX bytes:108256 (108.2 KB)
Instalar las utilidades SocketCAN
El paquete "can-utils" es un conjunto de drivers CAN y herramientas de red para Linux. Permite interactuar con dispositivos bus CAN de forma similar a otros dispositivos de red.
$ sudo apt install can-utilsEscribe los siguientes comandos para realizar una prueba de circuito cerrado en un único puerto CAN:
# ifconfig can0 down # ip link set can0 type can bitrate 125000 loopback on # ifconfig can0 up # ip -details link show can0 5: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast 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.875 tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 clock 10000000El 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.33Para probar la conexión CAN-bus entre 2 placas ODROID-C1, primero conecta los pines CANL y CANH de dos placas ODROID-C1.
Enciende ambas placas, luego escribe lo siguiente en el intérprete de comandos de ambas placas para configurar el dispositivo bus CAN:
$ modprobe can_raw $ modprobe spicc $ modprobe mcp251x mcp251x_enable_dma=1 $ 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 (utilizada para probar la recepción de dispositivos can0):
$ candump can0Escribe lo siguiente en el intérprete de comandos de la placa 2 (utilizado para probar el envío de paquetes de datos a través del dispositivo can0):
$ cansend can0 500#11.22.33Llegados a este punto, la placa 1 recibirá el paquete de información enviado desde la placa 2:
# candump can0 can0 500 [3] 11 22 33 can0 500 [3] 11 22 33Para comentarios, preguntas y sugerencias, visita la página de la Wiki en https://wiki.odroid.com/odroid-c1/application_note/gpio/can-bus.
Be the first to comment