Мазмұны:

RC522 және PN532 RFID негіздері: 10 қадам
RC522 және PN532 RFID негіздері: 10 қадам

Бейне: RC522 және PN532 RFID негіздері: 10 қадам

Бейне: RC522 және PN532 RFID негіздері: 10 қадам
Бейне: Знакомство с RFID и подключение модуля RC522 к Arduino 2024, Шілде
Anonim
RC522 және PN532 RFID негіздері
RC522 және PN532 RFID негіздері

ЕСКЕРТПЕ: Менде RC522 және PN532 үшін Arduino кодын ұсынатын нұсқаулықтар бар.

Біраз уақыт бұрын мен эксперимент жүргізу үшін үш түрлі RFID модулін сатып алдым. Алдыңғы жобада мен негізгі қауіпсіздік функциясын орындау үшін 125 кГц қарапайым модульді қалай пайдалану керектігін түсіндірдім. Мұндай модульдер тек оқуға арналған тегтерді қолданады, сондықтан процесс идентификаторды іздейді, қажет болса сақтайды және сақталған идентификатормен салыстырады. Мен сатып алған басқа модульдер 13.56-МГц жиілігінде жұмыс істейді және оқуға да, жазуға да болатын тегтерді қолданады, сондықтан оларды негізгі қауіпсіздік үшін пайдалану-бұл қалдық. Екі жалпы модульде RC522 чипі немесе PN532 чипі қолданылады - екеуі де NXP.

Егер сіз менің басқа жобаларымды оқыған болсаңыз, мен арзан PIC микроконтроллері мен ассемблер тіліндегі бағдарламаны қолданғанды ұнататынымды білесіз. Мен іздеген нәрсе - бұл модульдермен және RFID тегтерімен сөйлесу үшін қажет қадамдар тізбегі. Модульдерге арналған көптеген бағдарламалар бар, бірақ олардың көпшілігі Arduino үшін «С» бағдарламалық жасақтамасында жазылған және SPI интерфейсін қолданады. Сондай -ақ, чиптерге және Mifare тегтеріне арналған нұсқаулықтар біраз шешілуді талап етеді. Бұл хабарлама, ең алдымен, мен жобаны бастаған кезде қажет болатын ақпарат туралы. Мен сондай -ақ әр модульге қажетті негізгі командаларды орындауға арналған PIC құрастыру бағдарламалық жасақтамасын қосамын. Егер сіз PIC және/немесе құрастыру тілін пайдаланбасаңыз да, бастапқы код сізге кем дегенде әр қадамды орындау үшін қажетті нақты командалар туралы жақсы түсінік беруі керек.

1 -қадам: сериялық интерфейстер

Сериялық интерфейстер
Сериялық интерфейстер
Сериялық интерфейстер
Сериялық интерфейстер
Сериялық интерфейстер
Сериялық интерфейстер
Сериялық интерфейстер
Сериялық интерфейстер

Бұл модульдерде қолданылатын екі микросхема SPI, I2C немесе UART (HSSP) арқылы өзара әрекеттесе алады. PN532 модулінде қажетті интерфейсті таңдау үшін қолданылатын DIP қосқышы бар, бірақ MFRC522 модулі SPI интерфейсі үшін сымды түрде қосылады. Мен PIC кіріктірілген UART қолданғанды жөн көремін, сондықтан MFRC522 модулін UART режиміне енгізудің жолы бар-жоғын білу үшін желіде аң ауладым. Менің байқағаным, тақтада бір ізді кесіп тастасаңыз, бұл жақсы болады. Кесу чиптің EA түйреуішінен 3,3 вольтты тиімді түрде жояды. Техникалық түрде EA түйреуішін жерге қосу керек, бірақ микросхеманың тығыздығын ескере отырып, көптеген адамдар бұл дәнекерлеуді өшіре алмайды. Уайымдамаңыз, өйткені EA түйреуішінде ішкі тартқыш жоқ және TTL логикалық ескі кірістері сияқты «өзгермейді». Кесу нүктесі үшін чип диаграммасы мен тақта қимасының суретін қараңыз. Сіз тек EA түйреуішіне өтетін қысқа ізді кесіп тастағаныңызға көз жеткізіңіз.

2 -қадам: Жабдық

Аппараттық құрал
Аппараттық құрал

UART байланысының аппараттық қосылымдары жоғарыдағы диаграммада көрсетілген. MFRC522 үшін UART қосылымдары тақтада белгіленбеген, бірақ схемада көрсетілгендей, SDA түйрегіші UART мәліметтерін алады, ал MISO түйрегіші UART деректерін жібереді. PN532 модулінде тақтаның төменгі жағында UART белгілері бар.

Екі модуль де 3,3 вольтпен жұмыс істейді және PIC TX түйреуішінің 5 вольтты логикалық деңгейін де шектеу қажет. СКД қосылымы-бұл менің алдыңғы жобаларымда қолданылған стандартты 4 биттік қондырғы. Барлық хабарлар үшін әдепкі формат 1602 СКД үшін орнатылған (2 жолдан 16 таңба). Менде 2 жолақты СКД бойынша 40 таңба бар, мен оны жөндеу кезінде шикізат деректерін жинау үшін қолданамын, сондықтан мен қосымша дисплей кеңістігін пайдалануға мүмкіндік беретін бағдарламалық жасақтамаға анықтама енгіздім.

3 -қадам: Деректер блоктары

Бұл жоба үшін пайдаланылатын Mifare Classic 1k тегтері 16 сектор ретінде конфигурацияланған, бір сектор үшін төрт деректер блогы, бір деректер блогы үшін 16 байт. 64 деректер блогының тек 47 -ін іс жүзінде қолдануға болады. Деректер блогы 0 өндіруші деректерін қамтиды және 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59 және 63 блоктар тіркеме блоктары деп аталады. Трейлер блоктары әр сектордағы соңғы блок болып табылады және оларда екі кілт және блокқа кіру биттері бар. Кілттер мен блокқа қол жеткізу биттері сол сектордағы деректер блоктарына ғана қолданылады, сондықтан сізде әр сектор үшін әр түрлі кілттер мен қатынас ережелері болуы мүмкін. Әдепкі пернелер «FF FF FF FF FFh» күйіне орнатылады. Бұл негізгі жоба үшін мен тек бір деректер блогын қолданамын және әдепкі кілттер мен рұқсат биттерін сақтаймын. Бұл карталарға қатысты көптеген құжаттар бар, сондықтан «Mifare» интернетін іздеңіз немесе NXP веб -сайтына кіріңіз, егер сіз оларды тереңірек зерттегіңіз келсе.

4 -қадам: Жалпы операция

Екі модуль де кіру тәсілдері мен тегтерге қол жеткізудің бірегейлігіне қарамастан, жұмысты орындау үшін қажет жалпы процесс бар. Бұл жоба үшін тегтер Mifare Classic 1k түрі болып табылады және біз антенна өрісінде бір уақытта бір тегке рұқсат береміз деп есептейміз. Негізгі қадамдар төменде анықталған.

· Модульді инициализациялау: Жалпы алғанда, микросхемадағы регистрлерге мәндерді жазу, «ояту» пәрмендерін жіберу және антеннаға қуат қосу сияқты нәрселерді қажет етеді. Батареямен жұмыс істейтін қосымшада сіз батареяны үнемдеу үшін антеннаның қуатын қосып, өшіргіңіз келеді, бірақ бұл қарапайым қолданба үшін біз оны бір рет қосамыз, содан кейін қосамыз.

· Крипто жалаушасын тазалаңыз (тек 522): Тегтің түпнұсқалығы расталған кезде, пайдаланушыға тегпен байланыс шифрланатынын хабарлау үшін жалау орнатылады. Бұл жалаушаны сканерленген тег бірдей болса да, келесі сканерлеуге дейін пайдаланушы тазалауы керек.

· Тег іздеңіз: модуль негізінен “Бұл жерде біреу бар ма?” Деп сұрайды. және тег «Мен осындамын» деп жауап береді. Егер модуль тез жауап бермесе, ол тыңдауды тоқтатады. Бұл модульге тегті тапқанша бірнеше рет сканерлеу командаларын жіберуіміз керек дегенді білдіреді.

· Қолданушының сәйкестендіру нөмірін (UID) алу: тег сканерлеу сұрауына тегтің түрі сияқты шектеулі ақпаратпен жауап береді. Бұл UID алу үшін бізге басқа пәрмен жіберу қажет болуы мүмкін дегенді білдіреді. UID - бұл Mifare Classic 1k тегтері үшін төрт байт. Егер басқа тегтер ұзағырақ болуы мүмкін, бірақ бұл жоба оларға арналмаған.

· Тегті таңдаңыз (тек 522): UID пайдаланушы оқуға және жазуға аутентификациялауды қалайтын тегті таңдау үшін қолданылады. Бұл антенна өрісінде бірнеше тегтер болуы мүмкін екендігіне негізделген. Бұл біздің қарапайым қосымшамыз үшін олай емес, бірақ бәрібір тегті таңдау керек.

· Тегтің түпнұсқалығын растау: егер біз тегті оқуды немесе жазуды қаласақ, бұл қадам қажет. Егер біз қарапайым қауіпсіздік қосымшасының тегтерін ажыратуды қаласақ, UID жеткілікті. Түпнұсқалық растама UID -ті білуімізді және кіргіміз келетін тегтің деректер секторының криптографиялық кілтін білуімізді талап етеді. Бұл жоба үшін біз әдепкі кілттерді ұстаймыз, бірақ менің келесі жобам кілттерді электронды әмиян ретінде пайдалануға болатындай етіп өзгертеді.

· Тегті оқу немесе жазу: Оқу әрқашан сұралған Деректер блогының барлық 16 байтын қайтарады. Жазулар барлық 16 байтты бір уақытта жазуды талап етеді. Егер сіз сол деректер секторында басқа блокты оқығыңыз немесе жазғыңыз келсе, тегті қайтадан растау қажет емес. Егер сіз блокты басқа деректер секторында оқығыңыз немесе жазғыңыз келсе, онда осы сектордың кілті арқылы тегті қайта растау қажет.

5 -қадам: MFRC522 модуліне кіру реттілігі

Іске қосу тәртібі мен қараған көптеген қосымшаларда табылған негізгі қадамдарды қамтиды:

· Деректердің байт жіберу (келесі абзацты қараңыз)

· Жұмсақ қалпына келтіру

· РФ қабылдағышының кірісін орнатыңыз (егер әдепкіден басқа нәрсе қажет болса)

· ASK модуляция пайызын 100% етіп орнатыңыз

· CRC есептеулері үшін тұқым мәнін орнатыңыз

· Антеннаны қосыңыз

· Микробағдарламаның нұсқасын алыңыз (міндетті емес)

Түсініксіз себептермен менің модуль күшейеді және ол деректер байтынсыз жазу командасын алды деп ойлайды. Бұл менің модульге қатысты мәселе ме, білмеймін, бірақ мен басқа жерде оған сілтеме көрмедім. Мен аппараттық құралдарды да, бағдарламалық жасақтаманы да қалпына келтіруге тырыстым, бірақ мәселені шеше алмадым. Менің шешімім модульді инициализациялау процедурасының басында «0» (анықталмаған) тіркеу үшін жалған оқу қоңырауын қосу болды. Егер модуль мұны белгісіз жазу пәрмені үшін деректер ретінде көрсе, онда ешқандай жағымсыз әсерлер болмайды. Егер ол оны оқу пәрмені ретінде көрсе, онда пайдалы ештеңе болмайды. Мен мәселені толық анықтай алмайтыным мазалайды, әсіресе, егер модульдің аппараттық құралын қалпына келтіру мәселені шешпесе.

RC522 чипі көптеген регистрлерден тұрады, олардың көпшілігі оқуға да, жазуға да арналған. Жазуды орындау үшін регистр нөмірі модульге жіберіледі, содан кейін жазылатын мән беріледі. Оқуды орындау үшін регистр нөміріне 0x80 қосылады және ол модульге жіберіледі. Жазу пәрменіне жауап - бұл кірілген регистрдің жаңғырығы. Оқу командасына жауап реестрдің мазмұны болып табылады. Бағдарламалық жасақтама бұл білімді пайдаланып, команданың дұрыс орындалғанын тексереді.

6 -қадам: PN532 модуліне кіру реттілігі

Іске қосу процедурасы келесі қажетті қадамдарды қамтиды:

· Инициализация жолын жіберу: Бұл UART интерфейсіне тән. Нұсқаулықта UART интерфейсі интерфейсте анықталған бесінші көтерілу жиегінде оянатыны айтылады. Ол 0x55, 0x55, 0x00, 0x00, 0x00, 0x00 жіберуді ұсынады. Көбінесе жиектері көтерілетін таңбалардың жеткілікті саны болуы керек және олар командалық кіріспе (00 00 FF) сияқты болмауы керек.

· Модульді ояту: Пайдаланушы нұсқаулығында көрсетілгендей, бұл модуль «LowVbat» деп аталатын ұйқы күйіне өтеді. Бұл күйден шығу үшін бізге «SAMConfiguration» пәрменін жіберу керек.

PN532 пәрмендердің кіріспе, хабарлама және постамблды қамтитын хабардың белгіленген форматында жіберілуін күтеді. Жауап хабарлары бірдей форматта. Командалық және жауап хабарларына TFI (Frame Identifier) және командалық нұсқа кіреді. Пәрменде 0xD4 TFI, ал жауапта 0xD5 қолданылады. Пәрмен нұсқалары әр түрлі, бірақ жауап әрқашан команданың нұсқасын көбейтеді және оны TFI -ден кейін байтқа қайтарады. Бұл сәйкестік жауап хабарламаларын тиісті ақпаратты оңай сканерлеуге мүмкіндік береді.

Әрбір командалық хабарлама (кіріспеден кейін) хабарламаның ұзындығынан, 2 -нің хабарлама ұзындығынан, TFI -ден, пәрменнен, мәліметтерден, бақылау сомасынан және пост -эмблемадан тұрады. Бағдарламалық қамтамасыз ету жеке пәрмендерді құрады, содан кейін бақылау сомасын есептейтін және постамблды қосатын процедураны шақырады.

Жауап беру үшін хабар пішімі пәрменге ұқсас. Әдеттегі жауапқа ACK (00 00 FF 00 FF 00), одан кейін командаға нақты жауап кіреді. Әрбір командалық жауап 00 00 FF кіріспесінен басталады. Жауапта сонымен бірге D5 TFI байты болуы керек, содан кейін команданың нөмірі 1 -ге көбейеді. Біздің «SAMConfiguration» пәрмені үшін (14) 15 болады. «SAMConfiguration» пәрмені мына жауапты алады: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00.

Жіберуге болатын басқа модульдік командалар бар, бірақ олар бұл қосымшаға қажет емес. Мен микробағдарлама нұсқасының нөмірін алу үшін шақыруға болатын тәртіпті енгіздім. Әдеттегі жауап (АКК мен кіріспеден кейін): 06 FA D5 03 32 01 06 07 E8 00 болады. «01 06 07» микробағдарлама нөмірі 1.6.7 көрсетеді.

7 -қадам: тегтерге қол жеткізу реттілігі

Модуль дайын болғаннан кейін біз тегтерге арналған командаларды жібере аламыз. Тегтік деректерді оқу немесе жазу үшін оның сәйкестендіру нөмірі (UID) болуы керек. UID және кілт белгілі бір деректер деректер секторына оқуға/жазуға рұқсат беру үшін пайдаланылады. Белгіленген деректерді оқу/жазу әрқашан көрсетілген деректер блогындағы барлық 16 байт бойынша орындалады. Бұл әдеттегі қосымша деректер блогын оқиды, деректерді қалауынша өзгертеді, содан кейін жаңа деректерді тегке жазады дегенді білдіреді.

8 -қадам: Бағдарламалық қамтамасыз ету

Үзіліс өңдеуші бағдарламалық жасақтамасы PIC UART деректер байтын алған сайын шақырылады. Менің бұрынғы UART жобаларымның кейбірінде мен үзгіш өңдеушіні пайдаланудың орнына RX үзіліс жалауын сұрай алдым. Бұл бағдарламалық жасақтама үшін, әсіресе PN532 үшін, RC522 -ге қарағанда әлдеқайда жоғары беру жылдамдығымен байланысатын жағдайда олай емес. RC522 UART интерфейсі 9600 баумен шектелген, ал PN532 үшін әдепкі 115k құрайды және оны 1.288M байға дейін орнатуға болады. Қабылданған байттар буферлік аймақта сақталады және бағдарламалық қамтамасыз етудің негізгі бөлігі оларды қажет болғанда шығарады.

New_Msg жалаушасы байттардың алынғанын және Byte_Count қанша екенін көрсетеді. Мен бағдарламалық жасақтамаға отладтау кезінде қабылдау буферінің мазмұнын көрсету үшін шақыруға болатын «Disp_Buff» процедурасын енгіздім. Қайтару хабарларының кейбіреулері 1602 типтік дисплейден асып түседі, бірақ менде 2 жолақты СКД бар 40 таңба бар, мен оны электрониканың артық интернет -сайтынан таптым. «Max_Line» анықтамасын СКД өлшемі үшін орнатуға болады. Егер «Max_Line» қол жеткізілсе, «Disp_Buff» процедурасы екінші жолға жазу арқылы жалғасады. Егер сізде 4 жолақты СКД болса, үшінші және төртінші сызықтарды жалғастыру үшін осы тәртіпке кішкене кодты қосуға болады. PN532 үшін жалауша бар, ол тәртіп барлық қабылданған байттарды шығарады немесе оқылған жауаптан 16 деректер байтын тастайды.

Қабылдау буферін немесе Byte_Count -ты тазартудың қажеті жоқ, себебі New_Msg жалаушасын тазарту Byte_Count -ты үзу өңдеушісімен тазартуға әкеледі және бұл буфердегі индекс ретінде пайдаланылады. New_Msg әдетте әрбір пәрмен қадамының алдында тазаланады, осылайша бұл командаға тән нәтижелерді оңай табуға және тексеруге болады. RC522 -де бұл қабылдау буферінің әдетте 1 -ден 4 байтқа дейін болатынын білдіреді. Кейбір жағдайларда, мысалы, деректер блогының оқылуы, байттарды FIFO -дан қабылдау буферіне жылжыту үшін Read_FIFO пәрмені бірнеше рет шығарылуы керек. PN532 үшін барлық командалық нәтижелер қабылдау буферінде болады, сондықтан қажетті байтты табу үшін сканерлеу процедурасы орындалады.

Бағдарламалық жасақтаманың негізгі циклы тегті іздейді, содан кейін тегті оқу/жазу үшін аутентификациялайды. Мұнда енгізілген тестілік бағдарламалық қамтамасыз ету үшін Junk_Num айнымалысы негізгі цикл арқылы әр уақытта өзгертіледі және тегке жазу кезінде қолданылады. Жазылған мәндер Junk_Num мәні мен Junk_Num 1 толықтырушысы арасында ауысады. Соңында 16 жазылған мәндер оқылады және көрсетіледі. Әр хабарды оқуға уақыт беру үшін кідіріссіз қоңыраулармен әр қадам үшін дисплей хабарлары бар. Қате туралы хабарлар да беріледі, бірақ әдетте бұл әрекет тек тег жойылғанда ғана болуы керек.

Бағдарламалық қамтамасыз етуді инициализациялаудың бір бөлігі - бұл кодты қосқан кезде ғана орындалатын және бағдарламалық құралды қалпына келтіру анықталған жағдайда өткізіп жіберілетін бөлім. Қате туралы хабарлар негізгі циклдан шығу әдісі ретінде бағдарламалық жасақтаманы қалпына келтірумен аяқталады. Қалпына келтіру «Еңкейту» тәртібінде болады, ол тек күзетші таймерін қосады, содан кейін күту уақытын күтетін шексіз циклге өтеді.

9 -қадам: MFRC522 бірегей бағдарламалық қамтамасыз ету

RC522 чипі тегтермен байланысты қамтамасыз ету үшін PN532 чипіне қарағанда төмен деңгейдегі нұсқауларды қажет етеді. Бұл «С» бағдарламалауға қарағанда ассамблея тілінде бағдарламалауға ұқсайды. Тағы бір маңызды айырмашылық - RC522 тегпен байланыстың FIFO буфері арқылы өтуін талап етеді. «Write_FIFO» және «Read_FIFO» процедуралары бұл міндеттерді шешеді. MFRC522 бағдарламалық жасақтамасы негізгі функциялары салынған төменгі деңгейдегі командалардың көп бөлігін қамтиды.

RC522 үшін тегтер командасының бақылау сомасын есептеу PN532 -ге қарағанда өте ерекшеленеді. FIFO -да тегтер командасы салынғаннан кейін бақылау сомасын есептеу үшін модуль пәрмені жіберіледі. 16 биттік нәтиже тег командасына автоматты түрде қосылмайды, бірақ екі 8 биттік регистрден оқу үшін қол жетімді. Бақылау сомасының есебі FIFO -дағы деректерді жояды, сондықтан қажетті реттілік келесідей:

· FIFO -да команданы құрыңыз

· Бақылау сомасын есептеуге бұйрық беру

· FIFO -да пәрменді қайтадан құрыңыз

· CRC регистрлерін оқыңыз және бақылау сомасын байтты FIFO -ға жазыңыз

· Transceive немесе Authentication командасын жіберіңіз

Transceive пәрмені FIFO буферін жібереді, содан кейін тегтен жауап күту үшін автоматты түрде қабылдау режиміне ауысады. Деректерді нақты жіберу үшін Transceive пәрмені BitFramingRegister -де StartSend битін орнатуы керек. Аутентификация пәрменінде бұл талап жоқ.

Тұтастай алғанда, Интернетте қол жетімді Arduino «C» кодтық қосымшалары дұрыс жауаптың уақтылы қабылдануын қамтамасыз ету үшін үзіліс жалауша регистрлерін және күту уақытын тіркеу журналын пайдаланады. Менің ойымша, бұл уақытты қажет етпейтін сыни қосымша үшін артық. Оның орнына, мен жауапты күту үшін бағдарламалық қамтамасыз етудің қысқа үзілістерін қолданамын, содан кейін оның дұрыстығын тексеремін. Mifare тегтеріне арналған нұсқаулық әр түрлі транзакциялардың уақытын егжей -тегжейлі сипаттайды, сонымен қатар байттардың күтілетін саны үшін уақыт беріледі. Бұл уақытты кешіктіру төменгі деңгейдегі командалық бағдарламалардың көпшілігіне енгізілген.

10 -қадам: PN532 бірегей бағдарламалық қамтамасыз ету

Модуль инициализацияланғаннан кейін тегті табуға және аутентификациялауға қажетті қадамдар тиісті пәрменді жазып, қажетті деректерді енгізу арқылы орындалады. Сканерлеу пәрмені түпнұсқалық растама үшін пайдаланылатын UID қайтарады. Осыдан кейін, тегті оқиды және жазады, адрестелген деректер блогы үшін 16 байтты жібереді немесе қайтарады.

Инициализациялау реттілігі бұрын егжей -тегжейлі сипатталған және сол бағдарламалық қамтамасыз ету модульді «LowVbat» күйінен шығару үшін SAMConfiguration пәрменін жібереді. Қалған негізгі командалар, мысалы, Сканерлеу, Түпнұсқалық растама, Оқу/Жазу тегі, қолданыстағы тәртіпте жүйелі түрде құрылады. Бақылау сомасы командалық байттарды қосу арқылы, толықтыру жасау арқылы, содан кейін 2 -ні толықтыру үшін 1 қосу арқылы есептеледі. 8-биттік нәтиже пошталық хабарламаның алдында командалық жолға қосылады.

RC522 сияқты FIFO жоқ, сондықтан толық жауап хабарлары автоматты түрде қабылданады. «Find_Response» процедурасы TFI (0xD5) үшін қабылданған деректер буферін сканерлейді. Күн тәртібі күтілетін хабарламалардың не болуы керектігін біледі және деректерді қамтымайтын қарапайым ACK жауаптарын елемейді. TFI табылғаннан кейін, қажетті жауаптар оның белгілі офсеті болып табылады. Пәрменнің жаңғырығы мен пәрмен күйінің байттары кейінірек тексеру үшін «Read_Buff» тәртібімен сақталады.

Бұл бұл пост үшін. Басқа электроника жобаларымды мына жерден қараңыз: www.boomerrules.wordpress.com

Ұсынылған: