Emulador de RFID

Emulador de tarjeta EM Marine





Seguramente cada uno de nosotros, que alguna vez ha estado en oficinas comunes, estaba interesado en cómo funcionan estos pases sin contacto. En este artículo trataremos el principio de funcionamiento de las tarjetas sin contacto y crearemos un emulador a partir de literalmente tres componentes de radio.



Tecnología RFID





La aparición de etiquetas



RFID RFID ( identificación por radiofrecuencia en inglés, identificación por radiofrecuencia) tiene un rango de frecuencia bastante amplio y una cantidad bastante grande de estándares diferentes que de alguna manera son aplicables a esta tecnología. Como referencia: las frecuencias utilizadas son: 125-135 kHz, 400 kHz, 6,78 MHz, 13,56 MHz (tarjetas metro y tarjetas bancarias), 27,125 MHz, 40,68 MHz, 433,29 MHz, 869 MHz, 915 MHz, 2,45 GHz, 5,8 GHz y 24,125 GHz. Como puede ver, el rango de frecuencia es muy amplio.



Hablaremos de las tarjetas más extendidas y menos protegidas del rango de frecuencia de 125 kHz. Analizaré el estándar EM Marine 4102, ya que es con lo que estoy más familiarizado. Sin embargo, el código del emulador le permite trabajar con otros estándares que operan a 125 kHz.



Para que podamos profundizar en la teoría, conviene decir algunas palabras sobre cómo funciona la RFID. Además, en el texto se proporcionará información relacionada con el estándar EM Marine de 125 kHz, otras soluciones RFID están dispuestas de manera similar.





El lector, además del intercambio de información, suministra energía. La etiqueta es una ROM que funciona con un campo electromagnético y, una vez que se aplica la alimentación, simplemente proporciona la información registrada.





Este diagrama muestra claramente cómo están dispuestos el transmisor y el receptor. Ambos circuitos oscilatorios están sintonizados en resonancia y se utilizan para la transmisión de datos y la transmisión de energía, para alimentar una etiqueta pasiva, que es nuestra tarjeta.



Se pueden encontrar más detalles sobre el principio de funcionamiento en [1]





El interior de la tarjeta desmontada



Si desmonta la tarjeta, puede ver una antena en forma de bobina y un chip lleno de un compuesto, que contiene una ROM y un condensador de 75 pF.



Descripción del protocolo EM4102



Antes de continuar, entendamos el estándar EM4102 que emularemos. La etiqueta RFID compatible con EM4102 contiene 64 bits de memoria de solo lectura. De hecho, esta es la ROM, es decir, la información se puede leer de ella, pero no se puede cambiar ni escribir, es decir, este chip viene cosido una vez en fábrica. La estructura de memoria de la etiqueta se puede ver en la siguiente figura.





Cuando la etiqueta entra en un campo electromagnético emitido por un lector de RFID, recibe energía del campo (potencia) y comienza a transmitir datos. Los primeros 9 bits son lógicos. Estos bits se utilizan como una secuencia de tokens para indicar el inicio de la transmisión. Dado que todos los demás datos usan paridad, esta secuencia de unos de nueve bits ya no ocurrirá en ningún otro lugar. Luego, hay 10 grupos de 4 bits de datos y 1 bit de paridad para cada grupo. Finalmente, hay 4 bits de la suma de control y el último bit de parada, que siempre es cero.



La etiqueta repite el ciclo de transmisión de datos hasta que recibe energía. Por tanto, observamos la lectura constante de la etiqueta en el lector.



Daré un ejemplo de los datos transmitidos por la etiqueta con el número: 0x06Es el número de versión y 0x001259E3 son los datos.





Por cierto, el número impreso en la tarjeta se puede traducir a un número hexadecimal que recibirá el lector. Por ejemplo, el número está escrito en la tarjeta: 116,23152



  • 116 en notación decimal es 0x74 en hexadecimal;
  • 23152 en decimal es 0x5A70 en hexadecimal;


Al combinarlos obtenemos el número de serie de la tarjeta, que nos dará el lector: 0x00745A70 .



Modulación de señal



La transmisión de datos desde la etiqueta al lector se realiza modulando la señal portadora del lector (en nuestro caso, la frecuencia portadora es de 125 kHz). Tenga en cuenta que esta frecuencia portadora también proporciona potencia y modula la señal. Para empezar, consideremos un esquema simplificado de interacción entre un lector y una etiqueta. Recuerde esta imagen, nos referiremos a ella más adelante.





Como puede ver, la etiqueta tiene un circuito oscilante LC, un diodo que sirve para rectificar la corriente alterna, un capacitor para suavizar el rizado (esto es parte de la fuente de alimentación de la etiqueta) y un transistor, controlando cuál podemos modular la señal. En el lector, esto se reflejará en un cambio en la corriente que fluye en la bobina. En pocas palabras, cuando ingresa al campo del lector, la etiqueta consume una corriente eléctrica (aproximadamente constantemente), al transmitir información, cambia el valor de la corriente consumida por un transistor y así el lector puede recibir una señal midiendo la potencia consumida.



El lector genera un campo magnético usando un modulador y una bobina y capta la señal modulada y luego la decodifica.





Un ejemplo de modulación de una señal portadora



Si no lo he confundido completamente, entonces vayamos más allá. Para transmitir datos, necesitamos modular la señal. Es decir, superpondrá los bits de la información transmitida en la frecuencia portadora.



Hay tres esquemas de modulación populares según el estándar RFID:



  • Código de Manchester
  • Código Manchester de dos fases
  • Codificación de cambio de fase


Dado que el estándar EM4102 usa el esquema de codificación Manchester, lo consideraremos. Al modular para el protocolo EM4102, el tiempo de transmisión de un bit puede ser 64, 32 o 16 períodos de la frecuencia portadora (125 kHz).





Con esta codificación, la marca cambia el nivel de transmisión de la señal exactamente en el medio del período de transmisión de un bit. La transición de nivel bajo a alto en estos momentos significa el estado de "1" lógico, y la transición de nivel alto a bajo, representa el estado de "0" lógico.





Señal modulada real capturada en la bobina del lector.



Hacer un emulador de RFID



Bueno, si todavía estás aquí y tu cabeza no está hinchada por tales cálculos, entonces es hora de hacer un emulador RFID, de solo dos partes. La genialidad radica en esta simplicidad. Monté el dispositivo, tomando prestada la idea y el código de Micah Dowty , las fotos son mías.





Aquí hay una cucaracha en miniatura que bien puede emular la etiqueta del



sitio del Proyecto . El código es muy interesante, se podría decir brillante y lacónico (se usa ensamblador). Detengámonos en ello en detalle. Lo analizaremos. Puedes ver el código aquí .



Para empezar, averigüemos cómo funciona esto en general, aunque por definición no debería funcionar, ya que contradice el diagrama de cableado habitual del microcontrolador. El diagrama del dispositivo se toma del código fuente.





Un inductor de aproximadamente 1 μH y un microcontrolador ATtiny85 ¡



Esto, señoras y señores, es un verdadero Hacking, cuando el nivel de comprensión de las características del funcionamiento del equipo les permite crear soluciones técnicas que van más allá de los límites indicados por el fabricante! Y funciona, verificado personalmente. Este es el verdadero significado de la palabra "hacker", no se trata de piratería y robo.



De cara al futuro, diré que esta bobina no es suficiente para el funcionamiento normal y, sin embargo, tuve que hacer una antena normal, colgar los condensadores de la fuente de alimentación y un condensador resonante. Pero para demostrar los principios del trabajo, es bastante adecuado.

Como funciona:



  • AVR /. /, . , . , . , . , . , .
  • AVR. , , , ( 0,1 ). AVR. , , 125!
  • . ATtiny85 2,5 . 1,8 . AVR , ...
  • , ! , , . Clock ! 125 , RFID. , !
  • ? -, . . EM4102 32 . HID FSK 4 . RFID- . « » , RFID -.
Antes de analizar el código de este emulador, conviértalo en una antena normal. Mis experimentos con los circuitos actuales revelaron una inestabilidad extrema en su funcionamiento. Funciona solo muy cerca del lector, e incluso entonces no siempre. Por lo tanto, al principio soldé un capacitor de 0.1 uF a las patas de potencia del controlador, y luego decidí hacer un circuito oscilatorio realmente grande, como en una etiqueta real.





La primera modificación es un condensador de 0,1 uF para fuente de alimentación.



Creación de antenas



No hay trucos para crear una antena de bobina, pero aún necesita familiarizarse con la documentación y comprender la física del proceso ... No es difícil, e incluso un escolar puede manejarlo, solo se requiere un poco de paciencia y perseverancia.



Es muy fácil de montar y configurar la antena, como en la imagen de [1] .





Para calcular la antena, debe recordar un poco de teoría. Necesitamos hacer un circuito oscilante que se sintonizará a una frecuencia de 125 kHz. Abramos el curso de Fundamentos Teóricos de la Ingeniería Eléctrica y leamos qué es un circuito oscilatorio:

Un circuito oscilante, un circuito eléctrico que contiene un inductor y un condensador en el que se pueden excitar oscilaciones eléctricas.




Circuito oscilatorio paralelo



Si dejas todas las matemáticas y vas al punto, el circuito oscilatorio tiene un parámetro como la frecuencia resonante, que está determinada por la fórmula.



f=12πLC



Donde f es la frecuencia de oscilación, L es la inductancia de la bobina, C es la capacitancia del capacitor.



En este caso, tenemos un parámetro fijo: la frecuencia, y podemos jugar con la capacitancia y la inductancia. Para calcular la bobina usaremos el documento [2] . ¡Todos los que de alguna manera vayan a fabricar antenas para etiquetas RFID (de cualquier frecuencia) deben familiarizarse con él!

Muchos artesanos, tanto para lectores como para emuladores (la esencia no es importante), fabrican bobinas redondas. Son más fáciles de contar y fabricar, pero tienen un inconveniente importante: sus dimensiones lineales son más grandes que la tarjeta. Quiero hacer un inductor en forma de rectángulo, con dimensiones lineales más pequeñas que una tarjeta estándar y para que el dispositivo resultante sea del tamaño de una tarjeta RFID estándar. Como resultado, elijo el tamaño del inductor futuro prácticamente el mismo que en la marca actual, es decir, aproximadamente 70x40 mm... Si el condensador se selecciona 10 nF, entonces la inductancia de la bobina (de la fórmula anterior) debería ser de 162 μH para nosotros. Ahora mire la documentación para calcular una bobina rectangular. Para enrollar la bobina, elegí un cable con una sección transversal de 0,2 mm. Como resultado, abrimos la sección correspondiente de la documentación, y la siguiente fórmula gloriosa se presenta a nuestros ojos.





Como puede ver, los parámetros del grosor y el ancho de la bobina son desconocidos y variables (se basan en el grosor del cable de 0,2 mm), pero las estimaciones generales me dieron una cifra de 42 vueltas. Sería posible hacer varias iteraciones y hacer un cálculo sencillo y preciso, pero en nuestro caso por pieza, servirá.



Después de eso, es necesario hacer un marco de 70x40 mm para enrollar la bobina. Lo hice a partir de PCB y enrolle una bobina a su alrededor.





Marco de PCB







Devanado y bobina terminada



Desafortunadamente, no tengo un medidor de inductancia, por lo que tuve que continuar utilizando el método científico de empuje. Como probablemente cometí un error en los cálculos, y en el número de vueltas al enrollar la bobina, como las hice aproximadamente y a ojo, decidí seleccionar la capacitancia resonante manualmente. Para hacer esto, fijé la bobina en el lector de tarjetas, pegué sus extremos en el tablero (“colchón con agujeros”), luego comencé a conectar los contenedores uno por uno, mientras registraba la señal en el osciloscopio.





Introducción al condensador resonante



Primero comprobé el condensador de 10 nF, que debería ser resonante. Pero la amplitud de la señal se redujo inmediatamente en comparación con la bobina vacía. Luego tomé un condensador más pequeño. Y así pasé por los condensadores hasta que capté la resonancia. Por tanto, la capacitancia resonante del condensador fue de 3,2 nF.





Señal sin condensador, bobina vacía





Señal de 10 nF





1 nF, 2 nF





3 nF, 4 nF, 2,2 nF





3.2 nF



Se puede ver que probé diferentes opciones, y estaba claro que el máximo está entre 3 y 4 nF y el resultado fue un capacitor de 3.2 nF (que consta de dos capacitores en paralelo). Eso es todo, nuestro carrete está listo para más experimentos.



En general, quiero señalar que una bobina generalmente se puede hacer en forma de pistas en una placa de circuito impreso, y con una pequeña serie de productos, esto debería hacerse. Aquí hay un ejemplo de una placa de este tipo, a 125 kHz de Alexander Guthmann . Desafortunadamente, el sitio prácticamente ha muerto y el autor no ha estado en contacto durante mucho tiempo, así que estamos contentos solo con mis fotos. Si alguien puede ayudarme a encontrarlo, ¡estaría agradecido! No sé qué le pasó.





Por lo tanto, hacer el emulador inmediatamente en forma de placa de circuito impreso no es un problema. Creo que con el manual [2] , puedes calcularlo tú mismo, ya que un colegial alemán de catorce años podría hacerlo.



Repasemos el código



Echemos un vistazo rápido al código, que puede ver aquí . Hay un ejemplo de emulación de dos tipos de tarjetas, analizaré solo la EM4102.



En primer lugar, como dice el código, al flashear el microcontrolador, necesitamos flashear los bits de fusible al valor lfuse a 0xC0 : para que el controlador esté sincronizado desde un generador externo. Llamo su atención sobre el hecho de que cualquier controlador parpadeante estará asociado con el hecho de que deberá sincronizarse desde una fuente externa, ya que estamos configurando bits de fusible con generación desde un generador externo.



Todo el código se basa en macros. Permítanme recordarles qué son las macros: un programa que prepara el código para la compilación. Nuestro programa consta de unas pocas instrucciones de ensamblador: rjmp, call (2 relojes), nop, ldi, out y ret (todos 1 reloj). Todo, todo el resto del código está formado por macros dependiendo de la macro del número de serie (definir). La peculiaridad del trabajo es que tenemos suficientes ciclos de reloj para un trabajo normal. Intente hacer algo en 32 ciclos de reloj, considerando que las instrucciones de salto en el controlador AVR toman 2 ciclos de reloj. Por lo tanto, todo el código es generado por macros dependiendo de la tarjeta de identificación.



#define FORMAT_IS_EM4102
#define EM4102_MFR_ID		0x12
#define EM4102_UNIQUE_ID	0x3456789A


Definir qué tipo de tarjeta estamos emulando y configurar tarjetas de identificación. Esta es la macro principal a partir de la cual se forma el resto del código. Y, tadam, su majestad macros.



    .macro	delay cycles
    .if \cycles > 1
    rjmp	.+0
    delay	(\cycles - 2)
    .elseif \cycles > 0
    nop
    delay	(\cycles - 1)
    .endif
    .endm


Macro de retraso, acepta el número de tics de retraso como entrada. Una macro recursiva bastante obvia, realiza el retardo usando el comando nop (sin operación, 1 ciclo de reloj) y el comando rjmp. + 0 (pasar a la siguiente línea, 2 ciclos de reloj). Combinando estos comandos entre sí, puede hacer el retraso de la longitud deseada en compases. De hecho, el código no hace nada, solo desperdicia tiempo de la máquina.



Si todavía estás pensando, te violaré por completo el cerebro, pero el código es tan ingenioso que tendrás que soportarlo.



Codificación de macros recursivas por código Manchester.



    .macro	manchester bit, count=1
    .if		\count
    manchester (\bit >> 1), (\count - 1)
    .if		\bit & 1
    baseband_1
    baseband_0
    .else
    baseband_0
    baseband_1
    .endif
    .endif
    .endm

    .macro	stop_bit
    baseband_0
    baseband_1_last
    .endm


De hecho, toda la lógica se implementa aquí. Acepta una máscara de bits y un contador de bits como entrada. Si el contador no es cero, volvemos a llamarnos a nosotros mismos, decrementando el contador (macro recursiva, sí). Además, en el propio cuerpo hay llamadas a las macros baseband_0, baseband_1 y baseband_1_last. Dependiendo de qué bit tengamos “1” o “0”, modulamos la señal del código Manchester de cero a uno o de uno a cero.



Recuerde que le di una tabla en el artículo, cómo se codifica el contenido de la tarjeta, dónde van los bits de paridad y los bits de parada al final. Entonces, nuestra tarea ahora es codificar las etiquetas de identificación con este método, para esto tenemos dos macros.



#define ROW_PARITY(n)  ( (((n) & 0xF) << 1) | \
                         (((n) ^ ((n) >> 1) ^ ((n) >> 2) ^ ((n) >> 3)) & 1) )

#define COLUMN_PARITY  ( (EM4102_MFR_ID >> 4) ^        \
                         (EM4102_MFR_ID) ^             \
                         (EM4102_UNIQUE_ID >> 28) ^    \
                         (EM4102_UNIQUE_ID >> 24) ^    \
                         (EM4102_UNIQUE_ID >> 20) ^    \
                         (EM4102_UNIQUE_ID >> 16) ^    \
                         (EM4102_UNIQUE_ID >> 12) ^    \
                         (EM4102_UNIQUE_ID >> 8) ^     \
                         (EM4102_UNIQUE_ID >> 4) ^     \
                         (EM4102_UNIQUE_ID) )


ROW_PARITY: calcula el bit de paridad en una cadena de cuatro bits, COLUMN_PARITY: calcula la suma de comprobación de todo el mensaje.



Toda la lógica de nuestro trabajo se describe en una macro en .main



        header
        manchester	ROW_PARITY(EM4102_MFR_ID >> 4), 5
        manchester	ROW_PARITY(EM4102_MFR_ID >> 0), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 28), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 24), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 20), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 16), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 12), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 8), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 4), 5
        manchester	ROW_PARITY(EM4102_UNIQUE_ID >> 0), 5
        manchester	COLUMN_PARITY, 4
        stop_bit


Bueno, es decir, simplemente transferimos el encabezado de 9 bits de la misma manera, luego la codificación Manchester, calculando el bit de paridad para cada 4 bits, al final una suma de control y un bit de parada.



Queda por averiguar cuál es la banda base. Para esto, tenemos una macros contenedora más (sí, ¿cuántas son posibles, eh?).



        .macro baseband_0
        rcall	baseband30_0
        rjmp	.+0
        .endm

        .macro baseband_1
        rcall	baseband30_1
        rjmp	.+0
        .endm
        
        .macro baseband_1_last
        rcall	baseband30_1
        rjmp	main
        .endm

        .macro header
        manchester 0x1FF, 9
        .endm


Macros de banda base *: ejecute código ensamblador: llame a las funciones apropiadas y luego haga una transición a otra instrucción. La macro baseband_1_last es similar a la macro baseband_1, excepto que hace un salto incondicional no al comando siguiente, sino al comienzo de la función principal. Encabezado de macro: sirve para mostrar el encabezado de nueve bits del mismo tipo igual a uno, y llama a la macro de Manchester con la transmisión del número y el número de bits transmitidos.



Lo último que queda por analizar son las funciones baseband30_0 y baseband30_1. Se describen mediante el siguiente código.



baseband30_0:
        ldi	r16, OUT_PINS		// 1
        rjmp	baseband30		// 2

        /*
         * Emit a 1 at the baseband layer.
         * Takes a total of 30 clock cycles, including call overhead.
         */
baseband30_1:
        ldi	r16, 0			// 1
        rjmp	baseband30		// 2
        
        /*
         * Internal routine for baseband32_0 and _1. Must use
         * a total of 24 clock cycles. (32 - 1 ldi - 2 rjmp - 3 rcall)
         */ 
baseband30:
        out	_SFR_IO_ADDR(DDRB), r16		// 1
        delay	19				// 19
        ret					// 4


Dependiendo de qué función se llame baseband30_0 o baseband30_1, el valor de lo que debería estar en el pin de E / S se escribe en el registro r16: 1 o 0. Después de eso, hay una transición incondicional a baseband30, se realiza la salida y un retraso de 19 ciclos de reloj, después de lo cual hay un retorno.



La mayor magia de este código es que se calcula exactamente antes de cada ciclo de reloj, cada reloj de transmisión del código Manchester toma exactamente tantos períodos como lo permite el estándar, es decir, ¡32 ciclos de reloj del procesador! Esto es increíblemente ingenioso, tienes que recordar cuántos compases toma cada comando.



Mejor compilemos y veamos cómo se ve, cómo se expanden todas estas macros. Compilamos con el comando make (después de instalar avr-gcc) y desensamblamos el archivo elf resultante



00000000 __vectors:
   0:	0e c0       	rjmp	.+28     	; 0x1e __ctors_end
   2:	15 c0       	rjmp	.+42     	; 0x2e __bad_interrupt
...


Primero, tenemos vectores de interrupción, pero solo nos interesa el primer salto. Dado que el resto de los vectores no conducen a ninguna parte.



0000001e __ctors_end:
  1e:	11 24       	eor	r1, r1
  20:	1f be       	out	0x3f, r1	; 63
  22:	cf e5       	ldi	r28, 0x5F	; 95
  24:	d2 e0       	ldi	r29, 0x02	; 2
  26:	de bf       	out	0x3e, r29	; 62
  28:	cd bf       	out	0x3d, r28	; 61
  2a:	02 d0       	rcall	.+4      	; 0x30 main
  2c:	11 c1       	rjmp	.+546    	; 0x250 _exit


Aquí configuramos los puertos de E / S y llamamos a la función principal. Un main consiste en una enorme cantidad de llamadas a la baseband30 * y funciones de salto (así es como se desarrolló nuestro infernal circo de macros).



00000030 main:
  30:	01 d1       	rcall	.+514    	; 0x234 baseband30_1
  32:	00 c0       	rjmp	.+0      	; 0x34 main+0x4
  34:	fd d0       	rcall	.+506    	; 0x230 baseband30_0
  36:	00 c0       	rjmp	.+0      	; 0x38 main+0x8
  38:	fd d0       	rcall	.+506    	; 0x234 baseband30_1
  3a:	00 c0       	rjmp	.+0      	; 0x3c main+0xc
  3c:	f9 d0       	rcall	.+498    	; 0x230 baseband30_0
  3e:	00 c0       	rjmp	.+0      	; 0x40 main+0x10
  40:	f9 d0       	rcall	.+498    	; 0x234 baseband30_1
  42:	00 c0       	rjmp	.+0      	; 0x44 main+0x14
  44:	f5 d0       	rcall	.+490    	; 0x230 baseband30_0
  46:	00 c0       	rjmp	.+0      	; 0x48 main+0x18
  48:	f5 d0       	rcall	.+490    	; 0x234 baseband30_1
  4a:	00 c0       	rjmp	.+0      	; 0x4c main+0x1c
  4c:	f1 d0       	rcall	.+482    	; 0x230 baseband30_0
...
 22e:	00 cf       	rjmp	.-512    	; 0x30 main


Y así sucesivamente ... hasta que volvamos a la página principal.



Bueno, veamos cómo se ve nuestro módulo de banda base.



00000230 baseband30_0:
 230:	08 e1       	ldi	r16, 0x18	; 24
 232:	02 c0       	rjmp	.+4      	; 0x238 baseband30

00000234 baseband30_1:
 234:	00 e0       	ldi	r16, 0x00	; 0
 236:	00 c0       	rjmp	.+0      	; 0x238 baseband30

00000238 baseband30:
 238:	07 bb       	out	0x17, r16	; 23
 23a:	00 c0       	rjmp	.+0      	; 0x23c baseband30+0x4
 23c:	00 c0       	rjmp	.+0      	; 0x23e baseband30+0x6
 23e:	00 c0       	rjmp	.+0      	; 0x240 baseband30+0x8
 240:	00 c0       	rjmp	.+0      	; 0x242 baseband30+0xa
 242:	00 c0       	rjmp	.+0      	; 0x244 baseband30+0xc
 244:	00 c0       	rjmp	.+0      	; 0x246 baseband30+0xe
 246:	00 c0       	rjmp	.+0      	; 0x248 baseband30+0x10
 248:	00 c0       	rjmp	.+0      	; 0x24a baseband30+0x12
 24a:	00 c0       	rjmp	.+0      	; 0x24c baseband30+0x14
 24c:	00 00       	nop
 24e:	08 95       	ret


Al final, puede ver cómo la demora se ha expandido a una lista de salto y nop por la demora. Esta es una magia tan hermosa.



Bueno, descubrimos el código. Recogemos el cerebro drenado de los oídos, procedemos a las pruebas.



Pruebas



Aplicaremos todos los conocimientos adquiridos y realizaremos pruebas. Compilamos el firmware, flasheamos el controlador, recordando configurar correctamente los bits del fusible.





Bufanda de firmware



Conectamos nuestro circuito oscilatorio y probamos en un lector industrial real, sin medias tintas, condiciones de combate justas.





Banco de pruebas



Y, ¡ he aquí! ¡Funciona, lee correctamente y da la identificación correcta en un bucle! Sin fuente de alimentación externa, con funcionamiento solo desde el campo. Queda por poner todo esto en orden y hacer una etiqueta RFID real.





La versión final "laminada" de la etiqueta



Total



Puedo admitir honestamente que no creía completamente que funcionaría. Fuente de alimentación del campo, modos de funcionamiento no estándar del controlador, funcionan estrictamente de acuerdo con los ciclos del reloj, inductor casero. Más el trabajo de RFID en sí. Y ahora, como un trabajo insignificante, se extiende a lo largo de un par de meses de lectura de la documentación y el informe. Pero funciona, y esta cosa es realmente brillante. Entonces, chicos, este tipo de cosas es piratería real. ¡Ve a por ello!



Deberes



Como todavía lees este artículo genial, lo escribí, lo probé, lo hice, ahora es el momento de que intentes hacer algo. El código del emulador contiene una sección que emula tarjetas de proximidad HID con codificación de desplazamiento de fase. Debe comprender el estándar HID y esta codificación para divertirse y una mejor asimilación. Envíe la solución en los comentarios. Buena suerte.



Bibliografía



  1. AppNote 411 RFID Made Easy
  2. AN710 Antenna Circuit Design for RFID Applications
  3. priority1design.com





All Articles