Protocolo de bus de clave DSC

Planeo conectar un atmel avr con mi sistema de alarma en casa, pero el problema es que DSC tiene un protocolo propietario entre el teclado y la base. Entonces, ¿alguien se ha metido con esto antes o puede darme algunos consejos para principiantes sobre cómo aplicar ingeniería inversa a este protocolo?

El cableado es simple: Vcc, GND, Datos, Reloj

El Vcc es de +12 voltios y las líneas de datos/reloj están entre +8-10 pero funcionan bien a través de un divisor de voltaje al analizador lógico.

La línea del reloj es confusa, aunque es un reloj de 1 kHz con un rendimiento del 50%, pero solo funciona durante 41.600 ms, luego aumenta durante 5.400 ms y luego comienza de nuevo.

La línea de datos parece cambiar en el borde ascendente o descendente del reloj

Datos de puertas abiertas - Imagen

(0 es la línea de datos, 1 es la línea de reloj)

Archivos de rastreo de OpenLogic

Este chico hizo un servicio fácil. Todavía en beta, pero funciona... juliano.com.br/dsc
Tengo un código de trabajo en github.com/hvesalai/keybus . Está bajo licencia MIT, por lo que eres libre de bifurcar el tuyo o contribuir al mío.

Respuestas (5)

No hay una respuesta simple para decodificar un protocolo, si tienen una buena configuración de esquema de encriptación, entonces probablemente estará arriba &$%* arroyo. Con algo de trabajo y más preguntas, es posible que descubra con éxito el tipo de encriptación y luego, si está mal implementado, decodifique.

Lo más probable es que el teclado tenga un protocolo muy simple y el controlador tenga algunas restricciones estrictas sobre cuántas pulsaciones de botón aceptará y demás.

En cuanto al protocolo síncrono, lo más probable es que el protocolo sea un protocolo NRZ . Esa es mi suposición mejor informada basada en su explicación. No puedo abrir los archivos en este momento, pero espero que esto ayude.

El hecho de que cambie en ambos bordes del reloj es solo una señal de que ambos bordes del reloj representan un punto en el que se produce un "bit" de datos. Con NRZ solo está verificando si hubo un cambio o no.

Espero que esto haya ayudado.

Gracias por eso, no creo que los datos estén encriptados ya que otra persona en avrfreaks logró encontrar el bit que está configurado cuando la alarma está armada y desactivado cuando no lo está (hrm, no puedo poner líneas nuevas en este comentario) www.baranharper.com/pdfs/dsc/pc5401-dev_guide.pdf <-- Creo que estos son los datos que se envían de un lado a otro. Así que sé lo que estoy buscando pero no exactamente cómo leerlo. Gracias por tu comentario nuevamente, espero poder dedicar algo de tiempo a este proyecto este fin de semana.
@User3239, el trabajo me distrajo, si guarda los datos que extrajo de las líneas de datos como una imagen en su computadora, se puede cargar fácilmente a la pregunta, entonces los usuarios como yo, que no pueden instalar software no relacionado con el trabajo, pueden buscar en eso
ah, lo siento por eso. No puedo incrustar una imagen (límite de 10 repeticiones) pero puedo vincular a una.

siguiendo mi búsqueda en la web sobre este tema, parece que este protocolo está usando la línea CLK y luego el borde ascendente de CLK es para teclado->panel y el borde descendente para panel->comunicación con teclado. Planeo probar esto esta noche con este pequeño boceto de arduino:

Volveré a publicar mis hallazgos después de esto...

#define CLK 11
#define DTA 12

String st;

void setup()
{
  pinMode(CLK,INPUT);
  pinMode(DTA,INPUT);
  pinMode(13,OUTPUT);
  Serial.begin(9600);
  Serial.println("Debut");
}

void loop()
{
    if (waitCLKchange(1) > 200)
    {
      // Debut de pattern

      st = "";

      while (1)
      {
        // CLK est bas. On attend qu'il remonte
        if (waitCLKchange(0) > 50) break;

        // CLK est haut, on lit un bit
        if (digitalRead(DTA)) st += "1"; else st += "0";

        // Attendre que CLK redescende
        if (waitCLKchange(1) > 50) break;
      }

      Serial.println(st);
    }

}


int waitCLKchange(int currentState)
{
  int c = 0;
  while (digitalRead(CLK) == currentState)
  {
    delayMicroseconds(10);
    c++;
  }
  return c;
}

Seguí este camino y descubrí que era mucho, mucho más fácil simplemente comprar una de las tarjetas de interfaz serie compatibles, como la DSC 5401 o la IT-100 más nueva.

Para obtener más información, consulte: http://www.payne.org/index.php/Product:DSC_5401

Nota: si tenía su alarma instalada, su instalador tendrá que venir y "registrar" la tarjeta de interfaz en su red KEYBUS. Sospecho que el protocolo puede tener algunas características de seguridad (eso espero), y eso hará que la ingeniería inversa sea aún más difícil.

Está empezando a tomar forma. Aquí hay algunos resultados. Basado en esta publicación: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=942340#942340 Estoy mirando cadenas de estado, esto es lo que obtengo:

00000101 0 10000001 00000001 00000000 11000111 00000000 11000111 00000000 11000111 1 no zone
00000101 0 10000001 00000010 00000000 11000111 00000000 11000111 00000000 11000111 1 zone 1
00000101 0 10000001 00000010 00000000 11000111 00000000 11000111 00000000 11000111 1 zone 2
00000101 0 10000000 00000011 00000000 11000111 00000000 11000111 00000000 11000111 1 zone 3
00000101 0 10000000 00000011 00000000 11000111 00000000 11000111 00000000 11000111 1 zone 4

00000101 0 10000011 00001000 00000000 11000111 00000000 11000111 00000000 11000111 1 arm delay
00000101 0 10000011 00001000 00000000 11000111 00000000 11000111 00000000 11000111 1 arm delay short beeps
00000101 0 10000010 00000101 00000000 11000111 00000000 11000111 00000000 11000111 1 armed

Si puedes ayudarme a encontrarle sentido a esto, ¡sería feliz!

Que modelo de panel de alarma es? Hice algo similar hace años con un DSC PC1550 (panel de la serie Classic), no estoy seguro de cuánto ha cambiado con los paneles más nuevos. La afirmación sobre el reloj de flanco ascendente frente al reloj de flanco descendente es correcta: cada bit de datos representaba un botón del teclado o un LED en el teclado dependiendo de la dirección de los datos. No estoy seguro de por qué la Zona 1 y la Zona 2 son iguales y la Zona 3 y la Zona 4. Estaba configurando un bit definido para cada LED. Buena suerte si todavía está trabajando en ello.

Las respuestas de los comentarios no se ajustan muy bien al formato de este sitio, quizás edite para eliminar la pregunta (que debería ser un comentario) y amplíe lo que funcionó para usted.