Sadržaj:

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

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

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

NAPOMENA: Sada imam instrukcije koje 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 uzaludno jednostavno ih koristiti za osnovnu sigurnost. Dva uobičajena 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 program na asemblerskom jeziku. Ono što sam tražio bio je niz koraka potrebnih za razgovor sa modulima i sa 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 sklopni jezik, izvorni kod 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 povezati preko 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. Više volim koristiti ugrađeni UART PIC-a, pa sam potražio na internetu da vidim postoji li način da se MFRC522 modul prebaci u UART način rada. Ono što sam otkrio je da bi rezanje jednog traga na ploči uspjelo. Rez efikasno uklanja 3,3 volta sa 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 interno povlačenje i ne „pluta“kao stari TTL logički ulazi. Pogledajte dijagram čipa i sliku sekcije ploče za mjesto koje želite izrezati. Pazite da presiječete samo kratki trag koji ide direktno na EA pin.

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čki nivo od 5 V sa PIC TX pina također treba ograničiti. LCD veza je standardna 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 reda). Takođe imam LCD od 40 karaktera po 2 reda koji koristim za deponiranje sirovih podataka tokom otklanjanja grešaka pa sam u softver uključio definiciju koja mi omogućava da iskoristim dodatni prostor na ekranu.

Korak 3: Blokovi podataka

Oznake Mifare Classic 1k koje se koriste za ovaj projekt konfigurirane su kao 16 sektora, četiri bloka podataka po sektoru, 16 bajtova po bloku podataka. Od 64 bloka podataka, samo 47 je zapravo upotrebljivo. Blok podataka 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 zovu 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 blokove podataka u tom sektoru tako da možete imati različite ključeve i pravila pristupa za svaki sektor. Zadane tipke su postavljene na "FF FF FF FF FFh". Za ovaj osnovni projekt koristim samo jedan blok podataka i zadržavam zadane ključeve i pristupne bitove. Postoji mnogo dokumenata koji se odnose na ove kartice pa samo pretražite “Mifare” na mreži ili posjetite web stranicu NXP ako ih želite detaljnije istražiti.

Korak 4: Opće operacije

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 i da dopuštamo samo jednu oznaku odjednom u polju antene. Osnovni koraci su definirani 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 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, a zatim ostavimo uključenu.

· 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 tamo?" i 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 odgovoriti na zahtjev za skeniranje s nekim ograničenim podacima, poput vrste oznake. To znači da ćemo možda morati poslati drugu naredbu da bismo dobili njen UID. UID je četiri bajta za oznake Mifare Classic 1k. Možda je duže 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 nije slučaj s našom jednostavnom aplikacijom, ali svejedno moramo odabrati oznaku.

· Potvrdite autentičnost oznake: 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 bloka podataka. Zapisi zahtijevaju da se svih 16 bajtova ispiše istovremeno. Ako želite čitati ili pisati drugi blok u istom sektoru podataka, oznaku nije potrebno ponovo provjeravati. Ako želite čitati ili pisati blok u drugom sektoru podataka, tada je potrebno ponovno provjeriti autentičnost oznake 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 pregledao:

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

· Soft reset

· Podesite 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 modul se uključuje i misli da je primio naredbu pisanja bez bajta podataka. Ne znam je li ovo samo problem s mojim modulom, ali nisam vidio nigdje reference na to. Eksperimentirao sam s resetovanjem hardvera i softvera i nijedno nije riješilo problem. Moje rješenje je 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, posebno 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. Da bi se izvršilo upisivanje, broj registra se šalje modulu, nakon čega slijedi vrijednost za upisivanje. Da bi se izvršilo čitanje, broju registra dodaje se 0x80 koji se šalje modulu. Odgovor na naredbu pisanja je odjek registra kojem se pristupa. Odgovor na naredbu za čitanje je sadržaj registra. Softver koristi to znanje da provjeri je li naredba pravilno izvršena.

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 interfejs probuditi na petoj rastućoj ivici otkrivenoj na interfejsu. 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: Zakopano u korisničkom priručniku pokazuje da se modul inicijalizira u neku vrstu stanja mirovanja zvanog “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 slijede 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 za relevantne informacije.

Svaka naredbena poruka (koja slijedi preambulu) sastoji se od dužine poruke, 2 komplementarne dužine poruke, TFI -a, naredbe, podataka, kontrolne sume i poštambule. Softver gradi pojedinačne naredbe, a zatim poziva rutinu koja izračunava kontrolni zbroj i dodaje poštansku ploču.

Format poruke za odgovor sličan je formatu naredbe. Tipičan odgovor će uključivati ACK (00 00 FF 00 FF 00) nakon čega 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. Komanda “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 preuzimanje 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.

Korak 7: Niz pristupa oznakama

Nakon što se modul pripremi, možemo poslati naredbe specifične za oznake. Da bismo mogli čitati ili pisati podatke oznaka, moramo imati njihov identifikacijski broj (UID). UID i ključ će se zatim 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 blok podataka, mijenjati podatke po želji, a zatim upisivati nove podatke nazad u oznaku.

Korak 8: Softver

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

Zastava 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 tokom otklanjanja grešaka. Neke od povratnih poruka će preplaviti tipičan ekran od 1602, ali ja imam LCD od 40 karaktera po 2 reda koji sam pronašao na internetskoj stranici sa elektronikom. Definicija “Max_Line” može se postaviti za veličinu vašeg LCD -a. Ako se dostigne “Max_Line”, rutina “Disp_Buff” se nastavlja upisivanjem u drugi red. Ovoj rutini možete dodati mali kôd za nastavak na redove tri i četiri ako imate LCD s 4 retka. Za PN532 postoji zastavica koja se može postaviti tako da rutina izbaci sve primljene bajtove ili samo ispiše 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 i to se koristi kao indeks u međuspremniku. New_Msg se obično briše prije svakog koraka naredbe tako da se rezultati specifični za tu naredbu mogu lako locirati i provjeriti. U RC522 to znači da međuspremnik za prijem obično ima samo 1 do 4 bajta. U nekim slučajevima, kao što je čitanje bloka podataka, naredba Read_FIFO mora se izdati više puta kako bi se bajtovi premjestili iz FIFO u međuspremnik za primanje. Svi rezultati naredbi za PN532 završavaju u međuspremniku za primanje pa se izvodi postupak skeniranja kako bi se locirali potrebni bajtovi.

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 tokom upisivanja u oznaku. Zapisane vrijednosti izmjenjuju se između vrijednosti Junk_Num i komplementa 1 Junk_Num. Konačno, 16 zapisanih vrijednosti se čita i prikazuje. Postoje poruke na ekranu za svaki korak sa odloženim rutinskim pozivima kako bi se omogućilo vreme za čitanje svake poruke. Dobavljaju se i poruke o greškama, ali obično bi se trebale pojaviti samo ako se oznaka ukloni tijekom operacije.

Dio inicijalizacije softvera je dio koda koji se izvršava samo pri uključivanju i preskače ako se otkrije resetiranje softvera. Poruke o greš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 na vremensko ograničenje.

Korak 9: Jedinstveni softver MFRC522

Čip RC522 zahtijeva više instrukcija niskog nivoa 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 bafera. Rutine “Write_FIFO” i “Read_FIFO” rješavaju te zadatke. Softver MFRC522 uključuje odjeljak za mnoge naredbe nižeg nivoa iz kojih su izgrađene glavne funkcije.

Izračun kontrolnog zbroja naredbe oznake za RC522 je vrlo različit nego za PN532. Nakon što je naredba tag ugrađena u FIFO, šalje se naredba modula za izračunavanje kontrolne sume. 16-bitni rezultat se ne dodaje 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 proračun kontrolnog zbira

· Ponovo 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 bafer, 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 podaci zaista prenijeli. 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 da se točan odgovor pravovremeno primi. Po mom mišljenju, to je pretjerano za ovu aplikaciju koja nije kritična po vremenu. Umjesto toga, koristim kratka vremenska ograničenja softvera da sačekam odgovor, a zatim provjerim da li je tačan. Priručnik za oznake Mifare detaljno prikazuje vrijeme za različite transakcije, a dozvoljeno je i vrijeme za očekivani broj primljenih bajtova. Ova vremenska kašnjenja ugrađena su u većinu naredbi na niskom nivou potprograma.

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.

Inicijalizirajuća sekvenca je ranije detaljno opisana, a ista softverska rutina šalje i 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 odgovarajućim rutinama. Kontrolni zbroj se izračunava jednostavnim zbrajanjem naredbenih bajtova, dodavanjem komplementa, a zatim dodavanjem 1 kako bi postalo komplement 2. 8-bitni rezultat dodaje se naredbenom nizu neposredno prije poštampila.

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. Kada se pronađe TFI, željeni odgovori su poznati pomak od njega. Komanda eho i statusni bajtovi naredbe spremaju rutina “Read_Buff” radi kasnije provjere.

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

Preporučuje se: