Sisukord:

RC522 ja PN532 RFID põhitõed: 10 sammu
RC522 ja PN532 RFID põhitõed: 10 sammu

Video: RC522 ja PN532 RFID põhitõed: 10 sammu

Video: RC522 ja PN532 RFID põhitõed: 10 sammu
Video: Электронный замок с RFID на Arduino 2024, Juuli
Anonim
RC522 ja PN532 RFID põhitõed
RC522 ja PN532 RFID põhitõed

MÄRKUS. Mul on nüüd Instructables, mis pakuvad Arduino koodi RC522 ja PN532 jaoks.

Mõni aeg tagasi ostsin katsetamiseks kolm erinevat RFID -moodulit. Eelmises projektis kirjeldasin üksikasjalikult, kuidas kasutada lihtsat 125 kHz moodulit põhiliste turvafunktsioonide tegemiseks. Sellised moodulid kasutavad kirjutuskaitstud silte, nii et protsess skannib ID, salvestab soovi korral ja võrdleb salvestatud ID-dega. Teised ostetud moodulid töötavad 13,56 MHz sagedusel ja kasutavad silte, mida saab nii lugeda kui ka kirjutada, seega on lihtsalt raiskamine neid lihtsalt põhilise turvalisuse tagamiseks kasutada. Kaks ühist moodulit kasutavad kas kiipi RC522 või kiipi PN532 - mõlemad NXP.

Kui olete lugenud mõnda muud minu projekti, teate, et mulle meeldib kasutada odavaid PIC -mikrokontrollereid ja programme koostamiskeeles. Nii et mida ma otsisin, oli moodulite ja RFID -siltidega rääkimiseks vajalike toimingute jada. Kuigi moodulite jaoks on võrgus palju näidisprogramme, on enamik neist kirjutatud Arduino C -tarkvarasse ja kasutavad SPI -liidest. Samuti vajavad kiipide ja Mifare siltide kasutusjuhendid natuke dešifreerimist. See postitus käsitleb peamiselt teavet, mida soovisin projekti alustades saada. Lisan ka PIC kokkupanekutarkvaraprogrammid iga mooduli põhiliste käskude täitmiseks. Isegi kui te ei kasuta PIC -i ja/või koostamiskeelt, peaks lähtekood vähemalt andma teile hea ettekujutuse konkreetsete käskude kohta, mida on vaja iga sammu täitmiseks.

Samm: jadaliidesed

Seerialiidesed
Seerialiidesed
Seerialiidesed
Seerialiidesed
Seerialiidesed
Seerialiidesed
Seerialiidesed
Seerialiidesed

Mõlemad nendes moodulites kasutatavad kiibid on võimelised liidestuma SPI, I2C või UART (HSSP) kaudu. PN532 moodulil on DIP -lüliti, mida kasutatakse soovitud liidese valimiseks, kuid MFRC522 moodul on SPI -liidese jaoks juhtmega ühendatud. Ma eelistan kasutada PIC-i sisseehitatud UART-i, seega jahtisin võrgus, et näha, kas oleks võimalik moodulit MFRC522 UART-režiimi viia. Leidsin, et ühe jälje lõikamine tahvlile teeb asja ära. Lõige eemaldab tõhusalt 3,3 volti kiibi EA tihvtilt. Tehniliselt peaks EA tihvt olema siis maandusega ühendatud, kuid paljud inimesed ei suuda seda jootmisvõimet ära tõmmata, arvestades kiibi tihvti tihedust. Kuid ärge muretsege, sest EA-tihvtil pole sisemist tõmbetugevust ja see ei hõlju nagu vanad TTL-loogikasisendid. Lõikekoha kohta vaadake kiibidiagrammi ja tahvliosa pilti. Veenduge, et lõikate ainult lühikese jälje otse EA tihvti juurde.

Samm: riistvara

Riistvara
Riistvara

UART -side riistvaraühendused on näidatud ülaltoodud diagrammil. MFRC522 UART -ühendusi pole tahvlil märgitud, kuid nagu on näidatud skemaatiliselt, võtab SDA -tihvt vastu UART -andmeid ja MISO -tihvt edastab UART -andmed. PN532 moodulil on plaadi alumisel küljel UART -märgistus.

Mõlemad moodulid töötavad 3,3 voltiga ja samuti tuleb piirata PIC TX tihvti 5-voldist loogikataset. LCD-ühendus on tavaline 4-bitine seadistus, mida on kasutatud paljudes minu eelmistes projektides. Kõigi sõnumite vaikevorming on seatud standardsele 1602 LCD -le (16 tähemärki 2 rida). Mul on ka 40 tähemärgi ja 2 -realine LCD, mida kasutan silumisel töötlemata andmete andmisel, nii et lisasin tarkvarasse definitsiooni, mis võimaldab mul kasutada lisaruumi.

3. samm: andmeplokid

Selle projekti jaoks kasutatavad Mifare Classic 1k sildid on konfigureeritud 16 sektoriks, neli andmeploki sektori kohta, 16 baiti andmeploki kohta. 64 andmeplokist on ainult 47 tegelikult kasutatavad. Andmeplokk 0 sisaldab tootja andmeid ja plokke 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59 ja 63 nimetatakse haagiseplokkideks. Haagiseplokid on igas sektoris viimased ja sisaldavad kahte võtit ja ploki juurdepääsubitte. Võtmed ja blokeerimispuldid kehtivad ainult selle sektori andmeplokkidele, nii et teil võiks olla iga sektori jaoks erinevad võtmed ja juurdepääsureeglid. Vaikimisi klahvid on seatud “FF FF FF FF FFh”. Selle põhiprojekti jaoks kasutan ainult ühte andmeplokki ning jätan vaikimisi võtmed ja juurdepääsubitid. Nende kaartidega on seotud palju dokumente, nii et otsige veebist otsingut „Mifare” või külastage NXP veebisaiti, kui soovite neid põhjalikumalt uurida.

4. samm: üldine toimimine

Kuigi mõlemad moodulid on ainulaadsed nii neile juurdepääsu kui ka siltidele juurdepääsu osas, on töö tegemiseks vaja üldist protsessi. Selle projekti puhul eeldame, et sildid on Mifare Classic 1k tüüpi ja et me lubame antenniväljal korraga ainult ühte silti. Põhietapid on määratletud allpool.

· Mooduli initsialiseerimine: üldiselt nõuab see näiteks väärtuste kirjutamist kiibi registritesse, äratuskäskluste saatmist ja antenni toite sisselülitamist. Akuga töötavas rakenduses soovite aku säästmiseks sisse ja välja lülitada antenni, kuid selle lihtsa rakenduse jaoks lülitame selle üks kord sisse ja jätame selle seejärel sisse.

· Kustuta krüptolipp (ainult 522): kui silt on autentitud, määratakse lipp, mis annab kasutajale teada, et märgendiga suhtlemine krüptitakse. Kasutaja peab selle lipu enne järgmist skannimist tühjendama, isegi kui skaneeritav silt on sama.

· Märgendi otsimine: moodul küsib põhimõtteliselt „Kas keegi on väljas?” ja silt vastab "ma olen siin". Kui moodul ei saa kiiret vastust, lõpetab see kuulamise. See tähendab, et peame korduvalt saatma skaneerimiskäske moodulile, kuni see märgendi leiab.

· Hankige silt Kasutaja identifitseerimisnumber (UID): märgend vastab skannimistaotlusele teatava piiratud teabega, näiteks märgi tüübiga. See tähendab, et selle UID saamiseks peame võib -olla saatma teise käsu. UID on neli baiti Mifare Classic 1k siltide jaoks. Kui teiste siltide jaoks võib see olla pikem, kuid see projekt neid ei käsitle.

· Valige silt (ainult 522): UID -d kasutatakse märgendi valimiseks, mille kasutaja soovib lugemiseks ja kirjutamiseks autentida. See põhineb võimalusel, et antenniväljal võib olla rohkem kui üks silt. Meie lihtsa rakenduse puhul see nii ei ole, kuid me peame selle siiski valima.

· Märgendi autentimine: see samm on vajalik, kui soovime märgendit lugeda või kirjutada. Kui me tahame vaid lihtsa turvarakenduse silte eristada, piisab UID -st. Autentimine nõuab, et me teaksime UID -d ja et me teaksime selle märgendi andmesektori krüptovõtit, millele soovime juurde pääseda. Selle projekti puhul jääme vaikimisi võtmete juurde, kuid minu jätkuprojekt muudab võtmeid nii, et märgendit saab kasutada elektroonilise rahakotina.

· Sildi lugemine või kirjutamine: lugemine tagastab alati kõik 16 andmebaasi soovitud baiti. Kirjutamine nõuab, et kõik 16 baiti kirjutataks korraga. Kui soovite lugeda või kirjutada mõnda samasse andmesektorisse kuuluvat plokki, ei pea märgendit uuesti autentima. Kui soovite lugeda või kirjutada plokki teises andmesektoris, tuleb silt uuesti autentida, kasutades selle sektori võtit.

5. samm: MFRC522 mooduli juurdepääsujada

Käivitusrutiin sisaldab neid põhilisi samme, mida leidub enamikus vaadatud rakendustes:

· Saatke näiv andmebait (vt järgmist lõiku)

· Pehme lähtestamine

· Määrake RF -vastuvõtja võimendus (kui soovitakse midagi muud kui vaikimisi)

· Määra ASK modulatsiooniprotsent 100% -le

· Määrake CRC arvutuste jaoks seemne väärtus

· Lülitage antenn sisse

· Hankige püsivara versioon (pole vajalik)

Mingil seletamatul põhjusel lülitub mu moodul sisse ja arvab, et on saanud kirjutamiskäsu ilma andmebaitita. Ma ei tea, kas see on lihtsalt minu mooduli probleem, kuid ma pole mujal sellele viiteid näinud. Katsetasin nii riist- kui ka tarkvara lähtestamisega ning kumbki ei lahendanud probleemi. Minu lahendus oli lisada näiv lugemiskõne, et registreerida mooduli initsialiseerimisrutiini alguses “0” (määratlemata). Kui moodul näeb seda tundmatu kirjutamiskäsu andmetena, ei tundu see olevat kahjulik. Kui see näeb seda lugemiskäsuna, ei juhtu midagi kasulikku. Mind häirib, et ma ei saa probleemi täielikult määratleda, eriti arvestades, et ainult mooduli riistvara lähtestamine probleemi ei lahenda.

Kiip RC522 koosneb mitmest registrist, millest enamik on nii kirjutatud kui ka loetavad. Kirjutamise tegemiseks saadetakse moodulile registrinumber, millele järgneb kirjutatav väärtus. Lugemiseks on registrinumbrile lisatud 0x80 ja see saadetakse moodulile. Vastus kirjutuskäsklusele on registri kaja, millele on juurdepääs. Vastus lugemiskäsule on registri sisu. Tarkvara kasutab neid teadmisi, et kontrollida käsu nõuetekohast täitmist.

6. toiming: PN532 mooduli juurdepääsujada

Käivitusrutiin sisaldab järgmisi nõutavaid samme:

· Saada initsialiseerimisstring: see on UART -liidese spetsiifiline. Käsiraamatus öeldakse, et UART-liides ärkab liidesel tuvastatud viiendal tõusvas servas. See soovitab saata 0x55, 0x55, 0x00, 0x00, 0x00, 0x00. Enamasti peab lihtsalt olema piisav arv tõusva servaga tähemärke ja need ei tohi välja näha käsu preambulina (00 00 FF).

· Mooduli äratamine: Kasutusjuhendisse mattudes näitab see, et moodul initsieerub unerežiimi, mida nimetatakse “LowVbat”. Sellest olekust väljumiseks peame saatma käsu SAMConfiguration.

PN532 eeldab, et käsud saadetakse kindlaksmääratud sõnumivormingus, mis sisaldab preambulit, sõnumit ja postmarki. Vastusteated on samas vormingus. Mõlemad käsu- ja vastusteated sisaldavad TFI (Frame Identifier) ja käsu versiooni. Käsk kasutab TFI väärtust 0xD4 ja vastus 0xD5. Käskude versioonid on erinevad, kuid vastus suurendab alati käsu versiooni ja tagastab selle baitides pärast TFI -d. See järjepidevus võimaldab vastusteateid hõlpsasti asjakohase teabe saamiseks skannida.

Iga käsusõnum (pärast preambulit) koosneb sõnumi pikkusest, sõnumi pikkuse 2 täiendajast, TFI -st, käsust, andmetest, kontrollsummast ja postitamisest. Tarkvara koostab üksikud käsud ja kutsub seejärel välja rutiini, mis arvutab välja kontrollsumma ja lisab postitempli.

Vastuse sõnumivorming sarnaneb käsuga. Tüüpiline vastus sisaldab ACK (00 00 FF 00 FF 00), millele järgneb konkreetne vastus käsule. Iga käsuvastus algab preambuliga 00 00 FF. Vastusel peaks olema ka TFI bait D5, millele järgneb käskude arv, mida suurendatakse 1 võrra. Meie käsu „SAMConfiguration” (14) korral oleks see 15. Käsk „SAMConfiguration” saab järgmise vastuse: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00.

On ka teisi moodulipõhiseid käske, mida saab saata, kuid need pole selle rakenduse jaoks vajalikud. Lisasin siiski rutiini, millele saab helistada püsivara versiooni numbri hankimiseks. Tüüpiline vastus (pärast ACK -d ja preambulit) oleks järgmine: 06 FA D5 03 32 01 06 07 E8 00. „01 06 07” näitab püsivara versiooni numbrit 1.6.7.

7. toiming: juurdepääs siltidele

Kui moodul on valmis, saame saata siltidele omaseid käske. Sildiandmete lugemiseks või kirjutamiseks peab meil olema selle identifitseerimisnumber (UID). Seejärel kasutatakse UID -d ja võtit, et lubada lugemiseks/kirjutamiseks konkreetse märgendiandmete sektor. Märgendi andmete lugemine/kirjutamine toimub alati määratud andmeploki kõigi 16 baidi kohta. See tähendab, et tavaline rakendus loeb andmeploki, muudab andmeid vastavalt soovile ja kirjutab seejärel uued andmed sildile tagasi.

8. samm: tarkvara

Katkestuste töötleja tarkvarale helistatakse iga kord, kui PIC UART saab baiti andmeid. Mõnes oma eelmises UART -projektis suutsin katkestuste käitleja asemel lihtsalt küsida RX -katkestuse lippu. See ei kehti selle tarkvara puhul, eriti PN532 puhul, mis suhtleb palju suurema edastuskiirusega kui RC522. RC522 UART -liides on piiratud 9600 baudiga, samas kui PN532 vaikeseade on 115k ja selle saab seada kuni 1,288M baudini. Vastuvõetud baidid salvestatakse puhverpiirkonda ja tarkvara põhiosa otsib need vastavalt vajadusele alla.

Lipp New_Msg näitab, et baite on vastu võetud, ja baitarv - kui palju. Olen lisanud tarkvarasse „Disp_Buff“rutiini, mida saab silumise ajal vastuvõtupuhvri sisu kuvamiseks kutsuda. Mõni tagastusteade ületab tüüpilise 1602 ekraani, kuid mul on 40 tähemärgi ja 2 -realine LCD -ekraan, mille leidsin elektroonilisest üleliigse elektroonika saidilt. Määratluse „Max_Line” saab määrata teie LCD suurusele. „Max_Line” saavutamisel jätkub „Disp_Buff” rutiin, kirjutades teisele reale. Kui teil on 4-realine LCD, võite sellele rutiinile lisada väikese koodi, et jätkata kolmanda ja neljanda reaga. PN532 jaoks on lipp, mille saab seadistada nii, et rutiin tühjendab kõik vastuvõetud baidid või lihtsalt tühjendab 16 andmebaiti lugemisvastusest.

Vastuvõtupuhvrit või baitarvutust pole vaja kustutada, kuna lipu New_Msg kustutamise korral saab katkestuste käitleja tühjendada Byte_Count ja seda kasutatakse puhvri indeksina. New_Msg kustutatakse tavaliselt enne iga käsuetappi, et selle käsu spetsiifilisi tulemusi oleks lihtne leida ja kontrollida. RC522 -s tähendab see, et vastuvõtupuhvris on tavaliselt ainult 1 kuni 4 baiti. Mõnel juhul, näiteks andmeplokkide lugemisel, tuleb käsk Read_FIFO anda mitu korda, et teisaldada baidid FIFO -st vastuvõtupuhvrisse. Kõik PN532 käsutulemused jõuavad vastuvõtupuhvrisse, nii et skaneerimisprotseduur viiakse läbi vajalike konkreetsete baitide leidmiseks.

Tarkvara peamine silmus otsib märgendit ja seejärel autentib sildi lugemiseks/kirjutamiseks. Siin sisalduva testitarkvara puhul muudetakse muutujat Junk_Num iga kord põhiahela kaudu ja seda kasutatakse sildile kirjutamise ajal. Kirjutatud väärtused vahelduvad väärtuse Junk_Num ja 1 täiendi Junk_Num vahel. Lõpuks loetakse ja kuvatakse 16 kirjutatud väärtust. Iga sammu jaoks kuvatakse kuvasõnumid koos rutiinsete viivitustega, et anda aega iga kirja lugemiseks. Samuti esitatakse veateated, kuid need peaksid tavaliselt ilmnema ainult siis, kui silt eemaldatakse toimingu ajal.

Tarkvara lähtestamise osa on koodilõik, mis käivitatakse ainult sisselülitamisel ja jäetakse vahele, kui tuvastatakse tarkvara lähtestamine. Veateated lõpevad üldjuhul tarkvara lähtestamisega, et väljuda põhiahelast. Lähtestamine toimub rutiinis „Kallutamine”, mis lihtsalt lubab valvekoera taimerit ja läheb seejärel lõpmatusse ahela ootel.

Samm: ainulaadne tarkvara MFRC522

RC522 kiip nõuab siltidega suhtlemiseks rohkem madala taseme juhiseid kui kiip PN532. See on omamoodi nagu programmeerimine montaažikeeles versus “C” programmeerimine. Teine oluline erinevus on see, et RC522 nõuab, et sildiga suhtlemine toimuks läbi FIFO puhvri. Rutiinid „Write_FIFO” ja „Read_FIFO” tegelevad nende ülesannetega. Tarkvara MFRC522 sisaldab jaotist paljude madalama taseme käskude jaoks, millest põhifunktsioonid on üles ehitatud.

Märgendi käsu kontrollsumma arvutamine RC522 jaoks on väga erinev PN532 puhul. Pärast märgendi käsu loomist FIFO -s saadetakse mooduli käsk kontrollsumma arvutamiseks. 16-bitist tulemust ei lisata automaatselt sildi käsule, kuid seda saab lugeda kahest 8-bitisest registrist. Kontrollsumma arvutamine kustutab FIFO -s olevad andmed, nii et nõutav järjestus on järgmine:

· Ehitage käsk FIFO -sse

· Käskida kontrollsumma arvutamist

· Koostage käsk uuesti FIFO -sse

· Lugege CRC -registreid ja kirjutage kontrollsumma baidid FIFO -le

· Saada käsk Transpond või Authenticate

Käsk Ülekanne edastab FIFO puhvri ja lülitub seejärel automaatselt vastuvõturežiimi, et oodata märgendi vastust. Andmete tegelikuks edastamiseks peab käsule Transieve järgnema BitFramingRegister bitti StartSend. Käsul Autentimine pole seda nõuet.

Üldiselt kasutavad võrgus saadaval olevad Arduino C -koodi rakendused katkestuslipuregistreid ja ajalõpu registrit, et tagada õige vastuse õigeaegne saamine. Minu arvates on see selle mitteajaliselt kriitilise rakenduse jaoks üleliigne. Selle asemel kasutan vastuse ootamiseks lühikesi tarkvara ajalimiite ja kontrollin seejärel, kas see on õige. Mifare siltide käsiraamat kirjeldab üksikasjalikult erinevate tehingute ajastust ja aega on lubatud ka eeldatava baitide arvu saamiseks. Need viivitused on sisse ehitatud enamikku madala taseme käsu alamprogrammidest.

Samm: unikaalne tarkvara PN532

Pärast mooduli lähtestamist tehakse märgendi leidmiseks ja autentimiseks vajalikud toimingud, kirjutades vastava käsu ja seejärel vajalikud andmed. Skaneerimiskäsk tagastab UID, mida seejärel kasutatakse autentimiseks. Pärast seda loeb ja kirjutab märgend, saadab või tagastab adresseeritud andmeploki 16-baiti.

Initsialiseerimisjärjestust kirjeldati varem ja sama tarkvara rutiin saadab ka käsu SAMConfiguration, et saada moodul olekust „LowVbat”. Ülejäänud põhikäsklused, nagu skannimine, autentimine, lugemis-/kirjutamissilt, luuakse lihtsalt järjestikku rakendatavates rutiinides. Kontrollsumma arvutamiseks liidetakse lihtsalt käsubaidid, tehakse täiendus ja seejärel lisatakse 1, et muuta see 2 täienduseks. 8-bitine tulemus lisatakse käsuridale vahetult enne postitamist.

RC522 -l pole sellist FIFO -d, nii et täielikud vastusteated võetakse vastu automaatselt. Rutiin „Find_Response” skannib TFI (0xD5) vastuvõtuandmete puhvrit. Rutiin kasutab ära teada, millised peaksid olema oodatud sõnumid, ja ignoreerib lihtsaid ACK -vastuseid, mis ei sisalda andmeid. Kui TFI on leitud, on soovitud vastused sellest teada. Käsu kaja ja käsu oleku baidid salvestatakse rutiiniga „Read_Buff” hilisemaks kinnitamiseks.

See on selle postituse jaoks. Vaadake minu teisi elektroonikaprojekte aadressil: www.boomerrules.wordpress.com

Soovitan: