Kazalo:

RC522 in PN532 Osnove RFID: 10 korakov
RC522 in PN532 Osnove RFID: 10 korakov

Video: RC522 in PN532 Osnove RFID: 10 korakov

Video: RC522 in PN532 Osnove RFID: 10 korakov
Video: Знакомство с RFID и подключение модуля RC522 к Arduino 2024, Julij
Anonim
Osnove RFID RC522 in PN532
Osnove RFID RC522 in PN532

OPOMBA: Zdaj imam Instructables, ki ponujajo kodo Arduino za RC522 in PN532.

Pred časom sem za eksperimentiranje kupil tri različne module RFID. V prejšnjem projektu sem podrobno opisal, kako s preprostim 125-kHz modulom opraviti osnovno varnostno funkcijo. Takšni moduli uporabljajo oznake samo za branje, zato postopek poišče ID, po želji shrani in primerja s shranjenimi ID-ji. Drugi moduli, ki sem jih kupil, delujejo pri 13,56 MHz in uporabljajo oznake, ki jih je mogoče brati in pisati, zato je preprosto škoda, če jih preprosto uporabite za osnovno varnost. Dva skupna modula uporabljata čip RC522 ali čip PN532 - oba proizvajalca NXP.

Če ste prebrali katerega od mojih drugih projektov, veste, da rad uporabljam poceni mikrokrmilnike PIC in program v zbirnem jeziku. Zato sem iskal zaporedje korakov, potrebnih za pogovor z moduli in oznakami RFID. Čeprav je na spletu veliko primerov programov za module, jih je večina napisanih v programski opremi „C“za Arduino in uporabljajo vmesnik SPI. Tudi priročniki za čipe in oznake Mifare zahtevajo malo dešifriranja. Ta objava govori predvsem o informacijah, ki bi jih rad imel na začetku projekta. Vključujem tudi programsko opremo za montažo PIC za izvajanje osnovnih ukazov, ki jih zahteva vsak modul. Tudi če ne uporabljate jezika PIC in/ali montažnega jezika, bi morala izvorna koda vsaj dobro povedati o posebnih ukazih, potrebnih za izvedbo vsakega koraka.

Korak: Serijski vmesniki

Zaporedni vmesniki
Zaporedni vmesniki
Zaporedni vmesniki
Zaporedni vmesniki
Zaporedni vmesniki
Zaporedni vmesniki
Zaporedni vmesniki
Zaporedni vmesniki

Oba čipa, uporabljena na teh modulih, se lahko povežeta prek SPI, I2C ali UART (HSSP). Modul PN532 ima DIP stikalo, ki se uporablja za izbiro želenega vmesnika, modul MFRC522 pa je ožičen za vmesnik SPI. Raje uporabljam vgrajen UART PIC, zato sem na spletu poiskal, ali obstaja način, kako modul MFRC522 preklopiti v način UART. Ugotovil sem, da bi z rezanjem ene sledi na deski uspelo. Rez učinkovito odstrani 3,3 volta z EA zatiča čipa. Tehnično je treba priključek EA priključiti na ozemljitev, vendar le malo ljudi ne more izvleči tega spajkanja glede na gostoto zatiča čipa. Vendar ne skrbite, ker pin EA nima notranjega vlečenja in ne "plava", kot to počnejo stari logični vhodi TTL. Če želite mesto za rezanje, glejte diagram čipa in sliko odseka plošče. Poskrbite, da boste izrezali le kratko sled, ki gre neposredno na pin EA.

2. korak: Strojna oprema

Strojna oprema
Strojna oprema

Strojne povezave za komunikacijo UART so prikazane na zgornjem diagramu. Priključki UART za MFRC522 niso označeni na plošči, vendar, kot je prikazano na shemi, pin SDA sprejema podatke UART, pin MISO pa podatke UART. Modul PN532 ima oznake UART na spodnji strani plošče.

Oba modula delujeta na 3,3 volta, omejiti pa je treba tudi 5-voltno logično raven iz vtiča PIC TX. Povezava LCD je standardna 4-bitna nastavitev, ki je bila uporabljena v številnih mojih prejšnjih projektih. Privzeta oblika za vsa sporočila je nastavljena za standardni 1602 LCD (16 znakov v 2 vrsticah). Prav tako imam LCD z 40 črkami po 2 vrstici, ki ga uporabljam za izpise surovih podatkov med odpravljanjem napak, zato sem v programsko opremo vključil definicijo, ki mi omogoča, da izkoristim dodaten prostor na zaslonu.

Korak: Podatkovni bloki

Oznake Mifare Classic 1k, uporabljene za ta projekt, so konfigurirane kot 16 sektorjev, štirje podatkovni bloki na sektor, 16 bajtov na podatkovni blok. Od 64 podatkovnih blokov je le 47 dejansko uporabnih. Podatkovni blok 0 vsebuje podatke proizvajalca, bloki 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59 in 63 pa se imenujejo Priklopni bloki. Bloki priklopnikov so zadnji v vsakem sektorju in vsebujejo dva ključa in bit za dostop do bloka. Ključi in bitovi za dostop do blokov veljajo samo za podatkovne bloke v tem sektorju, tako da imate lahko različne ključe in pravila dostopa za vsak sektor. Privzete tipke so nastavljene na »FF FF FF FF FFh«. Za ta osnovni projekt uporabljam samo en podatkovni blok in obdržim privzete ključe in dostopne bite. Obstaja veliko dokumentov, povezanih s temi karticami, zato poiščite spletno mesto "Mifare" ali obiščite spletno stran NXP, če jih želite podrobneje raziskati.

4. korak: Splošno delovanje

Čeprav sta oba modula edinstvena po načinu dostopa in dostopu do oznak, je za dokončanje dela potreben splošen postopek. Za ta projekt predvidevamo, da so oznake tipa Mifare Classic 1k in da v polju antene dovoljujemo le eno oznako naenkrat. Osnovni koraki so opredeljeni spodaj.

· Inicializiranje modula: Na splošno to zahteva stvari, kot so zapisovanje vrednosti v registre v čipu, pošiljanje ukazov za prebujanje in vklop antene. V aplikaciji, ki deluje na baterije, bi želeli vklopiti in izklopiti anteno, da prihranite baterijo, vendar za to preprosto aplikacijo jo enkrat vklopimo in nato pustimo vklopljeno.

· Počisti kripto zastavo (samo 522): Ko je oznaka overjena, se zastavica nastavi tako, da uporabniku sporoči, da bo komunikacija z oznako šifrirana. To zastavico mora uporabnik počistiti pred naslednjim skeniranjem, tudi če je oznaka, ki se skenira, enaka.

· Iskanje oznake: Modul v bistvu vpraša: "Je kdo tam zunaj?" in oznaka se odzove: "Tukaj sem". Če modul ne dobi hitrega odziva, preneha poslušati. To pomeni, da moramo modulu večkrat pošiljati ukaze za pregled, dokler ne najde oznake.

· Pridobite identifikacijsko številko uporabnika (UID): oznaka se bo na zahtevo za skeniranje odzvala z nekaterimi omejenimi informacijami, kot je na primer vrsta oznake. To pomeni, da bomo morda morali poslati še en ukaz, da dobimo njegov UID. UID je štiri oznake za oznake Mifare Classic 1k. Če je za druge oznake morda dlje, vendar jih ta projekt ne obravnava.

· Izberite oznako (samo 522): UID se uporablja za izbiro oznake, ki jo želi uporabnik preveriti za branje in pisanje. To temelji na možnosti, da je v polju antene lahko več oznak. To ne velja za našo preprosto aplikacijo, vendar moramo kljub temu izbrati oznako.

· Preverjanje pristnosti oznake: Ta korak je potreben, če želimo kakršno koli branje ali pisanje oznake. Če želimo le razlikovati med oznakami za preprosto varnostno aplikacijo, potem zadostuje UID. Preverjanje pristnosti zahteva, da poznamo UID in da poznamo kripto ključ za podatkovni sektor oznake, do katere želimo dostopati. Pri tem projektu se držimo privzetih ključev, vendar moj naslednji projekt spremeni ključe, tako da se oznaka lahko uporablja kot elektronska denarnica.

· Preberite ali napišite oznako: Branje vedno vrne vseh 16 bajtov zahtevanega podatkovnega bloka. Zapisi zahtevajo, da je vseh 16 bajtov napisanih hkrati. Če želite prebrati ali napisati drug blok v istem podatkovnem sektorju, oznake ni treba znova overiti. Če želite prebrati ali napisati blok v drugem podatkovnem sektorju, je treba oznako znova overiti s ključem za ta sektor.

5. korak: Zaporedje dostopa do modula MFRC522

Začetna rutina vključuje te osnovne korake v večini aplikacij, ki sem jih ogledal:

· Pošlji lažni podatkovni bajt (glej naslednji odstavek)

· Mehka ponastavitev

· Nastavite ojačevalnik RF sprejemnika (če želite kaj drugega kot privzeto)

· Nastavite odstotek modulacije ASK na 100%

· Nastavite vrednost semena za izračune CRC

· Vklopite anteno

· Pridobite različico vdelane programske opreme (ni potrebna)

Iz nekega nepojasnjenega razloga se moj modul vklopi in misli, da je prejel ukaz za pisanje brez bajta podatkov. Ne vem, ali je to le problem z mojim modulom, vendar drugje nisem zasledil sklicevanja nanj. Eksperimentiral sem s ponastavitvijo strojne in programske opreme in nobena ni odpravila težave. Moja rešitev je bila, da na začetku rutine inicializacije modula dodam lažni klic branja, da registriram “0” (nedefinirano). Če modul to vidi kot podatke za neznani ukaz za pisanje, se zdi, da ni škodljivih učinkov. Če to vidi kot ukaz za branje, se ne zgodi nič koristnega. Moti me, da težave ne morem v celoti opredeliti, zlasti glede na to, da strojna ponastavitev samo modula ne odpravi težave.

Čip RC522 je sestavljen iz številnih registrov, od katerih je večina tako brati kot pisati. Za izpis se modulu pošlje registrska številka, ki ji sledi vrednost za pisanje. Za branje je registrski številki dodano 0x80, ki se pošlje v modul. Odziv na ukaz za pisanje je odmev registra, do katerega dostopate. Odziv na ukaz za branje je vsebina registra. Programska oprema to znanje izkoristi za preverjanje, ali je bil ukaz pravilno izveden.

6. korak: Zaporedje dostopa do modula PN532

Začetna rutina vključuje te potrebne korake:

· Pošlji niz za inicializacijo: To je značilno za vmesnik UART. V priročniku je zapisano, da se bo vmesnik UART prebudil na petem naraščajočem robu, zaznanem na vmesniku. Priporoča pošiljanje 0x55, 0x55, 0x00, 0x00, 0x00, 0x00. Večinoma mora biti le zadostno število znakov z naraščajočimi robovi in ne smejo biti videti kot ukazna preambula (00 00 FF).

· Zbudi modul: V uporabniškem priročniku je prikazano, da se modul inicializira v nekakšno stanje spanja, imenovano “LowVbat”. Za izhod iz tega stanja moramo poslati ukaz »SAMConfiguration«.

PN532 pričakuje, da bodo ukazi poslani v določeni obliki sporočila, ki vključuje preambulo, sporočilo in poštni žig. Odzivna sporočila so v isti obliki. Sporočila o ukazu in odzivu vključujejo TFI (identifikator okvirja) in različico ukaza. Ukaz uporablja TFI 0xD4, odgovor pa 0xD5. Različice ukazov se razlikujejo, vendar bo odgovor vedno povečal različico ukaza in jo vrnil v bajtu po TFI. Ta skladnost omogoča enostavno iskanje odzivnih sporočil za ustrezne informacije.

Vsako ukazno sporočilo (po preambuli) je sestavljeno iz dolžine sporočila, 2 -ih, ki dopolnjujejo dolžino sporočila, TFI -ja, ukaza, podatkov, kontrolne vsote in poštne številke. Programska oprema ustvari posamezne ukaze in nato pokliče rutino, ki izračuna kontrolno vsoto in priloži poštni vložek.

Oblika sporočila za odgovor je podobna obliki ukaza. Tipičen odziv bo vključeval ACK (00 00 FF 00 FF 00), ki mu bo sledil poseben odziv na ukaz. Vsak odgovor na ukaz se začne s preambulo 00 00 FF. Odgovor mora imeti tudi bajt TFI D5, ki mu sledi številka ukaza, povečana za 1. Za ukaz »SAMConfiguration« (14) bi to bilo 15. Ukaz »SAMConfiguration« dobi ta odgovor: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00.

Obstajajo lahko drugi ukazi, specifični za module, ki pa niso potrebni za to aplikacijo. Vseeno sem vključil rutino, ki jo je mogoče poklicati za pridobitev številke različice vdelane programske opreme. Tipičen odgovor (po ACK in preambuli) bi bil: 06 FA D5 03 32 01 06 07 E8 00. »01 06 07« označuje različico vdelane programske opreme 1.6.7.

7. korak: Zaporedje dostopa do oznak

Ko se modul pripravi, lahko pošljemo ukaze, specifične za oznake. Za branje ali pisanje podatkovnih oznak moramo imeti njihovo identifikacijsko številko (UID). UID in ključ se nato uporabita za pooblastitev določenega podatkovnega sektorja oznak za branje/pisanje. Branje/pisanje podatkov o oznakah se vedno izvaja na vseh 16 bajtih v določenem podatkovnem bloku. To pomeni, da bo tipična aplikacija prebrala podatkovni blok, jih po želji spremenila in nato nove podatke zapisala nazaj v oznako.

8. korak: Programska oprema

Programska oprema za obdelavo prekinitev se pokliče vsakič, ko PIC UART prejme bajt podatkov. V nekaterih mojih prejšnjih projektih UART sem lahko samo anketiral zastavico prekinitve RX, namesto da bi uporabil upravljalnik prekinitev. To ne velja za to programsko opremo, zlasti za PN532, ki komunicira s precej višjo hitrostjo prenosa kot RC522. UART vmesnik RC522 je omejen na 9600 baud, medtem ko je privzeto za PN532 115k in ga lahko nastavite na 1,228M baud. Prejeti bajti so shranjeni v medpomnilniku in glavni del programske opreme jih po potrebi pridobi.

Zastavica New_Msg označuje, da so bili prejeti bajti, Byte_Count pa koliko. V programsko opremo sem vključil rutino »Disp_Buff«, ki jo je mogoče poklicati za prikaz vsebine sprejemnega medpomnilnika med odpravljanjem napak. Nekatera povratna sporočila bodo preplavila tipičen zaslon 1602, vendar imam 40 -mestni LCD z 2 vrsticami, ki sem ga našel na spletnem mestu z odvečno elektroniko. Opcijo "Max_Line" lahko nastavite za velikost vašega LCD -zaslona. Če je dosežen “Max_Line”, se rutina “Disp_Buff” nadaljuje s pisanjem v drugo vrstico. Tej rutini lahko dodate malo kode, da nadaljujete na tretjo in četrto vrstico, če imate 4-vrstni LCD. Za PN532 obstaja zastavica, ki jo je mogoče nastaviti tako, da rutina izbriše vse prejete bajte ali pa samo odstrani 16 podatkovnih bajtov iz odgovora branja.

Ni potrebno počistiti sprejemnega vmesnega pomnilnika ali Byte_Count, ker bo brisanje zastavice New_Msg povzročilo, da bo Byte_Count počistil upravljavec prekinitev, kar se uporablja kot indeks v vmesnem pomnilniku. New_Msg se običajno počisti pred vsakim korakom ukaza, tako da je mogoče rezultate, specifične za ta ukaz, zlahka poiskati in preveriti. V RC522 to pomeni, da ima sprejemni medpomnilnik običajno le 1 do 4 bajte. V nekaterih primerih, na primer pri branju podatkovnega bloka, je treba ukaz Read_FIFO večkrat izdati, da se bajti iz FIFO premaknejo v sprejemni medpomnilnik. Vsi rezultati ukazov za PN532 končajo v sprejemnem medpomnilniku, zato se izvede postopek skeniranja, da se poiščejo določeni potrebni bajti.

Glavna zanka v programski opremi išče oznako in nato označuje pristnost oznake za branje/pisanje. Za testno programsko opremo, ki je tukaj vključena, se spremenljivka Junk_Num vsakič spremeni skozi glavno zanko in se uporablja med pisanjem v oznako. Zapisane vrednosti se izmenjujejo med vrednostjo Junk_Num in dopolnitvijo 1 Junk_Num. Na koncu se prebere in prikaže 16 zapisanih vrednosti. Za vsak korak so prikazana sporočila z zamudnimi rutinskimi klici, ki omogočajo čas za branje vsakega sporočila. Na voljo so tudi sporočila o napakah, ki pa se običajno pojavijo le, če je oznaka med operacijo odstranjena.

Del inicializacije programske opreme je del kode, ki se izvede le ob vklopu in se preskoči, če je zaznana ponastavitev programske opreme. Sporočila o napakah se običajno končajo s ponastavitvijo programske opreme kot način za izhod iz glavne zanke. Ponastavitev se izvede v rutini »Tilt«, ki preprosto omogoči nadzornik časa in nato preide v neskončno zanko, ki čaka na časovno omejitev.

9. korak: edinstvena programska oprema MFRC522

Čip RC522 potrebuje več navodil na nizki ravni kot čip PN532 za komunikacijo z oznakami. To je nekako kot programiranje v zbirnem jeziku v primerjavi s programiranjem v "C". Druga pomembna razlika je v tem, da RC522 zahteva, da se komunikacija z oznako pretaka skozi vmesnik FIFO. Podprogrami »Write_FIFO« in »Read_FIFO« obravnavajo te naloge. Programska oprema MFRC522 vključuje razdelek za številne ukaze na nižji ravni, iz katerih so zgrajene glavne funkcije.

Izračun kontrolne vsote ukazov tag za RC522 je zelo drugačen kot za PN532. Ko je ukaz tag vgrajen v FIFO, se pošlje ukaz modula za izračun kontrolne vsote. 16-bitni rezultat ni samodejno dodan ukazu oznake, ampak je na voljo za branje iz dveh 8-bitnih registrov. Izračun kontrolne vsote izbriše podatke v FIFO, zato je zahtevano zaporedje naslednje:

· Zgradite ukaz v FIFO

· Ukažite izračun kontrolne vsote

· Znova sestavite ukaz v FIFO

· Preberite registre CRC in zapišite bajte kontrolne vsote v FIFO

· Pošljite ukaz Transceive ali Authenticate

Ukaz Transceive bo poslal vmesni pomnilnik FIFO in nato samodejno preklopil v način sprejema, da počaka na odgovor oznake. Ukazu Transceive mora slediti nastavitev bita StartSend v BitFramingRegister, da se dejansko prenesejo podatki. Ukaz Authenticate nima te zahteve.

Na splošno aplikacije kode Arduino »C«, ki so na voljo na spletu, uporabljajo registre zastavic prekinitve in register časovne omejitve, da zagotovijo pravočasen sprejem pravilnega odgovora. Po mojem mnenju je za to aplikacijo, ki ni časovno kritična, preveč. Namesto tega s kratkimi časovnimi omejitvami programske opreme počakam na odgovor in nato preverim, ali je pravilen. Priročnik za oznake Mifare podrobno opisuje čas za različne transakcije in dovoljen je tudi čas za pričakovano število prejetih bajtov. Te časovne zamude so vgrajene v večino podprogramov ukazov na nizki ravni.

10. korak: edinstvena programska oprema PN532

Po inicializaciji modula se koraki, potrebni za iskanje in preverjanje pristnosti oznake, izvedejo s pisanjem ustreznega ukaza, ki mu sledijo potrebni podatki. Ukaz scan vrne UID, ki se nato uporabi za preverjanje pristnosti. Po tem branje in pisanje oznake pošlje ali vrne 16 bajtov za naslovljeni podatkovni blok.

Inicializacijsko zaporedje je bilo podrobneje opisano prej, ista programska rutina pa pošlje tudi ukaz SAMConfiguration, da modul izvleče iz stanja »LowVbat«. Preostali osnovni ukazi, kot so Optično branje, Preverjanje pristnosti, Oznaka za branje/pisanje, so zgrajeni zaporedno v ustreznih rutinah. Kontrolna vsota se izračuna tako, da seštejete ukazne bajte, naredite dopolnilo in nato dodate 1, da bo dopolnilo 2. 8-bitni rezultat je dodan ukaznemu nizu tik pred postamblom.

Tako kot pri RC522 ni FIFO, zato se celotna odzivna sporočila samodejno sprejmejo. Rutina »Find_Response« skenira sprejemni podatkovni vmesnik za TFI (0xD5). Rutina izkorišča spoznanje, kakšna naj bodo pričakovana sporočila, in prezre preproste odgovore ACK, ki ne vključujejo podatkov. Ko je TFI odkrit, so želeni odzivi znani odmik od njega. Ukazni odmev in bajti stanja ukazov shrani rutina “Read_Buff” za poznejše preverjanje.

To je to za to objavo. Oglejte si moje druge elektronske projekte na: www.boomerrules.wordpress.com

Priporočena: