Orodha ya maudhui:

RC522 na PN532 Misingi ya RFID: Hatua 10
RC522 na PN532 Misingi ya RFID: Hatua 10

Video: RC522 na PN532 Misingi ya RFID: Hatua 10

Video: RC522 na PN532 Misingi ya RFID: Hatua 10
Video: RC522 based RFID Reader For Home Assistant, using ESPHome | Sponsored By PCBWAY.COM 2024, Novemba
Anonim
Misingi ya RC522 na PN532 RFID
Misingi ya RC522 na PN532 RFID

KUMBUKA: Sasa nina Maagizo ambayo hutoa nambari ya Arduino kwa RC522 na PN532.

Wakati fulani uliopita nilinunua moduli tatu tofauti za RFID kwa kujaribu. Katika mradi uliopita nilielezea jinsi ya kutumia moduli rahisi ya 125-kHz kufanya kazi ya msingi ya usalama. Moduli kama hizo hutumia vitambulisho vya kusoma tu kwa hivyo mchakato unakaguliwa kwa kitambulisho, duka ikiwa inataka, na ulinganishe dhidi ya kitambulisho kilichohifadhiwa. Moduli zingine nilizonunua zinafanya kazi kwa 13.56-MHz na hutumia vitambulisho ambavyo vinaweza kusomwa na kuandikwa kwa hivyo ni aina ya taka kuzitumia tu kwa usalama wa kimsingi. Moduli mbili za kawaida hutumia Chip ya RC522 au Chip PN532 - zote zimetengenezwa na NXP.

Ikiwa umesoma yoyote ya miradi yangu mingine unajua kwamba ninapenda kutumia wadhibiti wa bei nafuu wa PIC na programu katika lugha ya kusanyiko. Kwa hivyo kile nilikuwa nikitafuta ni mlolongo wa hatua zinazohitajika kuzungumza na moduli na kwa vitambulisho vya RFID. Ingawa kuna programu nyingi za mfano mkondoni kwa moduli, nyingi zimeandikwa katika programu ya 'C' ya Arduino na tumia kiolesura cha SPI. Pia, miongozo ya chips na lebo za Mifare huamua kidogo. Chapisho hili linahusu habari ninayotamani ningekuwa nayo wakati nilianzisha mradi. Ninajumuisha pia programu za programu ya mkutano wa PIC kwa kutekeleza amri za kimsingi zinazohitajika na kila moduli. Hata ikiwa hutumii PIC na / au lugha ya mkutano, nambari ya chanzo inapaswa angalau kukupa wazo nzuri la amri maalum zinazohitajika kutekeleza kila hatua.

Hatua ya 1: Maingiliano ya serial

Maingiliano ya serial
Maingiliano ya serial
Maingiliano ya serial
Maingiliano ya serial
Maingiliano ya serial
Maingiliano ya serial
Maingiliano ya serial
Maingiliano ya serial

Chips zote mbili zinazotumiwa kwenye moduli hizi zina uwezo wa kuingiliana kupitia SPI, I2C, au UART (HSSP). Moduli ya PN532 ina swichi ya DIP ambayo hutumiwa kuchagua kiolesura kinachohitajika lakini moduli ya MFRC522 imewekwa ngumu kwa kiolesura cha SPI. Ninapendelea kutumia UART iliyojengwa ya PIC, kwa hivyo niliwinda mkondoni kuona ikiwa kuna njia ya kupata moduli ya MFRC522 katika modi ya UART. Kile nilichogundua ni kwamba kukata alama moja kwenye bodi kungefanya ujanja. Ukata huondoa volts 3.3 kutoka kwa pini ya EA ya chip. Kitaalam pini ya EA inapaswa kuunganishwa ardhini lakini sio watu wengi wanaweza kuvuta uuzaji huo kutokana na msongamano wa pini ya chip. Sio wasiwasi, hata hivyo, kwa sababu pini ya EA haina kuvuta ndani na "haielea" kama vile pembejeo za mantiki za TTL zinavyofanya. Rejea mchoro wa chip na picha ya sehemu ya bodi kwa mahali pa kukata. Hakikisha kuwa unakata tu maelezo mafupi kwenda moja kwa moja kwenye pini ya EA.

Hatua ya 2: Vifaa

Vifaa
Vifaa

Uunganisho wa vifaa kwa mawasiliano ya UART umeonyeshwa kwenye mchoro hapo juu. Uunganisho wa UART kwa MFRC522 haujawekwa alama kwenye ubao lakini, kama inavyoonekana katika mpango, pini ya SDA inapokea data ya UART na pini ya MISO inasambaza data ya UART. Moduli ya PN532 ina alama za UART upande wa chini wa ubao.

Moduli zote zinaendeshwa kwa volts 3.3 na kiwango cha mantiki ya volt 5 kutoka kwa pini ya PIC TX pia inahitaji kupunguzwa. Uunganisho wa LCD ni usanidi wa kawaida wa 4-bit ambao umetumika katika miradi kadhaa ya hapo awali. Fomati chaguomsingi ya ujumbe wote imewekwa kwa LCD ya kiwango cha 1602 (herufi 16 kwa mistari 2). Pia nina tabia 40 na LCD ya laini 2 ninayotumia kwa dampo la data ghafi wakati wa utatuaji kwa hivyo nilijumuisha ufafanuzi katika programu ambayo inaniruhusu kuchukua nafasi ya nafasi ya ziada ya kuonyesha.

Hatua ya 3: Vitalu vya Takwimu

Lebo za Mifare Classic 1k zinazotumika kwa mradi huu zimesanidiwa kama sekta 16, vitalu vinne vya data kwa kila sekta, ka 16 kwa kila data block. Kati ya vitalu 64 vya data, ni 47 tu zinazoweza kutumika. Kizuizi cha data 0 kina data ya mtengenezaji na vizuizi 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, na 63 huitwa Vitalu vya trela. Vitalu vya trailer ni ya mwisho katika kila sekta na zina funguo mbili na vifungo vya ufikiaji wa block. Funguo na vifungo vya ufikiaji vinatumika kwa vizuizi tu vya data katika tasnia hiyo ili uweze kuwa na funguo tofauti na sheria za ufikiaji kwa kila sekta. Funguo chaguomsingi zimewekwa "FF FF FF FF FFh". Kwa mradi huu wa kimsingi ninatumia kizuizi kimoja tu cha data na kuweka funguo chaguomsingi na bits za ufikiaji. Kuna hati nyingi zinazohusiana na kadi hizi kwa hivyo fanya utaftaji wa mtandaoni wa "Mifare" au tembelea wavuti ya NXP ikiwa unataka kuzitafuta kwa kina zaidi.

Hatua ya 4: Operesheni ya Jumla

Wakati moduli zote mbili ni za kipekee kwa njia ambayo hupatikana na jinsi wanavyopata vitambulisho, kuna mchakato wa jumla ambao unahitajika kumaliza kazi. Kwa mradi huu tunachukulia kuwa vitambulisho ni aina ya Mifare Classic 1k na kwamba tunaruhusu lebo moja kwa wakati kwenye uwanja wa antena. Hatua za kimsingi zimefafanuliwa hapa chini.

· Anzisha moduli: Kwa jumla hii inahitaji vitu kama vile kuandika maadili kwa sajili kwenye chip, kutuma amri za "wakeup", na kuwasha umeme kwenye antena. Katika programu inayoendeshwa na betri ungetaka kuweza kuwasha na kuzima umeme wa antena ili kuhifadhi betri lakini kwa programu hii rahisi tunaiwasha mara moja na kisha kuiacha.

· Futa bendera ya crypto (522 tu): Lebo inapothibitishwa bendera itawekwa ili kumjulisha mtumiaji kuwa mawasiliano na lebo hiyo itasimbwa kwa njia fiche. Bendera hii inahitaji kufutwa na mtumiaji kabla ya skanisho inayofuata, hata kama lebo inayochunguzwa ni ile ile.

· Changanua lebo: Moduli inauliza kimsingi "Je! Kuna mtu yeyote huko nje?" na lebo hujibu "niko hapa". Ikiwa moduli haipati majibu ya haraka huacha kusikiliza. Hiyo inamaanisha kuwa tunahitaji kutuma tena amri za skan kwa moduli mpaka ipate lebo.

· Pata kitambulisho namba ya Kitambulisho cha Mtumiaji (UID): Lebo itajibu ombi la skana na habari ndogo kama vile aina ya lebo ni. Hiyo ina maana kwamba tunaweza kuhitaji kutuma amri nyingine kupata UID yake. UID ni ka nne kwa lebo za Mifare Classic 1k. Ikiwa inaweza kuwa ndefu kwa vitambulisho vingine lakini mradi huu hauwashughulikii.

· Chagua lebo (522 tu): UID hutumiwa kuchagua lebo ambayo mtumiaji anataka kuthibitisha kwa kusoma na kuandika. Hii inategemea uwezekano kwamba kunaweza kuwa na zaidi ya tepe moja kwenye uwanja wa antena. Hiyo sio kesi ya maombi yetu rahisi lakini tunahitaji kuchagua lebo hata hivyo.

· Thibitisha lebo: Hatua hii inahitajika ikiwa tunataka kusoma au kuandika lebo yoyote. Ikiwa tunataka kufanya ni kutofautisha kati ya vitambulisho kwa programu rahisi ya usalama basi UID inatosha. Uthibitishaji unahitaji kwamba tujue UID na kwamba tujue ufunguo wa crypto kwa sekta ya data ya lebo tunayotaka kufikia. Kwa mradi huu tunashikilia funguo chaguomsingi lakini mradi wangu unaofuata unabadilisha funguo ili kitambulisho kitumike kama mkoba wa elektroniki.

Soma au andika lebo: Soma kila wakati rudisha kaiti zote 16 za Kizuizi cha Takwimu kilichoombwa. Waandishi wanahitaji kwamba ka 16 zote ziandikwe kwa wakati mmoja. Ikiwa unataka kusoma au kuandika kizuizi kingine katika tasnia hiyo hiyo ya data tag haiitaji kuthibitishwa tena. Ikiwa unataka kusoma au kuandika kizuizi katika tasnia tofauti ya data basi lebo inahitaji kuthibitishwa tena kwa kutumia ufunguo wa tasnia hiyo.

Hatua ya 5: Mlolongo wa Upataji wa Moduli ya MFRC522

Utaratibu wa kuanza ni pamoja na hatua hizi za kimsingi zinazopatikana katika programu nyingi nilizoangalia:

· Tuma dummy data byte (tazama aya inayofuata)

· Upya upya

Weka faida ya mpokeaji wa RF (ikiwa inataka kitu kingine isipokuwa chaguo-msingi)

· Weka asilimia ya ulizaji ASK hadi 100%

· Weka thamani ya mbegu kwa mahesabu ya CRC

· Washa antena

Pata toleo la firmware (haihitajiki)

Kwa sababu isiyoeleweka moduli yangu inajiimarisha na inadhani kuwa imepokea amri ya kuandika bila data ya ka. Sijui ikiwa hii ni shida tu na moduli yangu lakini sijaona marejeo yoyote kwake mahali pengine. Nilijaribu vifaa na vifaa vya programu upya na wala sikurekebisha shida. Suluhisho langu lilikuwa kuongeza simu ya kusoma ya dummy kusajili "0" (isiyojulikana) mwanzoni mwa utaratibu wa uanzishaji wa moduli. Ikiwa moduli itaona hii kama data ya amri isiyojulikana ya kuandika hapo haionekani kuwa na athari mbaya. Ikiwa inaiona kama amri ya kusoma, basi hakuna kitu muhimu kinachotokea. Inanisumbua kwamba siwezi kufafanua kabisa suala hilo, haswa ikizingatiwa kuwa usanidi wa vifaa vya moduli tu hautatulii shida.

Chip ya RC522 imeundwa na rejista kadhaa, ambazo nyingi zinasomwa na kuandika. Ili kuandika, nambari ya rejista inatumwa kwa moduli ikifuatiwa na thamani ya kuandika. Ili kusoma, nambari ya rejista imeongezwa 0x80 nayo na inatumwa kwa moduli. Jibu la amri ya kuandika ni mwangwi wa rejista iliyofikiwa. Jibu la amri ya kusoma ni yaliyomo kwenye rejista. Programu inachukua fursa ya maarifa hayo ili kuhakikisha kuwa amri ilitekelezwa vizuri.

Hatua ya 6: Mlolongo wa Ufikiaji wa Moduli ya PN532

Utaratibu wa kuanza ni pamoja na hatua hizi zinazohitajika:

· Tuma kamba ya kuanzisha: Hii ni maalum kwa kiolesura cha UART. Mwongozo unasema kwamba kiolesura cha UART kitaamka kwenye ukingo wa tano unaoonekana unaonekana kwenye kiolesura. Inapendekeza kutuma 0x55, 0x55, 0x00, 0x00, 0x00, 0x00. Kwa sehemu kubwa, kuna haja tu ya kuwa na idadi ya kutosha ya herufi zilizo na kingo zinazoinuka na hazipaswi kuonekana kama utangulizi wa amri (00 00 FF).

· Amka moduli: Ilizikwa katika mwongozo wa mtumiaji inaonyesha kuwa moduli inaanzisha aina ya hali ya kulala inayoitwa "LowVbat". Ili kutoka katika jimbo hili tunahitaji kutuma amri ya "SAMConfiguration".

PN532 inatarajia amri kutumwa kwa muundo wa ujumbe uliofafanuliwa ambao ni pamoja na utangulizi, ujumbe, na chapisho. Ujumbe wa majibu hufuata muundo sawa. Ujumbe wa amri na majibu yote ni pamoja na TFI (Kitambulisho cha Sura) na toleo la amri. Amri hutumia TFI ya 0xD4 na majibu hutumia 0xD5. Matoleo ya amri hutofautiana lakini jibu litaongeza toleo la amri kila wakati na kuirudisha kwa njia inayofuata TFI. Msimamo huo unaruhusu ujumbe wa majibu utafutwe kwa urahisi kwa habari husika.

Kila ujumbe wa amri (kufuata utangulizi) una urefu wa ujumbe, nyongeza ya 2 ya urefu wa ujumbe, TFI, amri, data, checksum, na postamble. Programu huunda amri za mtu binafsi na kisha huita utaratibu ambao huhesabu checksum na kuongezea chapisho.

Umbizo la ujumbe kwa jibu ni sawa na ile ya amri. Jibu la kawaida litajumuisha ACK (00 00 FF 00 FF 00) ikifuatiwa na jibu maalum kwa amri. Kila jibu la amri huanza na utangulizi wa 00 00 FF. Jibu linapaswa pia kuwa na kahawia ya TFI ya D5 ikifuatiwa na nambari ya amri iliyoongezwa na 1. Kwa amri yetu ya "SAMConfiguration" (14) ambayo itakuwa 15. Amri ya "SAMConfiguration" inapata jibu hili: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00.

Kuna amri zingine maalum za moduli ambazo zinaweza kutumwa lakini hazihitajiki kwa programu tumizi hii. Nilifanya, hata hivyo, ni pamoja na utaratibu ambao unaweza kuitwa kupata nambari ya toleo la firmware. Jibu la kawaida (baada ya ACK na utangulizi) itakuwa: 06 FA D5 03 32 01 06 07 E8 00. "01 06 07" inaonyesha toleo la firmware namba 1.6.7.

Hatua ya 7: Utaratibu wa Ufikiaji wa Lebo

Baada ya moduli kujiandaa, tunaweza kutuma amri maalum kwa vitambulisho. Ili kusoma au kuandika data ya lebo tunahitaji kuwa na nambari yake ya kitambulisho (UID). UID na ufunguo basi zitatumika kuidhinisha tasnia fulani ya data ya lebo kwa kusoma / kuandika. Kusoma / kuandika data ya lebo kila wakati hufanywa kwa kaiti zote 16 kwenye kizuizi cha data maalum. Hiyo inamaanisha kuwa programu ya kawaida itasoma kizuizi cha data, kurekebisha data kama inavyotakiwa, na kisha kuandika data mpya kurudi kwenye lebo.

Hatua ya 8: Programu

Programu ya kushughulikia vizuizi huitwa kila wakati PIC UART inapokea data ndogo. Katika baadhi ya miradi yangu ya awali ya UART niliweza kupiga kura tu RX kukatiza bendera badala ya kutumia kichochezi cha kusumbua. Hiyo sio kesi kwa programu hii, haswa kwa PN532 ambayo inawasiliana kwa kiwango cha juu zaidi cha baud kuliko RC522. Muunganisho wa UART wa RC522 umepunguzwa kwa baud 9600 wakati chaguo-msingi kwa PN532 ni 115k na inaweza kuwekwa juu kama baud 1.288M. Baiti zilizopokelewa zinahifadhiwa katika eneo la bafa na sehemu kuu ya programu huzipata kama inahitajika.

Bendera ya New_Msg inaonyesha kwamba ka zimepokelewa na Byte_Count inaonyesha ni ngapi. Nimejumuisha utaratibu wa "Disp_Buff" katika programu ambayo inaweza kuitwa kuonyesha yaliyomo kwenye bafa ya kupokea wakati wa utatuaji. Baadhi ya ujumbe wa kurudi utafurika onyesho la kawaida la 1602 lakini nina herufi 40 na 2 line LCD ambayo nimepata kwenye wavuti ya ziada ya elektroniki. Ufafanuzi wa "Max_Line" unaweza kuwekwa kwa saizi yako ya LCD. Ikiwa "Max_Line" inafikiwa, utaratibu wa "Disp_Buff" unaendelea kwa kuandika kwa mstari wa pili. Unaweza kuongeza nambari kidogo kwa utaratibu huo ili kuendelea kwenye mistari ya tatu na nne ikiwa una LCD ya laini 4. Kwa PN532 kuna bendera ambayo inaweza kuweka ili kawaida iwe inamwaga ka zote zilizopokelewa au itupe tu ka 16 za data kutoka kwa jibu la kusoma.

Hakuna haja ya kufuta bafa ya kupokea au Byte_Count kwa sababu kusafisha bendera ya New_Msg itasababisha Byte_Count itolewe na mshughulikiaji wa kukatiza na ndio inayotumika kama faharisi kwenye bafa. New_Msg kawaida husafishwa kabla ya kila hatua ya amri ili matokeo maalum kwa amri hiyo iweze kupatikana na kuthibitishwa kwa urahisi. Katika RC522 hiyo inamaanisha kuwa bafa ya kupokea kawaida huwa na ka 1 hadi 4 tu. Katika hali zingine, kama kusoma data block, amri ya Read_FIFO lazima itolewe mara kadhaa ili kuhamisha ka kutoka FIFO kwenda kwenye bafa ya kupokea. Matokeo yote ya amri ya PN532 huishia kwenye bafa ya kupokea ili utaratibu wa skana ufanywe ili kupata kaiti maalum zinazohitajika.

Kitanzi kuu katika programu kinatafuta lebo na kisha inathibitisha lebo ya kusoma / kuandika. Kwa programu ya jaribio iliyojumuishwa hapa Junk_Num inayobadilishwa hubadilishwa kila wakati kupitia kitanzi kikuu na hutumiwa wakati wa kuandika kwa lebo. Thamani zilizoandikwa hubadilishana kati ya thamani ya Junk_Num na 1's inayosaidia ya Junk_Num. Mwishowe, maadili 16 yaliyoandikwa husomwa na kuonyeshwa. Kuna ujumbe wa kuonyesha kwa kila hatua na kuchelewesha simu za kawaida ili kutoa muda wa kusoma kila ujumbe. Ujumbe wa makosa pia hutolewa lakini kawaida inapaswa kutokea tu ikiwa lebo imeondolewa wakati wa operesheni.

Sehemu ya uanzishaji wa programu ni sehemu ya nambari ambayo hutekelezwa tu kwa nguvu na inarukwa ikiwa usanidi wa programu hugunduliwa. Ujumbe wa makosa kwa ujumla hukomesha na kuweka upya programu kama njia ya kutoka kitanzi kuu. Kuweka upya hufanyika katika utaratibu wa "Tilt" ambayo inawezesha tu Kipima saa cha Waangalizi na kisha huenda kwenye kitanzi kisicho na mwisho kinachongojea muda.

Hatua ya 9: Programu ya kipekee ya MFRC522

Chip ya RC522 inahitaji maagizo ya kiwango cha chini zaidi kuliko Chip ya PN532 kukamilisha mawasiliano na vitambulisho. Ni kama programu kama katika lugha ya mkutano dhidi ya programu katika "C". Tofauti nyingine kubwa ni kwamba RC522 inahitaji kwamba mawasiliano na lebo hiyo ipigwe chapisho kupitia bafa ya FIFO. Taratibu za "Andika_FIFO" na "Soma_FIFO" hushughulikia kazi hizo. Programu ya MFRC522 inajumuisha sehemu ya amri nyingi za kiwango cha chini ambazo kazi kuu zinajengwa.

Hesabu ya hesabu ya hesabu ya hundi kwa RC522 ni tofauti sana kuliko PN532. Baada ya amri ya lebo kujengwa katika FIFO, amri ya moduli inatumwa kuhesabu checksum. Matokeo ya 16-bit hayajaongezwa moja kwa moja kwa amri ya lebo lakini inapatikana kwa kusoma kutoka kwa rejista mbili za 8-bit. Hesabu ya checksum inafuta data kwenye FIFO kwa hivyo mlolongo unaohitajika ni kama ifuatavyo:

· Jenga amri katika FIFO

· Amri hesabu ya checksum

· Jenga amri kwenye FIFO tena

Soma rejista za CRC na andika kaiti za hundi kwa FIFO

· Tuma ama amri ya Kubadilisha au Kuthibitisha

Amri ya Transceive itasambaza bafa ya FIFO na kisha ubadilishe kiatomati kupokea hali kusubiri majibu kutoka kwa lebo. Amri ya Transceive lazima ifuatwe na mpangilio wa StartSend kidogo kwenye BitFramingRegister ili kusambaza data. Amri ya Uthibitishaji haina mahitaji hayo.

Kwa ujumla, maombi ya kificho ya Arduino "C" yanayopatikana mkondoni hutumia sajili za kukatiza bendera na sajili ya muda wa kumaliza ili kuhakikisha kuwa jibu sahihi linapokelewa kwa wakati unaofaa. Kwa maoni yangu hiyo ni zaidi ya maombi haya yasiyo ya wakati muhimu. Badala yake, mimi hutumia muda mfupi wa programu kusubiri majibu na kisha uthibitishe kuwa ni sahihi. Mwongozo wa vitambulisho vya Mifare huelezea wakati wa shughuli mbali mbali na wakati pia inaruhusiwa kwa idadi inayotarajiwa ya ka kupokea. Ucheleweshaji huu wa wakati umejengwa katika sehemu ndogo za amri za kiwango cha chini.

Hatua ya 10: Programu ya kipekee ya PN532

Baada ya moduli kuanza, hatua zinazohitajika kupata na kudhibitisha lebo hutimizwa kwa kuandika amri inayofaa ikifuatiwa na data muhimu. Amri ya skanning inarudisha UID ambayo hutumiwa kisha uthibitishaji. Baada ya hapo, inasoma na kuandika ya lebo kutuma au kurudi 16-ka kwa kizuizi cha data kilichoshughulikiwa.

Mlolongo wa kuanzisha ulielezewa mapema na utaratibu huo wa programu pia hutuma amri ya SAMConfiguration kupata moduli kutoka kwa hali ya "LowVbat". Amri zingine za msingi, kama vile Scan, Uthibitishaji, Soma / Andika Tag, zimejengwa tu kwa mtiririko katika utaratibu unaofaa. Checksum imehesabiwa kwa kuongeza tu ka baiti, kufanya inayosaidia, na kisha kuongeza 1 kuifanya iwe inayosaidia 2. Matokeo 8-bit yameongezewa kwa kamba ya amri kabla tu ya chapisho.

Hakuna FIFO kama kwenye RC522 kwa hivyo ujumbe kamili wa majibu hupokelewa kiatomati. Utaratibu wa "Find_Response" hutafuta bafa ya kupokea data kwa TFI (0xD5). Utaratibu hutumia fursa ya kujua ni nini ujumbe unaotarajiwa unapaswa kuwa na unapuuza majibu rahisi ya ACK ambayo hayajumuishi data. Mara tu TFI ikipatikana, majibu yanayotakikana ni njia inayojulikana kutoka kwake. Amri ya mwongozo na kaiti za hali ya amri zinahifadhiwa na utaratibu wa "Read_Buff" kwa uthibitishaji wa baadaye.

Hiyo ni kwa chapisho hili. Angalia miradi yangu mingine ya elektroniki kwa: www.boomerrules.wordpress.com

Ilipendekeza: