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
(0 es la línea de datos, 1 es la línea de reloj)
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.
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.
usuario23086
hvesalai