BeagleBone Black CAN Bus

2

Mis disculpas si este es el sitio web de pila incorrecto para esta pregunta.

Planeamos usar un BeagleBone Black como computadora de control para un automóvil eléctrico. El BBB maneja, entre otras cosas, la comunicación con los controladores del motor a través del protocolo CAN (usando can-utils ).

La instalación (según una serie de guías en línea) parecía ir bien (configuración del árbol de dispositivos, modprobe, etc.), sin errores, hasta que realmente enchufamos los controladores del motor ... y no sucedió nada.

Conectamos un osciloscopio (a los cables de TX y RX en el BBB) y observamos la ejecución de los siguientes comandos:

ifconfig can0 down
ifconfig can0 up
cansend can0 180#1234

que debe enviar datos a lo largo del bus. El osciloscopio mostró lo siguiente (RX en la parte superior, TX en la parte inferior), cada vez que ejecutamos los comandos anteriores.

Sospecho que esta señal que estábamos viendo es una especie de apretón de manos al que no se respondió.

(Tenga en cuenta que si intentamos ejecutar cansend otra vez, no pasaría nada hasta que ejecutáramos ifconifg down/up ).

Después de muchos de estos ciclos de ejecución, curiosamente, ifconfig informó que los bytes de RX se habían incrementado, aunque no se había recibido nada, solo se había enviado.

Unos días más tarde, con una configuración idéntica, el bus CAN todavía no funciona y no estamos viendo la señal del apretón de manos en el osciloscopio. ifconfig informa de bytes eliminados, pero poco más para ayudarnos.

¿Alguna idea sobre dónde ir desde aquí, cómo solucionar este problema, etc.?

    
pregunta baum

2 respuestas

1

Me parece que no estás enviando ningún dato realmente. Veo bits de cosas (cada transición aguda hacia abajo) pero nada más.

En cualquier caso, no se establecerá un bit de reconocimiento si no hay otros dispositivos en el bus y el controlador CAN generará un error de acuse de recibo. Debería ver que este mensaje se transmite continuamente, ya que ningún dispositivo responde y el estándar CAN BUS 2.0 especifica que los mensajes deben reenviarse automáticamente.

Mi sugerencia sería conectar otro controlador CAN al bus, lo necesitará simplemente para establecer los bits de reconocimiento, nada más. Esto le dice a su Beaglebone Black que sus mensajes se están recibiendo correctamente en el bus. Puede leer sobre los diversos errores y el artículo de wikipedia sobre can bus , que es bastante bueno. p>     

respondido por el Fratink
1

Si no hay confirmación para un paquete CAN, esto puede considerarse como un error de transmisión. Me temo que puede ser hasta la implementación de CAN cómo manejar esta situación.

Si tiene un solo dispositivo CAN, intente utilizar el modo de bucle invertido o establecer un tiempo de reinicio:

ip link set can0 up type can bitrate 250000 loopback on

o

ip link set can0 up type can bitrate 250000 restart-ms 100

Nota: El kernel BBB 3.8.x aparentemente tiene un error en la implementación de CAN. A veces hay pánico en el kernel causado por los módulos CAN:

[ 2094.561511] BUG: scheduling while atomic: cansend/1996/0x40000100
[ 2094.568140] Modules linked in: vcan can_raw can g_multi libcomposite c_can_platform c_can can_dev mt7601Usta(O)
[ 2094.568332] [<c00114f1>] (unwind_backtrace+0x1/0x9c) from [<c04cb7bd>] (__schedule_bug+0x31/0x44)
[ 2094.568388] [<c04cb7bd>] (__schedule_bug+0x31/0x44) from [<c04d0707>] (__schedule+0x4df/0x574)
[ 2094.568446] [<c04d0707>] (__schedule+0x4df/0x574) from [<c004eafb>] (__cond_resched+0x1b/0x24)
[ 2094.568496] [<c004eafb>] (__cond_resched+0x1b/0x24) from [<c04d07fb>] (_cond_resched+0x23/0x2c)
[ 2094.568549] [<c04d07fb>] (_cond_resched+0x23/0x2c) from [<c02cdea7>] (__pm_runtime_resume+0x57/0x58)
[ 2094.568619] [<c02cdea7>] (__pm_runtime_resume+0x57/0x58) from [<bf8c00d7>] (c_can_get_berr_counter+0x16/0x3c [c_can])
[ 2094.568687] [<bf8c00d7>] (c_can_get_berr_counter+0x16/0x3c [c_can]) from [<bf8c0287>] (c_can_handle_state_change+0x1e/0x100 [c_can])
[ 2094.568752] [<bf8c0287>] (c_can_handle_state_change+0x1e/0x100 [c_can]) from [<bf8c0719>] (c_can_poll+0x14c/0x608 [c_can])
[ 2094.568811] [<bf8c0719>] (c_can_poll+0x14c/0x608 [c_can]) from [<c0426671>] (net_rx_action+0x69/0x138)

Algunos enlaces donde puede encontrar información sobre este problema enlace enlace

Intente usar otra versión de un kernel.

    
respondido por el bg1a

Lea otras preguntas en las etiquetas