Sadržaj:

Osnove RFID -a RC522 i PN532: 10 koraka
Osnove RFID -a RC522 i PN532: 10 koraka

Video: Osnove RFID -a RC522 i PN532: 10 koraka

Video: Osnove RFID -a RC522 i PN532: 10 koraka
Video: Знакомство с RFID и подключение модуля RC522 к Arduino 2024, Srpanj
Anonim
Osnove RFID -a RC522 i PN532
Osnove RFID -a RC522 i PN532

NAPOMENA: Sada imam instruktore koji nude Arduino kôd za RC522 i PN532.

Prije nekog vremena kupio sam tri različita RFID modula za eksperimentiranje. U prethodnom projektu detaljno sam opisao kako koristiti jednostavan modul od 125 kHz za obavljanje osnovne sigurnosne funkcije. Takvi moduli koriste oznake samo za čitanje pa se proces skenira za ID, pohranjuje po želji i uspoređuje sa spremljenim ID-ovima. Ostali moduli koje sam kupio rade na 13,56-MHz i koriste oznake koje se mogu čitati i pisati pa je jednostavno uzaludno koristiti ih za osnovnu sigurnost. Dva zajednička modula koriste ili čip RC522 ili čip PN532 - oba proizvođača NXP.

Ako ste čitali neki od mojih drugih projekata, znate da volim koristiti jeftine PIC mikrokontrolere i programirati na asemblerskom jeziku. Ono što sam tražio bio je slijed koraka potrebnih za razgovor s modulima i RFID oznakama. Iako postoji mnogo primjera programa na mreži za module, većina ih je napisana u softveru "C" za Arduino i koristi SPI sučelje. Također, priručnici za čipove i oznake Mifare zahtijevaju malo dešifriranja. Ovaj post prvenstveno govori o informacijama koje bih volio imati na početku projekta. Uključujem i softverske programe za montažu PIC -a za izvođenje osnovnih naredbi koje zahtijeva svaki modul. Čak i ako ne koristite PIC i/ili montažni jezik, izvorni kôd trebao bi vam barem dati dobru ideju o posebnim naredbama potrebnim za izvođenje svakog koraka.

Korak 1: Serijska sučelja

Serijska sučelja
Serijska sučelja
Serijska sučelja
Serijska sučelja
Serijska sučelja
Serijska sučelja
Serijska sučelja
Serijska sučelja

Oba čipa koja se koriste na ovim modulima mogu se spojiti putem SPI, I2C ili UART (HSSP). PN532 modul ima DIP prekidač koji se koristi za odabir željenog sučelja, ali je modul MFRC522 ožičen za SPI sučelje. Radije koristim ugrađeni UART PIC-a, pa sam lovio na internetu da vidim postoji li način da se modul MFRC522 prebaci u UART način rada. Ono što sam otkrio je da bi izrezivanje jednog traga na ploči uspjelo. Rez učinkovito uklanja 3,3 volta s EA pina čipa. Tehnički, EA pin bi tada trebao biti spojen na masu, ali malo ljudi može izvesti taj postupak lemljenja s obzirom na gustoću pina čipa. Ne brinite, međutim, jer EA pin nema unutarnje povlačenje i ne "pluta" kao stari TTL logički ulazi. Pogledajte dijagram čipova i sliku odjeljka ploče za mjesto rezanja. Pazite da presiječete samo kratki trag koji ide izravno na pin EA.

Korak 2: Hardver

Hardver
Hardver

Hardverske veze za UART komunikacije prikazane su na gornjem dijagramu. UART veze za MFRC522 nisu označene na ploči, ali, kao što je prikazano na shemi, SDA pin prima UART podatke, a MISO pin prenosi UART podatke. PN532 modul ima UART oznake na donjoj strani ploče.

Oba modula rade na 3,3 V, a logičku razinu od 5 V s PIC TX pina također treba ograničiti. LCD veza standardna je 4-bitna postavka koja se koristila u brojnim mojim prethodnim projektima. Zadani format za sve poruke postavljen je za standardni 1602 LCD (16 znakova u 2 retka). Također imam LCD s 40 znakova po 2 retka koji koristim za ispis neobrađenih podataka tijekom ispravljanja pogrešaka pa sam u softver uključio definiciju koja mi omogućuje da iskoristim dodatni prostor na zaslonu.

Korak 3: Blokovi podataka

Oznake Mifare Classic 1k koje se koriste za ovaj projekt konfigurirane su kao 16 sektora, četiri podatkovna bloka po sektoru, 16 bajtova po podatkovnom bloku. Od 64 bloka podataka, samo 47 je zapravo upotrebljivo. Podatkovni blok 0 sadrži podatke proizvođača, a blokovi 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59 i 63 nazivaju se Prikolični blokovi. Blokovi prikolice posljednji su u svakom sektoru i sadrže dva ključa i bitove za pristup bloku. Ključevi i bitovi za pristup bloku primjenjuju se samo na podatkovne blokove u tom sektoru pa možete imati različite ključeve i pravila pristupa za svaki sektor. Zadane tipke postavljene su na "FF FF FF FF FFh". Za ovaj osnovni projekt koristim samo jedan podatkovni blok i zadržavam zadane ključeve i pristupne bitove. Postoji mnogo dokumenata vezanih uz ove kartice pa samo pretražite "Mifare" na mreži ili posjetite web stranicu NXP ako ih želite detaljnije istražiti.

Korak 4: Opći rad

Iako su oba modula jedinstvena po načinu pristupa i načinu pristupa oznakama, postoji opći proces koji je potreban da bi se posao obavio. Za ovaj projekt pretpostavljamo da su oznake tipa Mifare Classic 1k te da dopuštamo samo jednu oznaku odjednom u polju antene. Osnovni koraci definirani su u nastavku.

· Inicijalizacija modula: Općenito, za to su potrebne stvari kao što su upisivanje vrijednosti u registre u čipu, slanje naredbi za buđenje i uključivanje napajanja antene. U aplikaciji koja radi na baterije htjeli biste moći uključiti i isključiti antenu kako biste uštedjeli bateriju, ali za ovu jednostavnu aplikaciju uključimo je jednom i ostavimo.

· Obriši kripto zastavicu (samo 522): Kada je oznaka potvrđena, postavlja se zastavica koja daje korisniku do znanja da će komunikacija s oznakom biti šifrirana. Ovu zastavicu korisnik mora izbrisati prije sljedećeg skeniranja, čak i ako je oznaka koja se skenira ista.

· Skeniraj oznaku: Modul u osnovi pita "Ima li nekoga vani?" a oznaka odgovara "Ovdje sam". Ako modul ne dobije brzi odgovor, prestaje slušati. To znači da moramo više puta slati naredbe za skeniranje modulu sve dok ne pronađe oznaku.

· Nabavite oznaku Korisnički identifikacijski broj (UID): Oznaka će na zahtjev za skeniranje odgovoriti nekim ograničenim podacima, poput vrste oznake. To znači da ćemo možda morati poslati drugu naredbu da bismo dobili njezin UID. UID je četiri bajta za oznake Mifare Classic 1k. Možda je dulje za druge oznake, ali ovaj projekt ih ne rješava.

· Odabir oznake (samo 522): UID se koristi za odabir oznake koju korisnik želi provjeriti za čitanje i pisanje. To se temelji na mogućnosti da u polju antene može postojati više oznaka. To ne vrijedi za našu jednostavnu aplikaciju, ali svejedno moramo odabrati oznaku.

· Ovjerite oznaku: Ovaj korak je potreban ako želimo čitati ili pisati oznaku. Ako sve što želimo učiniti je razlikovati oznake za jednostavnu sigurnosnu aplikaciju, tada je UID dovoljan. Autentifikacija zahtijeva da poznajemo UID i da znamo kripto ključ za podatkovni sektor oznake kojoj želimo pristupiti. Za ovaj projekt držimo se zadanih ključeva, ali moj sljedeći projekt mijenja ključeve tako da se oznaka može koristiti kao elektronički novčanik.

· Pročitajte ili upišite oznaku: Očitavanja uvijek vraćaju svih 16 bajtova traženog podatkovnog bloka. Zapisi zahtijevaju da se svih 16 bajtova ispiše u isto vrijeme. Ako želite čitati ili pisati drugi blok u istom podatkovnom sektoru, oznaku nije potrebno ponovno provjeravati. Ako želite čitati ili pisati blok u drugom podatkovnom sektoru, tada je potrebno ponovno potvrditi oznaku pomoću ključa za taj sektor.

Korak 5: MFRC522 pristup modula

Rutina pokretanja uključuje ove osnovne korake koji se nalaze u većini aplikacija koje sam pogledao:

· Slanje lažnih bajtova podataka (vidi sljedeći odlomak)

· Soft reset

· Postavite pojačanje RF prijemnika (ako želite nešto drugo osim zadanog)

· Postavite postotak modulacije ASK na 100%

· Postavite vrijednost sjemena za proračune CRC -a

· Uključite antenu

· Preuzmite verziju firmvera (nije potrebno)

Iz nekog neobjašnjivog razloga moj se modul uključuje i misli da je primio naredbu za pisanje bez bajta podataka. Ne znam je li to samo problem s mojim modulom, ali nigdje drugdje nisam vidio reference na njega. Eksperimentirao sam s resetiranjem hardvera i softvera i niti jedno nije riješilo problem. Moje je rješenje bilo dodavanje lažnog poziva za čitanje za registraciju “0” (nedefinirano) na početku rutine inicijalizacije modula. Ako modul ovo vidi kao podatke za nepoznatu naredbu pisanja, čini se da nema štetnih učinaka. Ako to vidi kao naredbu za čitanje, ništa se korisno ne događa. Smeta mi što ne mogu u potpunosti definirati problem, pogotovo s obzirom na to da hardversko resetiranje samo modula ne rješava problem.

Čip RC522 sastoji se od niza registara, od kojih se većina čita i zapisuje. Kako bi se izvršilo upisivanje, broj registra šalje se modulu, a zatim vrijednost za upisivanje. Za čitanje registrskom broju dodaje se 0x80 koji se šalje modulu. Odgovor na naredbu za pisanje je odjek registara kojem se pristupa. Odgovor na naredbu za čitanje je sadržaj registra. Softver koristi to znanje za provjeru je li naredba pravilno izvedena.

Korak 6: PN532 pristup modula

Rutina pokretanja uključuje sljedeće potrebne korake:

· Slanje inicijalizacijskog niza: Ovo je specifično za UART sučelje. U priručniku se navodi da će se UART sučelje probuditi na petom rastućem rubu otkrivenom na sučelju. Preporučuje slanje 0x55, 0x55, 0x00, 0x00, 0x00, 0x00. Uglavnom samo treba postojati dovoljan broj znakova s rastućim rubovima i oni ne smiju izgledati kao preambula naredbe (00 00 FF).

· Probudite modul: Ukopan u korisničkom priručniku pokazuje da se modul inicijalizira u svojevrsno stanje mirovanja koje se naziva “LowVbat”. Za izlaz iz ovog stanja moramo poslati naredbu “SAMConfiguration”.

PN532 očekuje da se naredbe šalju u definiranom formatu poruke koji uključuje preambulu, poruku i poštapalicu. Poruke odgovora imaju isti format. Poruke naredbe i odgovora uključuju TFI (Frame Identifier) i naredbenu verziju. Naredba koristi TFI od 0xD4, a odgovor koristi 0xD5. Verzije naredbi variraju, ali odgovor će uvijek povećati verziju naredbe i vratiti je u bajtu koji slijedi TFI. Ta dosljednost omogućuje lako skeniranje poruka odgovora radi dobivanja relevantnih informacija.

Svaka naredbena poruka (koja slijedi preambulu) sastoji se od duljine poruke, 2 komplementa duljine poruke, TFI -a, naredbe, podataka, kontrolnog zbroja i poštapalice. Softver izrađuje pojedinačne naredbe, a zatim poziva rutinu koja izračunava kontrolni zbroj i dodaje poštapalicu.

Format poruke za odgovor sličan je formatu naredbe. Tipičan odgovor će uključivati ACK (00 00 FF 00 FF 00) nakon kojeg slijedi specifičan odgovor na naredbu. Svaki odgovor naredbe započinje preambulom od 00 00 FF. Odgovor bi također trebao imati TFI bajt D5 iza kojeg slijedi broj naredbe povećan za 1. Za našu naredbu “SAMConfiguration” (14) to bi bilo 15. Naredba “SAMConfiguration” dobiva ovaj odgovor: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00.

Postoje i druge naredbe specifične za module koje se mogu poslati, ali nisu potrebne za ovu aplikaciju. Ja sam, međutim, uključio rutinu koja se može pozvati za dohvaćanje broja verzije firmvera. Tipičan odgovor (nakon ACK -a i preambule) bio bi: 06 FA D5 03 32 01 06 07 E8 00. "01 06 07" označava verziju firmvera broj 1.6.7.

7. korak: Slijed pristupa oznakama

Nakon što se modul pripremi, možemo slati naredbe specifične za oznake. Za čitanje ili pisanje podataka oznaka moramo imati njihov identifikacijski broj (UID). UID i ključ će se tada koristiti za autorizaciju određenog sektora podataka oznaka za čitanje/pisanje. Čitanje/pisanje podataka oznaka uvijek se vrši na svih 16 bajtova u navedenom bloku podataka. To znači da će tipična aplikacija čitati podatkovni blok, mijenjati podatke po želji, a zatim upisivati nove podatke natrag u oznaku.

Korak 8: Softver

Softver za rukovanje prekidima poziva se svaki put kada PIC UART primi bajt podataka. U nekim od mojih prethodnih UART projekata mogao sam samo anketirati zastavu RX prekida umjesto da sam morao koristiti rukovatelj prekidima. To nije slučaj s ovim softverom, posebno s PN532 koji komunicira mnogo većom brzinom prijenosa od RC522. UART sučelje RC522 ograničeno je na 9600 bauda, dok je zadana vrijednost za PN532 115k i može se postaviti do 1.288M bauda. Primljeni bajtovi pohranjeni su u međuspremniku, a glavni dio softvera ih po potrebi dohvaća.

Zastavica New_Msg označava da su primljeni bajtovi, a Byte_Count pokazuje koliko. Uključio sam rutinu "Disp_Buff" u softver koji se može pozvati za prikaz sadržaja međuspremnika za primanje tijekom ispravljanja pogrešaka. Neke od povratnih poruka preplavit će tipični zaslon veličine 1602, ali ja imam LCD s 40 znakova po 2 retka koji sam pronašao na internetskoj web stranici s elektronikom. Definiranje “Max_Line” može se postaviti za veličinu vašeg LCD -a. Ako se postigne “Max_Line”, rutina “Disp_Buff” nastavlja se pisanjem u drugi redak. U tu rutinu možete dodati mali kôd za nastavak na retke tri i četiri ako imate LCD s 4 retka. Za PN532 postoji zastavica koja se može postaviti tako da rutina ili izbaci sve primljene bajtove ili samo izbaci 16 bajtova podataka iz odgovora čitanja.

Nema potrebe za brisanjem međuspremnika za primanje ili Byte_Count jer će brisanje zastavice New_Msg uzrokovati brisanje Byte_Count od strane rukovatelja prekida, a to se koristi kao indeks u međuspremniku. New_Msg obično se briše prije svakog koraka naredbe tako da se rezultati specifični za tu naredbu mogu lako pronaći i provjeriti. U RC522 to znači da međuspremnik za primanje obično ima samo 1 do 4 bajta. U nekim slučajevima, poput čitanja bloka podataka, naredba Read_FIFO mora se izdati više puta kako bi se bajtovi premjestili iz FIFO -a u međuspremnik za primanje. Svi rezultati naredbi za PN532 završavaju u međuspremniku za primanje pa se provodi postupak skeniranja za lociranje potrebnih bajtova.

Glavna petlja u softveru skenira oznaku, a zatim provjerava autentičnost oznake za čitanje/pisanje. Za testni softver koji je ovdje uključen, varijabla Junk_Num se mijenja svaki put kroz glavnu petlju i koristi se za vrijeme upisa u oznaku. Zapisane vrijednosti izmjenjuju se između vrijednosti Junk_Num i komplementa 1 Junk_Num. Na kraju, 16 zapisanih vrijednosti se čita i prikazuje. Postoje poruke na zaslonu za svaki korak s odloženim rutinskim pozivima kako bi se omogućilo vrijeme za čitanje svake poruke. Dobavljaju se i poruke o pogreškama, ali obično bi se trebale pojaviti samo ako se oznaka ukloni tijekom operacije.

Dio inicijalizacije softvera dio je koda koji se izvršava samo pri uključivanju i preskače ako se otkrije resetiranje softvera. Poruke o pogrešci općenito završavaju resetiranjem softvera kao izlaz iz glavne petlje. Resetiranje se događa u rutini "Tilt" koja jednostavno omogućuje mjerač vremena čuvara, a zatim ulazi u beskonačnu petlju čekajući istek vremena.

Korak 9: Jedinstveni softver MFRC522

Čip RC522 zahtijeva više uputa niske razine od čipa PN532 za ostvarivanje komunikacije s oznakama. To je nešto poput programiranja na asemblerskom jeziku naspram programiranja na "C". Druga značajna razlika je u tome što RC522 zahtijeva da se komunikacija s oznakom usmjeri putem FIFO međuspremnika. Rutine “Write_FIFO” i “Read_FIFO” rješavaju te zadatke. Softver MFRC522 uključuje odjeljak za mnoge naredbe niže razine iz kojih su izgrađene glavne funkcije.

Izračun kontrolnog zbroja naredbe oznake za RC522 vrlo je različit nego za PN532. Nakon što je naredba tag ugrađena u FIFO, šalje se naredba modula za izračun kontrolne sume. 16-bitni rezultat ne dodaje se automatski naredbi tag, ali je dostupan za čitanje iz dva 8-bitna registra. Izračun kontrolne sume briše podatke u FIFO -u pa je potreban slijed sljedeći:

· Napravite naredbu u FIFO -u

· Naredite izračun kontrolnog zbroja

· Ponovno sastavite naredbu u FIFO -u

· Pročitajte CRC registre i upišite bajtove kontrolne sume u FIFO

· Pošaljite naredbu Transceive ili Authenticate

Naredba Transceive će prenijeti FIFO međuspremnik, a zatim će se automatski prebaciti u način primanja kako bi čekala odgovor od oznake. Nakon naredbe Transceive mora biti postavljeno postavljanje StartSend bita u BitFramingRegisteru kako bi se doista prenijeli podaci. Naredba Authenticate nema taj zahtjev.

Općenito, aplikacije koda Arduino “C” dostupne na mreži koriste registre zastavica prekida i registar vremena čekanja kako bi osigurali pravovremeni prijem točnog odgovora. Po mom mišljenju, to je pretjerano za ovu aplikaciju koja nije vremenski kritična. Umjesto toga, koristim kratka programska vremena čekanja na odgovor, a zatim provjeravam je li točan. Priručnik za oznake Mifare detaljno prikazuje vrijeme za različite transakcije, a dopušteno je i vrijeme za očekivani broj primljenih bajtova. Ta su vremenska odgode ugrađena u većinu naredbi potprograma niske razine.

Korak 10: PN532 jedinstveni softver

Nakon inicijalizacije modula, koraci potrebni za pronalaženje i provjeru autentičnosti oznake postižu se pisanjem odgovarajuće naredbe nakon koje slijede potrebni podaci. Naredba scan vraća UID koji se zatim koristi za provjeru autentičnosti. Nakon toga, čitanje i pisanje oznake šalje ili vraća 16-bajt za adresirani blok podataka.

Inicijalizirani slijed bio je ranije detaljno opisan, a ista softverska rutina također šalje naredbu SAMConfiguration kako bi modul izašao iz stanja “LowVbat”. Ostatak osnovnih naredbi, poput Scan, Authenticate, Read/Write Tag, samo je izgrađen sekvencijalno u primjenjivim rutinama. Kontrolni se zbroj izračunava tako da se jednostavno zbroje naredbeni bajtovi, napravi komplement, a zatim se doda 1 kako bi se učinilo komplementom 2. 8-bitni rezultat dodaje se naredbenom nizu neposredno prije postavljanja.

Ne postoji FIFO kao u RC522 pa se potpune poruke odgovora automatski primaju. Rutina “Find_Response” skenira međuspremnik primljenih podataka za TFI (0xD5). Rutina koristi prednosti znanja o očekivanim porukama i zanemaruje jednostavne ACK odgovore koji ne uključuju podatke. Nakon što se pronađe TFI, željeni odgovori su poznati pomak od njega. Odjek naredbe i bajtovi statusa naredbe spremaju se rutinom “Read_Buff” radi kasnije provjere.

To je to za ovaj post. Pogledajte ostale moje elektroničke projekte na: www.boomerrules.wordpress.com

Preporučeni: