Blocare electronică RFID pe un microcontroler. Sistem. RFID este ușor. Implementarea propriului transponder și cititor RFID. Transfer de date între etichete și cititor

Cititor RFID - carduri și brelocuri
pe microcontrolerul ATtiny13

Sursă: www.serasidis.gr
Vassilis Serasidis

Traducere: Vadim comandat de RadioLotsman

Recent, diverse proiecte bazate pe chei RFID utilizate în sistemele de securitate, protecție și control acces au câștigat o mare popularitate. La unele întreprinderi și organizații, astfel de sisteme, completate de specializate software, sunt folosite pentru fixarea timpului de lucru, contabilizarea valorilor materiale etc.

Orice sistem de identificare prin radiofrecvență (RFID) constă dintr-un cititor (cititor, cititor sau interogator) și un transponder (alias etichetă RFID, uneori se folosește și termenul etichetă RFID). În articol, vom lua în considerare un dispozitiv simplu pentru citirea cheilor RFID care acceptă protocolul EM4100 și funcționează la o frecvență de 125 kHz. Acest tip Cheile RFID pot lua forma unui breloc sau a unui card de credit (Figura de mai jos).

Componenta principală a cititorului este un microcontroler Atmel AVR ATtiny13 , care citește un număr unic de identificare a cheii din 10 cifre și îl transmite în codificare ASCII printr-o interfață serială (UART) la 2400 bps către dispozitivul gazdă. Cu alte cuvinte, cititorul este un modul separat conectat la procesorul sau microcontrolerul principal al sistemului (Figura 2).

Diagrama schematică a cititorului RFID este prezentată în figura de mai jos:

Luați în considerare principalele caracteristici ale schemei. Microcontrolerul folosește un modulator PWM încorporat pentru a genera o undă pătrată de 125 kHz la ieșirea PB0. Dacă jurnalul de ieșire PB0. 0 (marginea de cădere a impulsului), tranzistorul T1 este în stare închisă, iar tensiunea de alimentare de +5 V este aplicată bobinei L1 prin rezistorul R1. Marginea ascendentă la ieșirea PB0 (log. 1) deschide tranzistorul T1, iar ieșirea superioară a bobinei conform circuitului este conectată la masă. În acest moment, bobina este conectată în paralel cu condensatorul C2, formând un generator LC (circuit oscilator). Tranzistorul comută de 125.000 de ori pe secundă (125 kHz). Ca rezultat, bobina generează un semnal sinusoidal cu o frecvență de 125 kHz

Modulul cititor generează un câmp electromagnetic, a cărui energie este utilizată pentru alimentarea cheii RFID. Transferul de energie între cheia RFID și cititor se bazează pe principiul de funcționare al unui transformator convențional: înfășurarea primară a transformatorului creează un EMF de inducție în toate celelalte înfășurări. Pentru cazul nostru, înfășurarea primară este bobina cititorului, iar înfășurarea secundară este bobina cheii RFID. Elementele D1, C3 și R5 formează un demodulator de semnal modulat în amplitudine.

Schimb de date între cheie și cititor

Procesul de schimb de date între cheia RFID și cititor este foarte simplu, dar gândit până la cel mai mic detaliu. Dacă cheia RFID ar trebui să trimită un jurnal. 0, apoi conectează o anumită „sarcină” la sursa sa de alimentare, ceea ce necesită mai multă energie transmisă de cititor. Acest lucru va provoca o scădere ușoară de tensiune pe partea cititorului; acest nivel este perceput de cititor ca un jurnal. 0

O cheie RFID transmite în general 64 de biți de date în următoarea secvență (Figura 6):

  1. Primii 9 biți (întotdeauna logic 1) sunt biți de pornire care indică începutul schimbului de date.
  2. 4 biți - cei mai puțin semnificativi biți ai numărului de identificare a utilizatorului (D00 - D03).
  3. 1 bit (P0) - bit de paritate al celor 4 biți anteriori.
  4. 4 biți sunt cei mai importanți biți ai numărului de identificare a utilizatorului (D04 - D07).
  5. 1 bit (P1) - bit de paritate al celor 4 biți anteriori.
  6. 4 biți - prima parte a unui 32 de biți număr de serie Cheie RFID (D08 - D11).
  7. 1 bit (P2) - bit de paritate al celor 4 biți anteriori.
  8. În continuare, sunt transmise următoarele grupuri de 4 biți din numărul de serie al cheii, fiecare cu un bit de paritate.
  9. Apoi 4 biți de biți de paritate sunt transmiși pe coloane. De exemplu, bitul de paritate PC0 pentru biții D00, D04, D08, D12, D16, D20, D24, D28, D32 și D36.
  10. 1 bit de oprire.

Date (secvență de 64 de biți) pe care le transmite cheia RFID.

Verificarea integrității datelor este efectuată de microcontroler prin calcularea biților de paritate pentru fiecare rând și coloană și comparând cu datele primite de la cheia RFID.

Design bobine.

Inductorul fără cadru din cititor cu diametrul de 120 mm este înfășurat cu un fir cu diametrul de 0,5 mm și are 58 de spire, dar autorul recomandă să adăugați încă 2 - 3 spire la bobinare. Pentru a îmbunătăți eficiența bobinei și a crește distanța de citire a datelor cheii RFID, este necesară calibrarea circuitului de oscilație. Dacă, prin conectarea osciloscopului la punctul de conectare al lui R1 și L1, vedeți vârfuri distorsionate pe ecranul dispozitivului (Figura 7), atunci aceasta indică necesitatea de a calibra bobina L1.

Distorsiunea semnalului generat de bobina L1 indică necesitatea calibrării.

Calibrarea poate fi efectuată în două moduri după alimentarea modulului.

  1. Conectați sondele osciloscopului la punctul de conectare al lui R1 și L1 și prin creșterea sau scăderea numărului de spire ale bobinei L1, obțineți eliminarea distorsiunii semnalului.
  2. Dacă nu aveți un osciloscop, aduceți încet cheia RFID pe bobină până când cheia este recunoscută, așa cum este evidențiat de un bip. Dacă cheia este determinată de la o distanță de 2 cm, atunci este necesar să adăugați / îndepărtați câteva ture și apoi să verificați din nou distanța de la care cheia poate fi citită cu încredere. Folosind calibrarea, autorul schemei a realizat o citire sigură a cheii RFID de la 3 cm.

Când programați microcontrolerul, este necesar să setați următoarea configurație Fuse-bit: octet mic 0x7A și octet mare 0x1F (microcontrolerul funcționează de la un generator de ceas încorporat de 9,6 MHz, divizorul de frecvență a ceasului cu 8 este dezactivat). Cod program ocupă 1024 de octeți în memoria microcontrolerului - este utilizată întreaga memorie disponibilă a microcontrolerului ATtiny13. Prin urmare, în viitor, atunci când extindeți funcționalitatea cititorului, este mai bine să utilizați un alt microcontroler AVR cu 8 pini, de exemplu, ATtiny85.

Descărcări:

Codul sursă al programului de microcontroler (AVRStudio 6), firmware (.hex) și schema circuitului -

Caracteristici:
Frecvența notch: 125KHz
Alimentare: +5 V DC
Date de ieșire: serial, 2400 bps 8N1. Se emite un număr de serie din 10 cifre al etichetei.

Poza 1:Figura 2:

Introducere

Acest cititor RFID funcționează cu etichete de 125 kHz în carduri de dimensiunea unui card de credit și brelocuri de 125 kHz (Figura 1). Acesta utilizează protocolul EM4100. Când aduceți eticheta RFID aproape (4-5 cm) de bobina cititorului (L1), cititorul citește 10 cifre identificator unic etichetați și transmiteți-l ca caractere ASCII prin ieșire serială la 2400 de biți pe secundă.

Circuitul include un dispozitiv de semnalizare care emite intermitent semnale sonore când eticheta este citită cu succes.

Descriere

Voi încerca să explic în câteva cuvinte cum funcționează un cititor RFID. Controlerul ATtiny13 folosește funcția PWM pentru a genera un semnal de undă pătrată de 125 kHz. Acest semnal este scos de la pinul PB0. Pe marginea de fugă a impulsului la pinul PB0 (zero logic „0”), tranzistorul T1 este închis. Astfel, bobina L1 este excitată prin rezistorul R1 (nominal 100 ohmi) de la tensiunea +5V. Când pulsul de pe pinul PB0 crește (logic „1”), tranzistorul T1 se pornește și unul dintre bornele bobinei L1 este conectat la GND. Condensatorul C2 este conectat în paralel la bobina L1, creând un oscilator LC. Datele de comutare ale bobinei L1 de la unu logic la zero logic au loc de 125.000 de ori pe secundă (125 kHz).

Figura 3: Oscilații ale unui semnal cu o frecvență de 125 kHz, care sunt transmise de la bobina L1 și condensatorul C2.

Cititorul RFID transmite energie către transponder (etichetă) prin crearea unui câmp electromagnetic. Transferul de energie între cititorul RFID și etichetă are loc pe același principiu ca și lucrul transformatoare , tensiune de conversie 220 V rețea curent alternativ la 12 V AC, datorită câmpului magnetic pe care îl creează înfășurarea primară. În cazul nostru, înfășurarea primară este cititorul RFID, iar înfășurarea secundară este eticheta RFID. Singura diferență este că în circuitul cititorului RFID nu există un circuit magnetic din oțel între cele două bobine (o bobină este situată pe partea laterală a cititorului, iar cealaltă bobină este în eticheta RFID). Componentele D1, C3 și R5 alcătuiesc demodulatorul semnal AM (AM = modulație de amplitudine).

Transfer de date între etichete și cititor.

Cum transmit etichetele date către cititor? Foarte simplu! Când o etichetă dorește să transmită un zero logic „0” cititorului, aplică o „încărcare” liniei sale de alimentare pentru a extrage mai multă putere de la cititor. Acest lucru cauzează o mică cădere de tensiune pe partea cititorului RFID. Acest nivel de tensiune este zero logic „0” (vezi Figura 4). Concomitent cu transmiterea de către cititor a unui semnal cu frecvența de 125 kHz, citește tensiunea semnalului transmis prin filtrele D1, C3 și R5, C1. Când eticheta scade tensiunea, așa cum sa menționat mai devreme, cititorul citește această cădere de tensiune ca un zero logic „0”. Dacă eticheta nu necesită putere suplimentară, nu provoacă o cădere de tensiune. Aceasta corespunde unității logice „1” (Figura 3). Lungimea „unui” sau „zerourilor” depinde de rata de date seriale. De exemplu, pentru o frecvență purtătoare de 125 kHz, nu obținem o rată de date de 125.000 de biți pe secundă! Transferul de date de la etichetă la cititor variază de la 500 la 8.000 de biți pe secundă.

Figura 4:Captură de ecran cu transmiterea datelor... 10101...Figura 5


  • Eticheta RFID de 125 kHz transmite 64 de biți.
    1. Primii 9 biți sunt biții de început ai transmisiei (întotdeauna „1”).
    2. Următorii 4 biți sunt biții inferiori ai ID-ului utilizatorului (D00,..., D03).
    3. Următorul 1 bit (P0) este bitul de paritate al celor 4 biți anteriori.
    4. Următorii 4 biți sunt cei mai importanți biți ai ID-ului utilizatorului (D04,..., D07).
    5. Următorul 1 bit (P1) este bitul de paritate al celor 4 biți anteriori.
    6. Următorii 4 biți sunt prima parte a numărului de serie etichetei de 32 de biți (D08,..., D11).
    7. Bitul PC0 este bitul de paritate al biților D00, D04, D08, D12, D16, D20, D24, D28, D32 și D36 (biții sunt în aceeași coloană).
    8. Biții PC1, PC2, PC3 sunt biții de paritate ai următoarelor trei coloane.

Verificarea datelor este efectuată de controlerul ATtiny13 prin calcularea bitului de paritate al fiecărui rând și al fiecărei coloane de biți de paritate care sunt primiți în datele etichetei RFID transmise.

Fabricarea bobinei

Bobina are un diametru de 120 mm și 58 de spire. Pentru orice eventualitate, lăsați niște sârmă de cupru pentru încă 2-3 spire (60-61 de spire în total). Pentru a obține distanța maximă dintre eticheta RFID și cititor (între etichetă și antena bobinei cititorului), trebuie să calibrați bobina. Dacă conectați un osciloscop la punctul comun de conectare al lui R1 și L1, veți vedea locul marcat cu un cerc roșu în figura din stânga. Aceasta înseamnă că bobina L1 trebuie calibrată.

Cum se calibrează bobina L1?

Activați cititorul RFID:

1. După conectarea sondei osciloscopului la punctul comun R1, L1, încercați să îndepărtați încet sau să adăugați puțin fir de cupru (creșteți sau micșorați numărul de spire) bobinei până când zgomotul este eliminat.

2. Dacă nu aveți un osciloscop, încercați să mutați eticheta RFID aproape de bobina L1 până când eticheta este recunoscută de cititor. Dacă marca dvs. este detectată la o distanță de 2 cm de bobina L1, atunci încercați să adăugați câteva spire de sârmă de cupru pentru bobina L1 pentru a vă asigura că semnul este detectat la o distanță mai mare (de exemplu, 3 cm).

Încercați aceiași pași prin îndepărtarea spirelor firului de cupru din bobina L1. În acest fel, veți obține distanța maximă dintre semne și bobina L1.

Am făcut o bobină L1 de 120 mm cu 58 de spire, dar ulterior am vrut să o fac mai mică. Așa că am pliat bobina în jumătate, astfel încât să arate ca un „număr opt” (în formă de cifra opt) și am recalibrat. Astfel, bobina L1 din figuri are de fapt un diametru mai mic de 120 mm.

Bobina L1 din figură are un diametru de 60 mm și aproape 116 spire.

ProgramareATtiny13

Set de biți de configurare ATtiny13 (siguranțe): Siguranță mare: 0x1F și siguranță scăzută: 0x7A. Acest set de acordare ATtiny13 funcționează cu un oscilator intern de 9,6 MHz. Funcția de împărțire la 8 a ceasului de sistem este dezactivată.

Versiunea de firmware v1.00 are 1024 de octeți și ocupă 100% din memoria flash ATtiny13. Ar putea fi o idee bună să treceți la orice alt AVR cu 8 pini, cum ar fi ATtiny85, dacă doriți să adăugați unele funcționalități la codul sursă.

Proiectul este conceput de: Vassilis Serasidis ( Vassilis Serasidis) 18 august 2012
Limbaj de programare: Cu
Mediu de dezvoltare:
Microcontroler:ATtiny13 (oscilator intern de 9,6 MHz)

Lista elementelor radio

Desemnare Tip Denumirea Cantitate NotăScorBlocnotesul meu
IC1 MK AVR pe 8 biți

ATtiny13

1 La blocnotes
IC2 Amplificator operațional

LM358

1 La blocnotes
IC3 Regulator liniar

LM78L05

1 La blocnotes
T1 tranzistor MOSFET

BS170

1 La blocnotes
T2 tranzistor bipolar

BC547B

1 La blocnotes
D1 dioda redresoare

1N4148

1 La blocnotes
C1 Condensator12 nF1 La blocnotes
C2 Condensator1,5 nF1 La blocnotes
C3 Condensator4,7 nF1 La blocnotes
C4, C5 condensator electrolitic100uF2 La blocnotes
C6 Condensator100 nF1 La blocnotes
R1 Rezistor

100 ohmi

1 La blocnotes
R2 Rezistor

1 kOhm

1 La blocnotes
R3 Rezistor

390 kOhm

1 La blocnotes
R4, R8 Rezistor

33 kOhm

2 La blocnotes
R5 Rezistor

270 kOhm

1 La blocnotes
R6 Rezistor

Schema schematică a unui emulator de transponder RFID EM-Marine (EM4100).
Cardurile contactless Em-Marine sunt de departe cel mai popular mijloc de identificare în țara noastră și sunt folosite pentru identificarea utilizatorilor în sistemele de control și management al accesului (ACS).
A doua, nu mai puțin populară, domeniu de aplicare a cardurilor Em-Marine este utilizarea acestora în sistemele de acces logic atunci când autorizează utilizatorii prin numărul de identificare al cardului în sistem de operare aplicații de calculator și de lucru etc.

Carduri Em-Marine și brelocuri.
În consecință, astfel de sisteme de identificare sunt foarte comune și pot fi de interes pentru implementarea propriilor sisteme de identificare și automatizare. Deoarece protocolul de schimb și hardware-ul unor astfel de sisteme de joasă frecvență sunt mai simple pentru auto-implementarea propriilor dispozitive, majoritatea modelelor de radio amatori RFID sunt dedicate sistemelor de joasă frecvență.

Frecvența de funcționare a cardurilor Em-Marine este de 125 kHz. Pentru a le citi se folosesc cititoare de carduri de proximitate specializate (cititoare RFID). Interacțiunea identificatorului cu un astfel de cititor se realizează de la distanță.
Există un număr imens de opțiuni pentru execuția externă a acestor identificatori: abonamentele Em-Marine sunt realizate sub formă de carduri subțiri și groase, brățări pentru parcuri acvatice, diverse brelocuri, etichete radio pentru integrare în produsele RFID.
Pentru standardul de transponder EM4100, cardul conține 64 de biți de date, iar cardurile sunt de obicei nereinscriptibile. Pentru confortul înregistrării cardurilor, codul scris în card este duplicat prin imprimare pe o parte a cardului. Codificarea datelor transmise de transponder este codarea Manchester. În acest caz, perioadele semnalului transmis de transponder sunt multipli ai frecvenței de 125 kHz - frecvența semnalului cititorului transponder. Transponderele în sine sunt implementate fără sursă de alimentare externă (etichetă pasivă), puterea este furnizată de circuitul LC (bobină și condensator) atunci când eticheta intră în zona de acoperire a câmpului cititorului de carduri. Clockarea transponderului este realizată și de semnalul cititorului - 125KHz. Prin urmare, parametrii semnalului rezultat în codificarea Manchester sunt multipli ai semnalului de 125 kHz.

Schema de interacțiune între transponder și cititorul RFID.
Pentru o înțelegere mai completă, să luăm în considerare structura pachetului de transponder RFID EMMarine EM4100. Este dată descrierea (în engleză, preluată din adnotări) a formatului pachetului de transponder.
„…….Transponderele RFID compatibile EM4100 transportă 64 de biți de memorie Read Only. Aceasta înseamnă că informațiile pot fi citite de pe etichetă, dar nu pot fi modificate date, sau date noi scrise pe card odată ce cardul a fost programat cu datele inițiale. Formatul datelor este cel prezentat aici.
1 1 1 1 1 1 1 1 1 Biți antet de 9 biți, toți de 1"
Număr versiune pe 8 biți D00 D01 D02 D03 P0
sau ID de client.
D04 D05 D06 D07 P1
D08 D09 D10 D11 P2 Fiecare grup de 4 biți
D12 D13 D14 D15 P3 este urmat de 32 de biți de date pari
D16 D17 D18 D19 P4 bit de paritate
D20 D21 D22 D23 P5
D24 D25 D26 D27 P6
D28 D29 D30 D31 P7
D32 D33 D34 D35 P8
D36 D37 D38 D39 P9
4 coloane Biți de paritate PC0 PC1 PC2 PC3 S0 1 bit de oprire (0)
Primii 9 biți sunt 1 logic.
În consecință, avem 9 biți de început ai pachetului (întotdeauna 1 logic), 11 grupuri de 4 biți de date cu 1 bit de paritate pe rând, 4 biți de paritate în coloanele de la sfârșitul pachetului, bitul final (întotdeauna 0) .
De exemplu, să luăm un transponder cu numărul de date 06001259E3.
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 00
0 6 0 0 1 2 5 9 E 3

Octetul de date 0x06 este considerat numărul versiunii. Pe cardurile EM-Marine pe care le-am întâlnit, sunt ștampilate valorile zecimale corespunzătoare ultimilor 3 octeți ai pachetului. În orice caz, va trebui să reproducem toți cei 64 de biți ai pachetului conform acestei descrieri pentru implementare.
Acum să aruncăm o privire mai atentă la descrierea modulării datelor transponder. Date preluate din adnotarea AN680. În figură, am făcut semne cu roșu în raport cu diagramele care ne interesează.

Acum să descriem diagramele de care avem nevoie mai detaliat. Semnalul de ceas CLK este semnalul cititorului RFID, așa cum am menționat mai devreme. Datele codificate NRZ trebuie pregătite de transponder conform pachetelor de date înregistrate (64 de biți). Se poate observa că implementarea codificării NRZ pentru pachetul de transponder este elementară și necesită resurse minime. De fapt, analizăm pachetul într-un flux de biți și modificăm valorile logice ale semnalului cu 0 și 1 în date și asta este tot. Pentru a obține semnalul rezultat, XOR programatic starea curentă a semnalului în format NRZ și CLK a semnalului de ceas al cititorului. Ca rezultat, obținem codificarea Manchester a semnalului rezultat. Nu voi descrie codificarea mai detaliat despre Manchester - datele pot fi găsite în adnotări separate. Pentru mai mult descriere detaliata metode de modulare, vezi datele din „Metode de modulare H.R. Walker Data Systems 05/01/04(revizuit 4/18/10)”, am studiat exact aceste exemple. Principalul lucru este că cu cost minim resurse, putem astfel implementa un transponder în format EM-Marine. De exemplu, puteți lua controlerul AVR din seria tiny45 (o puteți face și pe tiny13). A fost testat pe controlerul tiny45 pentru că era tocmai așa de disponibil pentru experimente.
Acum să prezentăm schema bloc a transponderului pe baza modelului din Proteus pentru controlerul tiny45.

Schema funcțională a transponderului în Proteus.

Așa arată semnalul generat de transponder. Roșu marchează începutul pachetului.
Diagrama arată că pinul controlerului T0 (PORTB.2) este folosit pentru a furniza un semnal de ceas pentru temporizatorul de 8 biți TIMER0. Programul implementează o întrerupere coincidență pe cronometrul TIMER0 (TIM0_COMPA). Orarul este setat de la semnal extern pentru acest cronometru. Pentru noi, semnalul de ceas este de 125KHz de la cititorul de carduri. Tot ceea ce are legătură cu alimentarea cu energie a controlerului și circuitele de temporizare de la cititor a fost eliminat din diagramă. LA schema reala controlerul în sine este tactat de la un cuarț de 4 MHz instalat între picioarele 2 și 3 ale controlerului. Puteți adăuga, de asemenea, condensatoare de bypass de cuarț de 22 pF pe aceste picioare de controler.
Setările de simulare Proteus pentru controler sunt specificate după cum urmează:

La programarea controlerului tiny45, siguranțele (biții de configurare) sunt setate în același mod ca în figura 2. Pentru tactarea controlerului se folosește cuarț de 4 MHz.
În ceea ce privește implementarea schemei de legare a controlorului extern, să luăm în considerare această problemă mai detaliat. De exemplu, au fost luate materialele RFID Handbook (E2E_chapter03-rfid-handbook), care descriu principiile fundamentale ale construirii sistemelor RFID. Documentul în sine este atașat articolului. Luați în considerare un exemplu de circuit cu transponder pasiv (parte a circuitului de la pagina 46). Pentru înțelegere, am făcut notițe pe diagramă cu roșu.
Se poate observa că avem un circuit de recepție pe L1C1, care servește la alimentarea circuitului transponder și a ceasului. Tot ceea ce privește contra-divizorul IC1 (4024), elementele logice IC3 (7400) pot fi aruncate în siguranță - nu avem nevoie de el. Divizorul pentru cronometru este implementat de setările temporizatorului fără divizoare externe - contoare, partea logică este implementată și în software. Cu toate acestea, acest exemplu permite o înțelegere mai completă a lucrării circuit pasiv transponder. Distanța maximă citirile transponderului acest format are 200 cm. În realitate, majoritatea circuitelor funcționează la distanțe de 2-10 cm. Parametrii circuitului de capacitate și inductanță LC sunt selectați cât mai precis posibil la frecvența de rezonanță de 125KHz. De exemplu, un circuit cu o capacitate de 1nF și o bobină de 60 de spire pe un dorn cu un diametru de 50 mm a fost utilizat cu un fir PEV 0,2. calculati conturul dorit posibil în program special(puteți calcula conturul pentru o bobină dreptunghiulară, imprimată etc.). Principalul lucru este să alegeți valorile exacte pentru o frecvență de 125 kHz, altfel distanța de citire și sensibilitatea circuitului se vor deteriora semnificativ. Cu circuite prost configurate, va funcționa numai atunci când bobina transponderului este adusă aproape de cititor. Dispozitivul funcționează pe principiul Full Duplex (FDX) - generarea datelor transponderului este continuă atunci când circuitul este alimentat. Circuitul este tactat de la cititor și datele sunt transmise continuu. Unele scheme de transponder utilizează schema de funcționare HDX (Half Duplex) - cititorul emite în modul pulsat, transponderul transmite date în intervalele de date ale impulsurilor de încărcare de la cititor. Acest lucru se aplică, de exemplu, transponderelor TIRIS de la Texas Instruments.

Schema transponderului pasiv bazată pe schema manualului RFID.


Luând în considerare acea parte a circuitului de care nu avem nevoie pe baza circuitului original, obținem circuitul de legare a controlerului în această formă.



Cum îți place acest articol?

După câțiva ani de muncă pe teme RFID și dezvoltarea diverșilor cititori pentru modele de transponder de standarde populare precum Mifare, EMMARINE, TIRIS... Am început adesea să fiu nedumerit de această întrebare - literalmente în ultimul an, diferite tipuri de emulatori pentru etichetele de protocoale populare și diverse copiatoare de chei/trinket au câștigat o mare popularitate.

Având în vedere numărul mare de microcircuite speciale ale protocoalelor RFID populare și cititoare ieftine disponibile pentru vânzare, utilizarea pe scară largă a echipamentelor precum osciloscoape digitale, sniffer și analizoare de spectru, această problemă a devenit mai relevantă pentru mulți dezvoltatori. Atunci am decis să fac un protocol de schimb pentru unul dintre proiecte care diferă de standardele descrise mai sus.

Desigur, această idee nu se rezolvă probleme globale Securitate sistem nouși poate fi analizat de alți dezvoltatori cu disponibilitatea echipamentelor, dar concluzia este că toate acestea nu coincid cu standardele existente și tot hardware-ul copiatoarelor nu vă va permite să copiați și să recreați rapid un astfel de algoritm. Desigur sistem similar nu sunt prezentate aici solutie completa probleme de securitate, ci ca o experiență de adaptare a RFID la un sistem închis. un plus bun pe problema securității, printre alte sisteme wireless similare se află însăși tehnologia RFID de joasă frecvență - nu permite citirea etichetelor la distanță mare.

Etichetele pasive au o putere destul de scăzută și au nevoie de un generator de cititor suficient de puternic pentru alimentarea lor, caracteristicile de propagare a undelor radio la aceste frecvențe limitează și funcționarea acestui sistem. Gama reală de citire a transponderelor depășește rar 20 cm pentru standardele de 125 KHz precum EmMarine, să zicem standardul EM4001, pentru alte protocoale precum Mifare (13,56 MHz) poate fi mai lung (1,5 metri pentru iso15693). Este posibil să se realizeze o distanță de citire mai mare pentru cititoarele de joasă frecvență prin creșterea dimensiunii bobinei și respectiv a tensiunii de alimentare și a puterii cititorului. Cu toate acestea, astfel de sisteme sunt voluminoase și, în general, greu de făcut portabile. De regulă, astfel de sisteme sunt implementate numai staționare - de exemplu, pentru mașini.

Deci, acum, de fapt, despre arhitectura sistemului nostru RFID. Pentru experimente s-a ales controlerul atmel atmega8. În scopul fabricării transponderului, aceasta pare a fi o exagerare incontestabilă. Cu toate acestea, în acest caz, sarcina principală de a dezvolta o nouă interfață pe o placă de depanare c atmega gata făcută a fost rezolvată, urmată de portarea acestui cod la controlere de tip tiny13 mai ieftine. Pentru transponder, algoritmul de operare a fost construit pe baza modului de generare PWM folosind temporizatorul T1 în modul CTC cu întrerupere și resetare prin coincidență cu OCR1. Datele de transmisie cu transponder sunt citite din EEPROM atunci când controlerul este pornit. În total, transponderul transmite 10 octeți. Conținutul EEPROM-ului transponderului poate fi văzut pe figura 1. Primul octet 0xE7 este un antet de pachet obligatoriu, deoarece prezența acestuia este verificată mai întâi atunci când pachetul este analizat de către cititor.

Primii 8 octeți sunt conținutul pachetului de transponder, ultimii 2 octeți conțin suma de control CRC16 a primilor opt octeți ai pachetului. De exemplu, în transponderul nostru, au fost înregistrate următoarele date - un pachet 0xE7, 0x05, 0xE8, 0x93, 0x43, 0x7F, 0x20, 0xFF și, în consecință, suma de control 0xF5 0xA8. Pentru a vă crea propriul transponder unic, pe lângă primul octet 0xE7, trebuie să scrieți următorii șapte octeți în EEPROM și apoi să calculați suma de control pentru primii opt octeți. După aceea, scrieți doi octeți CRC16 în EEPROM la sfârșitul pachetului. Primul octet este lăsat neschimbat - 0xE7. Când transponderul este pornit, datele acestor octeți sunt împărțite în biți și codificate cu lungimea impulsului corespunzătoare, în conformitate cu valoarea registrului OCR. Pentru transmisie se folosesc 2 frecvențe 2KHz și 5KHz pentru transmiterea logicii „0” și „1”. În plus, datele sunt separate prin impulsuri de sincronizare - semne de început de pachet.

Fig.1 Conținutul pachetului cu transponder.


Fig.2 Dump de transmisie a transponderului pe ecranul osciloscopului virtual.

Diagrama transponderului poate fi văzută pe figura 3. Frecvența oscilatorului principal este de 8 MHz. Alimentare controler +5V. Puteți folosi controlerul mega8 marcat „L”, apoi puterea poate fi furnizată de la o baterie cu litiu de 3v (parametrii unui astfel de cip sunt +2,7 .... +3,5). În locul acestui tranzistor, puteți utiliza orice alt tranzistor NPN de putere redusă. Bobina transponder a fost înfășurată pe un dorn cu diametrul de 50 mm cu un fir de 0,22 mm și are 50 de spire. Pe acest moment transponderul este activat - cu alimentare externă. În următoarea etapă, se plănuiește să se realizeze o versiune pasivă a transponderului, care este destul de simplă - faceți o decuplare pentru putere de la această bobină, adăugați diode de punte redresoare și un stabilizator.


Fig.3 Schema transponderului.

Acum să vorbim despre circuitul cititorului pentru acest transponder. Schema a fost adaptată pe baza cititorului de carduri EMMARINE utilizat anterior. O parte a circuitului cu un generator pe 74hc4060 poate fi ștearsă în siguranță în această etapă, deoarece deocamdată folosim o etichetă activă. Cu toate acestea, vom avea nevoie de această parte a circuitului în viitor, când facem o etichetă pasivă și trebuie să obținem putere de la cititor. În caz contrar, circuitul nu diferă semnificativ de circuitul cititor pentru EMMARINE: detector de vârf pasiv - filtru - amplificator - comparator. Circuitul este cât se poate de simplu și vă permite să citiți datele transponderului la o distanță de 10-12 cm cu contururi bine reglate.

Puteți simplifica și mai mult circuitul, lăsând doar detectorul și filtrul, puneți la ieșire un tranzistor care va juca rolul unui comparator, dar nu am făcut asta. La ieșire, obținem un semnal binar dreptunghiular în conformitate cu duratele codificate ale impulsurilor transmise de transponder. Abaterile permise ale valorilor elementului la care circuitul este operabil este de 5-10%. Alimentare pentru controler și opamp + 5V. Frecvența oscilatorului principal al controlerului este de 12 MHz. Ieșirea comparatorului de pe LM358 este conectată la pinul de întrerupere extern al controlerului INT0. Programul controlerului este configurat să apeleze o întrerupere pe un front ascendent pe pinul de întrerupere extern INT0. În manipulatorul de întreruperi, acesta verifică impulsurile de ceas și apoi verifică antetul pachetului și scrie conținutul în buffer-ul controlerului. Datele pachetelor citite sunt transmise prin interfața RS232 către computer. Pentru a configura terminalul, specificați următorii parametri: viteză 57,6 Kb/s, 8 biți de date, 1 bit de oprire, fără paritate.

La primirea unui pachet, controlerul calculează suma de control a octeților primiți și trimite datele către terminal (pachet și CRC). Dacă sumele de control calculate de controler și cele primite în pachet se potrivesc, un semnal este transmis către pinul PORTB.0 (14) al controlerului (LED1 în diagramă). Puteți conecta un tweeter cu un generator încorporat sau un LED printr-o rezistență până în acest punct. Când citește cheia corectă, controlerul dezactivează întreruperile externe și face o întârziere de 1 s înainte de următoarea citire. Există, de asemenea, un mod de funcționare al acestui cititor ca bază a unei încuietori RFID. Pentru a face acest lucru, este necesar să scrieți octeții completi ai transponderului în EEPROM-ul controlerului cititorului - 10 octeți. Datele sunt scrise în EEPROM-ul cititorului în același mod ca și în EEPROM-ul transponderului. În acest caz, la citirea următorului transponder și potrivirea acestuia cu cel scris în EEPROM-ul cititorului, se iese un semnal către pinul PORTB.1 (15) al controlerului (LED2 din diagramă). În acest moment, puteți conecta LED-ul prin rezistența sau cheia de ieșire (tranzistor) de pe releu dispozitiv executiv. Acum avem un lacăt RFID pentru o anumită cheie și un cititor obișnuit într-un singur pachet.


Fig.4 Circuit cititor Etichete RFID. (măriți diagrama)

Deci, să rezumam rezultatele intermediare. Ne-am creat propriul cititor și transponder pentru acest cititor. Ne-am protejat echipamentele de dispozitivele străine care lucrează cu protocoale RFID populare. Următorul pas este să facem o etichetă pasivă pentru cititorul nostru, așa cum fac producătorii cunoscuți de transpondere industriale, și să porți codul echipamentului la modele de controler mai ieftine. În arhivă, atașez articolului firmware pentru transponder și cititor.

Descărcați firmware:
Nu aveți acces pentru a descărca fișiere de pe serverul nostru

După câțiva ani de muncă pe teme RFID și dezvoltarea diverșilor cititori pentru modele de transponder de standarde populare precum Mifare, EMMARINE, TIRIS... Am început adesea să fiu nedumerit de această întrebare - tocmai în ultimul an, diferite tipuri de emulatori pentru etichetele de protocoale populare și diverse copiatoare de chei/trinket au câștigat o mare popularitate.

Având în vedere numărul mare de microcircuite speciale ale protocoalelor RFID populare și cititoare ieftine disponibile pentru vânzare, utilizarea pe scară largă a echipamentelor precum osciloscoape digitale, sniffer și analizoare de spectru, această problemă a devenit mai relevantă pentru mulți dezvoltatori. Atunci am decis să fac un protocol de schimb pentru unul dintre proiecte care diferă de standardele descrise mai sus.

Desigur, această idee nu rezolvă problemele globale de securitate ale noului sistem și poate fi analizată de alți dezvoltatori cu disponibilitatea echipamentelor, dar concluzia este că toate acestea nu coincid cu standardele existente și tot hardware-ul copiatoarelor va nu vă permite să copiați și să recreați rapid un astfel de algoritm. Desigur, un astfel de sistem nu este prezentat aici nu ca o soluție completă la problemele de securitate, ci ca o experiență în adaptarea RFID la un sistem închis. Un avantaj bun în ceea ce privește securitatea printre alte sisteme wireless similare este tehnologia RFID de joasă frecvență în sine - nu permite citirea etichetelor la distanță mare. Etichetele pasive au o putere destul de scăzută și au nevoie de un generator de cititor suficient de puternic pentru alimentarea lor, caracteristicile de propagare a undelor radio la aceste frecvențe limitează și funcționarea acestui sistem. Gama reală de citire a transponderelor depășește rar 20 cm pentru standardele de 125 KHz precum EmMarine, să zicem standardul EM4001, pentru alte protocoale precum Mifare (13,56 MHz) poate fi mai lung (1,5 metri pentru iso15693). Este posibil să se realizeze o distanță de citire mai mare pentru cititoarele de joasă frecvență prin creșterea dimensiunii bobinei și respectiv a tensiunii de alimentare și a puterii cititorului. Cu toate acestea, astfel de sisteme sunt voluminoase și, în general, greu de făcut portabile. De regulă, astfel de sisteme sunt implementate numai staționare - să zicem pentru mașini.

Deci, acum, de fapt, despre arhitectura sistemului nostru RFID. Pentru experimente s-a ales controlerul atmel atmega8. În scopul fabricării transponderului, aceasta pare a fi o exagerare incontestabilă. Cu toate acestea, în acest caz, sarcina principală de a dezvolta o nouă interfață pe o placă de depanare c atmega gata făcută a fost rezolvată, urmată de portarea acestui cod la controlere de tip tiny13 mai ieftine.

Pentru transponder, algoritmul de operare a fost construit pe baza modului de generare PWM folosind temporizatorul T1 în modul CTC cu întrerupere și resetare prin coincidență cu OCR1. Datele de transmisie cu transponder sunt citite din EEPROM atunci când controlerul este pornit. În total, transponderul transmite 10 octeți. Conținutul EEPROM-ului transponderului poate fi văzut pe figura 1. Primul octet 0xE7 este un antet de pachet obligatoriu, deoarece prezența acestuia este verificată mai întâi atunci când pachetul este analizat de către cititor. Primii 8 octeți sunt conținutul pachetului de transponder, ultimii 2 octeți conțin suma de control CRC16 a primilor opt octeți ai pachetului. De exemplu, în transponderul nostru, au fost înregistrate următoarele date - un pachet 0xE7,0x05,0xE8,0x93,0x43,0x7F,0x20,0xFF și, în consecință, o sumă de control 0xF5 0xA8. Pentru a vă crea propriul transponder unic, pe lângă primul octet 0xE7, trebuie să scrieți următorii șapte octeți în EEPROM și apoi să calculați suma de control pentru primii opt octeți. După aceea, scrieți doi octeți CRC16 în EEPROM la sfârșitul pachetului. Primul octet este lăsat neschimbat - 0xE7. Când transponderul este pornit, datele acestor octeți sunt împărțite în biți și codificate cu lungimea impulsului corespunzătoare, în conformitate cu valoarea registrului OCR. Pentru transmisie se folosesc 2 frecvențe 2KHz și 5KHz pentru transmiterea logicii „0” și „1”. În plus, datele sunt separate prin impulsuri de sincronizare - semne de început de pachet.

Fig.1

Fig.2

Diagrama transponderului poate fi văzută pe Figura 3. Frecvența oscilatorului principal este de 8 MHz. Alimentare controler +5V. Puteți folosi controlerul mega8 marcat „L”, apoi puterea poate fi furnizată de la o baterie cu litiu de 3v (parametrii unui astfel de cip sunt +2,7 .... +3,5). În locul acestui tranzistor, puteți utiliza orice alt tranzistor NPN de putere redusă. Bobina transponder a fost înfășurată pe un dorn cu diametrul de 50 mm cu un fir de 0,22 mm și are 50 de spire. În acest moment, transponderul este activat - cu putere externă. În următoarea etapă, se plănuiește să se realizeze o versiune pasivă a transponderului, care este destul de simplă - faceți o decuplare pentru putere de la această bobină, adăugați diode de punte redresoare și un stabilizator.

Fig.3

Acum să vorbim despre circuitul cititorului pentru acest transponder. Schema a fost adaptată pe baza cititorului de carduri EMMARINE utilizat anterior. O parte a circuitului cu un generator pe 74hc4060 poate fi ștearsă în siguranță în această etapă, deoarece deocamdată folosim o etichetă activă.

Cu toate acestea, vom avea nevoie de această parte a circuitului în viitor, când facem o etichetă pasivă și trebuie să obținem putere de la cititor. În caz contrar, circuitul nu are diferențe semnificative față de circuitul cititor pentru EMMARINE: detector de vârf pasiv - filtru - amplificator - comparator. Circuitul este cât se poate de simplu și vă permite să citiți datele transponderului la o distanță de 10-12 cm cu contururi bine reglate.

Puteți simplifica și mai mult circuitul, lăsând doar detectorul și filtrul, puneți la ieșire un tranzistor care va juca rolul unui comparator, dar nu am făcut asta. La ieșire, obținem un semnal binar dreptunghiular în conformitate cu duratele codificate ale impulsurilor transmise de transponder. Abaterile permise ale valorilor elementului la care circuitul este operabil este de 5-10%. Alimentare pentru controler și opamp + 5V. Frecvența oscilatorului principal al controlerului este de 12 MHz. Ieșirea comparatorului de pe LM358 este conectată la pinul de întrerupere extern al controlerului INT0. Programul controlerului este configurat să apeleze o întrerupere pe un front ascendent pe pinul de întrerupere extern INT0.

În manipulatorul de întreruperi, ceasul este verificat și apoi este verificat antetul pachetului și conținutul este scris în buffer-ul controlerului. Datele pachetelor citite sunt transmise prin interfața RS232 către computer. Pentru a configura terminalul, specificați următorii parametri: viteză 57,6 Kb/s, 8 biți de date, 1 bit de oprire, fără paritate. La primirea unui pachet, controlerul calculează suma de control a octeților primiți și trimite datele către terminal (pachet și CRC). Dacă sumele de control calculate de controler și cele primite în pachet se potrivesc, un semnal este transmis către pinul PORTB.0 (14) al controlerului (LED1 în diagramă). Puteți conecta un tweeter cu un generator încorporat sau un LED printr-o rezistență până în acest punct. Când citește cheia corectă, controlerul dezactivează întreruperile externe și face o întârziere de 1 s înainte de următoarea citire.

Există, de asemenea, un mod de funcționare al acestui cititor ca bază a unei încuietori RFID. Pentru a face acest lucru, este necesar să scrieți octeții completi ai transponderului în EEPROM-ul controlerului cititorului - 10 octeți. Datele sunt scrise în EEPROM-ul cititorului în același mod ca și în EEPROM-ul transponderului. În acest caz, la citirea următorului transponder și potrivirea acestuia cu cel scris în EEPROM-ul cititorului, se iese un semnal către pinul PORTB.1 (15) al controlerului (LED2 din diagramă). În acest moment, puteți conecta LED-ul prin rezistența sau cheia de ieșire (tranzistor) de pe releul actuatorului. Acum avem un lacăt RFID pentru o anumită cheie și un cititor obișnuit într-un singur pachet.

Deci, să rezumam rezultatele intermediare. Ne-am creat propriul cititor și transponder pentru acest cititor. Ne-am protejat echipamentele de dispozitivele străine care lucrează cu protocoale RFID populare. Următorul pas este să facem o etichetă pasivă pentru cititorul nostru, așa cum fac producătorii cunoscuți de transpondere industriale, și să porți codul echipamentului la modele de controler mai ieftine. În arhivă, atașez articolului firmware pentru transponder și cititor.