¿Qué tipo de comunicación serial es esta?

Estoy tratando de aplicar ingeniería inversa a una comunicación en serie entre microcontroladores (1 dispositivo y 1 microcontrolador en una placa). Una MCU valida la otra MCU y quiero descifrar la validación e imitar la MCU validada. Quiero averiguar qué protocolo se está utilizando para dar sentido a los datos. Capturé la comunicación con un analizador lógico y aquí hay una captura de pantalla de PulseView:Señal del analizador lógico

PulseView tiene una función de decodificación, pero no sé por dónde empezar. La comunicación ocurre a través de 1 solo cable. Pero no estoy seguro de si el protocolo es "de un solo cable". ¿Existen métodos estándar conocidos para identificar un protocolo de comunicación desconocido? ¿O tengo que identificarlo simplemente mirándolo?

Escribí un script para convertir los datos en el tiempo necesario para cambiar de un estado a otro (de mayor a menor o de menor a mayor) para comparar mediciones repetidas y la ausencia de la MCU validada. Cada vez que los patrones se ven ligeramente diferentes. Hubiera sido genial saber decodificar esto en una matriz de bytes o para lo que sea.

El primer período bajo largo de cada ciclo es a veces de 90 μs, a veces de 30 μs. Cada ciclo tiene 14 interruptores en total. Los largos períodos altos entre ciclos pueden diferir en longitud (~270-330 μs).

PD: el tiempo mínimo requerido para un cambio es de 30 μs, como se ve en la tercera fila de la imagen (120 μs = 4 estados).

¡Gracias!

Editar: Aquí hay ejemplos de señales, que no obedecen la regla general.patrón de señal irregular

Edit2: Distribución de períodos altos entre ciclos:distribución de duración de período alto

Edición 3: en la primera fase (ampliada en la fila superior), hay 4 cuadros que comienzan con 90 μs de baja, seguidos de 23 cuadros que comienzan con 30 μs de baja y finalmente un cuadro que comienza con 90 μs de baja nuevamente.

Edit4: Aquí está el archivo de sesión sigrok .

Parece un protocolo síncrono de 33 Kbps
@TonyStewartolderthandirt ¿Hay alguna forma de convertirlo en bytes, Ascii o hexadecimal?
No sin un montón de patrones para encontrar el byte de sincronización después del software de sincronización y decodificación del reloj.
¿Alguna extraña codificación de longitud de pulso de 6 bits? Diría que el mínimo de 90us fue un bit de "inicio", y un '1' sería un pulso positivo más largo. Pero dijiste que el primer mínimo es a veces 30us, ¿cómo se ve eso?
@ W5VO Agregué la parte, donde la señal es algo irregular. Período bajo más corto y período bajo más largo dentro del ciclo.
@Genom Cuando dice que los períodos altos largos difieren en duración, ¿cómo difieren dentro del rango de 270-330us? ¿Son 270us, 300us o 330us? ¿O también hay tiempos intermedios?
@AdamHaun Agregué un gráfico para mostrar distribuciones de períodos altos entre ciclos. Medí 3 réplicas, que difieren un poco en la señal. Primero, un par de ciclos siguen siendo idénticos. Las longitudes de período alto no son necesariamente de 30 μs de longitud. Pero la duración tampoco siempre es muy reproducible.
El canal tiene el bitshift ISI clásico pero primitivo con 12 bits repitiendo 0101... luego 12 "1". antes de los mensajes y repitiendo para la reducción de fluctuación de sincronización de reloj primitivo. Uno de un millón de protocolos antiguos. ¿Vas a hacernos adivinar de dónde robaste esta señal? Buscapersonas? ¿Para narcos?
@TonyStewartolderthandirt :) No, no, grabé esto entre mi cámara Nikon y su batería. La cámara verifica la batería en un pin. Estoy tratando de decodificar la verificación, piratear e imitar con una fuente de alimentación constante. Si funciona, poner en línea. Es una forma de protestar por los costosos accesorios de Nikon y aprender electrónica en un nivel diferente. Investigaré un poco sobre los términos que mencionaste.
@TonyStewartolderthandirt Me preguntaba, ¿cómo se decodifica un patrón de señal? ¿Cuáles son las formas de pensar? No podía encajar en los protocolos que conozco, como SPI, I2C, etc.
Mire todos los patrones repetitivos como lo hice yo, luego enumere todos los 8 bits intermedios como le pedí que hiciera (y aún no lo he hecho). Esta ráfaga es muy primitiva con un exceso de redundancia para la comunicación simple de campo cercano, así que no piense demasiado. No conserva el ancho de banda ni aleatoriza los 1 y 0 para reducir el error de asimetría, no tiene ECC ni CRC. Es un canal de datos primitivo aún más primitivo que el NFC moderno. Debería ser fácil crear un reloj de sincronización y, con reglas en el analizador lógico, registrar datos binarios o incluso hacer zoom, leer y escribir 8 bits en Excel y convertirlos a HEX o ASCII LSB primero o último.
O hacer el trabajo simple o seguir adelante. De cualquier manera, se está olvidando de informarnos de qué instrumento obtuvo estos datos que completan muchas suposiciones.
@TonyStewartolderthandirt Lo siento. Estoy usando amazon.de/gp/product/B01MUFRHQ2/… para grabar la comunicación entre la batería Nikon EN-EL14a original y la cámara D3300 con una frecuencia de muestreo de 24 MHz. Para acceder a la comunicación, imprimí un formulario de batería en 3D y le puse mis propios cables. Conecté los cables a una placa de pan ya la batería. Con eso pude escuchar la comunicación. Los 5 pines de la batería incluyen +, -, sensor de temperatura, balanceador de celdas LiPo y el pin serial. Voy a hacer los pasos que faltan lo antes posible.
comparta el archivo guardado de PulseView .... puede usar pastebin.com y luego agregar el enlace a su pregunta
Se agregó el archivo de sesión @jsotola Sigrok.
patrón interesante... similar a los códigos de barras... similar, pero no igual a este en.wikipedia.org/wiki/Code_39 ... ¿podría muestrear la señal a 200 kHz y publicar la captura resultante? archivo ... me gustaría convertir el archivo capturado en una secuencia de ancho/estrecho y ver si hay un patrón (la captura de 24 MHz tiene demasiados puntos de captura)
@Genom, la captura de 200kHz ya no es necesaria
@jsotola gracias por intentarlo, no tuve oportunidad antes. Sin embargo, escribí un script de Python para reducir la cantidad de puntos. Pero funciona con archivos convertidos ASCII.
@Genom, exporté de PulseView a "ascii art" para obtener una imagen de arte de texto de la forma de onda ... luego busqué y reemplacé usando Notepad ++ para obtener una lista de anchos de pulso (que se encuentra en la parte superior de este archivo ) .... luego usé Excel para refinar aún más los datos .... aquí está el archivo de texto resultante pastebin.com/Q0n34heg ..... no sé si hay un patrón, porque múltiples capturas de datos serían requerido solo para ver qué cambios

Respuestas (2)

Dada la cantidad de alternancias, sospecho que se trata de algún tipo de codificación de línea inusual. Creo que necesitaríamos ver más primeros planos de cada cuadro (lo que llamas un "ciclo") para adivinar. Mientras tanto, aquí hay algunos consejos para descifrar la codificación.

Las codificaciones de línea comunes, como NRZ y Manchester, representan bits como transiciones de nivel, no como niveles en sí mismos. En algunas codificaciones (como Manchester), la dirección de la transición es significativa:

  • De alto a bajo
  • Bajo a alto

En otros (como NRZ), la presencia o ausencia de una transición es significativa.

  • Transición presente
  • Transición ausente

A veces hay dos transiciones por tiempo de bit, a veces solo una. El artículo de código de línea en Wikipedia tiene mucha más información con ejemplos de varias codificaciones. Las implementaciones de protocolos asincrónicos a menudo usan relleno de bits (por ejemplo, CAN y USB), pero eso no parece estar presente aquí. El relleno de bits generalmente se realiza después de una ejecución de ~ 6 bits, pero no veo ninguna ejecución de más de 3-4 bits en sus datos.

El hecho de que siempre veas 14 transiciones por cuadro parece significativo, pero no estoy seguro de cómo interpretarlo. Parece que hay tiempos de 15 bits por cuadro, por lo que si uno es un bit de inicio, tendría 14 tiempos de bits de datos. En una codificación de estilo Manchester, serían 7 bits, que podrían contener un carácter ASCII.

actualización: es un protocolo de batería de cámara

alguna realización en hardware simple puede ser compatible con un UART tal vez con paridad después de correlacionar y sincronizar con patrones repetitivos.

Aquí hay un estándar no necesariamente de Nikon

https://www.basecamelectronics.com/files/SimpleBGC_2_6_Serial_Protocol_Specification.pdf

  • preámbulo Todos los 1 están inactivos Luego 00 1010 1010 1010 Sincronización de reloj 33.0kHz
    1111 1111 1111 ignorar.

  • xxxx xxxx informe esto para cada secuencia.
    Repetir.

Utilice el reloj de 30 us y la muestra central sincronizadas Ignore la fluctuación en el histograma pero corrija el eje x en /10. Parece ser 30us no 300us.

Los picos de +40 -60 son causados ​​por la distorsión de retardo del grupo de canales en diferentes patrones de datos llamados Interferencia entre símbolos (ISI) que se puede evitar pero no es necesario para esta ruta corta y estable. Podría hacer una conferencia de 3 horas sobre este tema solo sobre cómo identificar las fuentes de error de señal y cómo se corrige para alta velocidad.

¿Qué quiere decir con xxxx xxxx informar esto para cada secuencia? ¿Qué es una secuencia? ¿Qué se informa de vuelta? ¿Quiere decir que el histograma debe tener (10 μs/10 =) pasos de 1 μs?
Son los 1's 30us o 300! a nosotros
Ahh, creé el histograma para responder la pregunta de Adam. Por lo tanto, es alrededor de 300 μs. Para mostrar la distribución de las secuencias altas entre fotogramas.