Basura periódica en la interfaz serie

Tengo una placa integrada, basada en Allwinner V40, que tiene una interfaz serial (UART) a niveles de voltaje TTL. Accedo a esta interfaz con una pequeña placa adaptadora (MAX232) y un adaptador RS232->USB.

Normalmente, esta interfaz está configurada para enviar información de depuración (/dev/ttyS0 en Linux). Puedo encenderlo y apagarlo, y puedo enviar y recibir datos como quiera. Sin embargo, algo más envía datos exactamente cada diez segundos. Así es como se ve la basura (10 segundos entre cada línea, grabados a 9600 baudios, la tercera línea la he enviado yo).

ingrese la descripción de la imagen aquí

Como referencia, esta es la primera línea en hexadecimal:

0A 05 31 04 41 6C 4E 0A 02 39 02 F3 F0 F4 F7 F1 F1 F6 F3 F1 F6 F1 FF FF FF FE FF FF FF FF FF FF FF

Intenté cambiar la configuración de baudios, etc., en caso de que algo más esté enviando con una velocidad de baudios diferente, pero eso no conduce a nada. También intenté deshabilitar Bluetooth, ya que Raspberry Pis tiene un problema similar cuando Bluetooth está habilitado. Eso no ayudó, pero tampoco empeora si Bluetooth se usa activamente.

Este es un UART de dos hilos, no hay control de flujo. UART 0 está conectado a PB22 y PB23 en el SoC, lo que parece correcto. Desde mi sys_config.fex (estoy usando el kernel heredado/Allwinner):

[uart0]
uart0_used       = 1
uart0_port       = 0
uart0_type       = 2
uart0_tx         = port:PB22<2><1><default><default>
uart0_rx         = port:PB23<2><1><default><default>

[uart0_suspend]
uart0_tx         = port:PB22<7><1><default><default>
uart0_rx         = port:PB23<7><1><default><default>

Espero que alguien reconozca el patrón de bits y pueda decirme qué lo causa. ¿Algunas ideas?

¿Está habilitado el perro guardián?
No sé. Para ser honesto, ni siquiera estoy seguro de a qué te refieres...
grep -R "HELLO THIS IS A TEST" /
algo así como root@orangepizero:~# systemctl status watchdog.service
Por lo que pude encontrar, y esto puede no ser útil, pero 0x0A 0x05 son caracteres de control ASCII para "Nueva línea" "Consulta" ... ¿todas las líneas que comienzan de esa manera son a lo que se refiere como "basura"? ¿Podría ser un método de control de flujo (?) Tal vez tenga líneas en blanco en su archivo (?) No sé, simplemente descartando cosas que podrían correlacionarse con otras cosas que ya ha discernido.
@CapnJJ sí, todas las líneas comienzan con 0x0A, 0x05, 0x31 (o 0x32) y terminan con muchos bits configurados (0xFF, etc.). "HOLA, ESTO ES UNA PRUEBA" fui yo, para demostrar que tengo la misma velocidad de transmisión y puedo comunicarme :-).
@SpehroPefhany Este dispositivo tiene Android 6 (rooteado), sin systemctl. Hay un temporizador de vigilancia en el SoC que puede reiniciar el dispositivo si se cuelga, pero no lo usamos actualmente.
ah Supuse que cuando escribió "algo más envía datos cada diez segundos. Así es como se ve" , mostró los datos reales que se envían cada diez segundos. Tonto de mí.
Parece un control de flujo, el problema de verificación de datos válidos no se filtra correctamente. ¿Verifica el estado de error de UART y desea filtrar los resultados?
¿Quizás verifique con lsof /dev/ttyS0 si hay otro proceso que usa el puerto?
¡Bingo @filo! Era un demonio de pantalla táctil, eGTouchDque abría aleatoriamente todos los TTY y les escribía. Sin embargo, tenías que usar el comando repetidamente para atraparlo en el acto. Si responde con el truco lsof, puedo aceptarlo para que pueda obtener el representante :-).

Respuestas (1)

Verifique con lsof /dev/ttyS0 si hay otro proceso usando el puerto.