From a8dc44e13a348cb33dae3028dcd5c23f84a37445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?p=C7=9D=C9=AF=C9=90=C9=A5o=C9=AF?= Date: Tue, 10 Jun 2014 21:56:42 -0400 Subject: [PATCH 01/96] Update ReadAndWrite.ino arduino uno pins --- examples/ReadAndWrite/ReadAndWrite.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/ReadAndWrite/ReadAndWrite.ino b/examples/ReadAndWrite/ReadAndWrite.ino index 89d96a6..1f1fe79 100644 --- a/examples/ReadAndWrite/ReadAndWrite.ino +++ b/examples/ReadAndWrite/ReadAndWrite.ino @@ -39,8 +39,8 @@ #include #include -#define SS_PIN 53 -#define RST_PIN 5 +#define SS_PIN 10 +#define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { From b7d964acc61138d78f0675825789d5902ee0af79 Mon Sep 17 00:00:00 2001 From: capurso Date: Wed, 16 Jul 2014 18:49:34 +0200 Subject: [PATCH 02/96] Written documentation for the library Three new examples written --- doc/rfidmifare.doc | Bin 0 -> 414208 bytes .../rfid_default_keys/rfid_default_keys.ino | 119 ++++++++++++++ .../rfid_dump_block0/rfid_dump_block0.ino | 87 ++++++++++ .../rfid_write_personal_data.ino | 151 ++++++++++++++++++ 4 files changed, 357 insertions(+) create mode 100644 doc/rfidmifare.doc create mode 100644 examples/rfid_default_keys/rfid_default_keys.ino create mode 100644 examples/rfid_dump_block0/rfid_dump_block0.ino create mode 100644 examples/rfid_write_personal_data/rfid_write_personal_data.ino diff --git a/doc/rfidmifare.doc b/doc/rfidmifare.doc new file mode 100644 index 0000000000000000000000000000000000000000..b4cba20382526986599909bb450a637960307304 GIT binary patch literal 414208 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%0A*=WRNoEMg0xrZi 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%0D(67|qs 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 @^3mD9kF{|f|;R8 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


_@xicq(zP&wi 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�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'X89C<@H$@fp5tz&X!48o&N*+{6>? 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 z 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 z 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 pLHWUhL_W&_GssvVo2UZxw|$H?4l)r@AD$=Nij Date: Sat, 15 Nov 2014 02:21:25 +0100 Subject: [PATCH 24/96] Adding RFID-RC522 Pin Layout image --- doc/fritzing/RFID-RC522 - Pin Layout.png | Bin 0 -> 165594 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 doc/fritzing/RFID-RC522 - Pin Layout.png diff --git a/doc/fritzing/RFID-RC522 - Pin Layout.png b/doc/fritzing/RFID-RC522 - Pin Layout.png new file mode 100755 index 0000000000000000000000000000000000000000..5b4f8421c81d6003028d17f9b5b96d734b5af076 GIT binary patch literal 165594 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

uR`)25m4Fp>N<7-N$ zS*ApZBq*Fer37Q~fyv7q_i7vq-j#IFZfIy=1jy1`LGgfy4q}*hqn&$RNI5WBNX$T` zD%GmUR-vNW z-ioa`CD2rgNQ>5?1xk31?mI`tJ)x6uY+8jf#uei-#g%pw9^C$0ki&ejXw=r$0{6_K z?}$$@oqzvGIXv21<=mE4QIojvOVmzeRHH9Mm++AA&R6~jS2I_rj!~hFnjH*fMa9@` zh+BXv&7zSbuRS}~U0z5}L;vBm(|p%6s9Z{aB)j;c0sDKlJ)gx+(+)IAv1q7X3l-CgBbXfGP-# z1-q2L{`pZ+R#0q9bt#0{^8t>pp{TK-C`E^U9Vzr9{iUHH<1c+i1g;!qgpW@H{C0^N zJmJ{2`xKUfOra-s$1Tu2AY5(mWg0XJ!nbwz_0eLi@(bZWrmx;Q8IQYIWq-Qfh~ZbI zX!8*@9dCXO0Mnkn3>>I}wkHl&{Nh=a}T|nbhPV?g9FF{i1Jv zoS2qt=dgC0y$3U{x10^pl_sF%9tYgKotz>5@9`C#-W3iV;(=V2+HNgu!tgJgTc`Q@ z<~XS&$R8jqGq1N@VlUtR<$c~0^6zk{EvGb;VN4O==>k(y@W|rv5tlTr%#yIDg>+OO^taq z=YHe13-@)n=}D|bE?sJrUYYRr{+JF2xxm=iIQOP`Ql8qlGW>f$*W*KUEc(HgL4n22 zQ`l8k8TlqC6RvD}Uo9QhNlYWC;6M_IeHSZdgq*p_dGPA@@s8yOESO>&U>?gBMshxT z4LIR3W58k9@vO`#;U`mYh55A@ZOQ(J^h&fihI-V!5c0N0uF|rno`0|fx)d>Er9np) zsOSD3y~96frGJ{b-@^iY0U+4@L^(}I`4rSgTNK~@hAl&;s19^;k7=0pfq*=Rp*{UI z`St4K9y~oUF>%l2SkIlmJ|`z9){fJxc@frmz%0W~4ah}%OuFoIMXiM&*T}73rv_w! zV(x*QI*nx|IC)Wa<8~U*Z7PK! zV1(AZK9B}i zEZPmGhA`Yd&8E<-5Q#B)N^w6Ai<*jNz5|aj7ZjbkRmJol)ma^AMV~5hs;}5MI4g4W z@}O8;(;))YD2k9UfCs({)_phQs)y5ScWmFzNrCQ zzxC-#O^3l7kAO9hn?o$gKaw;;2E8Phh)ZeDhc;rhlyFG$q`gNGQyH|z7^``@WI4|C5Sms%}~ z6wU?+b_rjJow9wdY$KUlSitYO&Az0f>3LX#mHza*6>kJVQQ_e*$(##FO@sA1Eoej zoi+tbv06781JHIjqX1Z$|SB;Bg@CbvKl;EUrQU?R(j2{1&b{A zjnDXJ%FBz2s%mRL_&l}zIsQpyk)Sfg)~$_neLe9Gt)APoap3~xkMc{%0JxxfuG+R7 zzJk^!v;6n9)@KpyK%FWDoG}^Z{Pj}c^7s-2?F5>O>}9eg6e)4@l1L0wOzP>57qv}O z5H9VxaqH6JiuLRI7ZPm3Z$4e%Qt`-KpzE&80BUbeWg4LocjntXG{*rR$ww@C*YCQ6 z{^S>zNAsX^IdTMRQFpsRm+`tyXWgfsWlcA4br}g5z8Gc)Z5SLPN2?UhA(?YJ6z$?R zj})CMBj2EQKJ!}g$OjmwmbE+dg04*C2z+Z0XC{Oq!vjrqPoBre#NKVg`Bv6KWZ$vk z$Oiy0Wi*&00;hys!1@P|{4uDr_f?`udB5=v68Yq%3j{{JZZhRy5M|LAqj@w$gu^A? z-~_rexb9sUeq*i+4ym6wY+POY18n<1)MCj|oR&VV_vtU3AN-0)kDyT9i2N#w zG|f(^wnr5wbuN5_e+%)Be(r48ec4v5kr!rzt_T0>>gsB0*7P2zHb_w`CGr#xENyZ0 z+T2$b`&gFbhxU) zdW_SyKmd_~7^1%GD2xR{c!sd)%CjT$`L;Z6kUvD;a&tnz3Zby0l4;7PpI&G2b3&(h zoOA9`bwym%e%f#uZGEh|v@V7tK_e2>5x#!88H1Z8rRTMtF^+|mRdt4@s;cTlHAp&l zb#>_kjJzksopQY(>-)%c^)&_g=Wz1F{?V{TwL-R$49A*)S(DVBwf1VKM*kRCSS*9k6}o*Gzqn;Qe?=AFMAx0dWncV+FaX z$c44y%VF$RPzFOXZJtCsZo0W1(UG;?mf^1HF-J>h~UlM zQIN!T7r!0aG_Od+>_6myOUJggVeNF#1kldDMoku!?=Z^vuDNaR)-ivd%BG67MMIG0 zfF9z7Xanfb`+0w`CJwO~%BF!k)*nj=TECI-SV^nn8=a|%U*JIf*nLuIRbehCG&7n{>@ zg_yK-}s-S#NCL zld;0}JgGnw2Qy(`?A$5qwoLlR-6Wl~YF5nf`P;381W5#ts99)m$jQ$)b#P$54UVV6 z2(z}asYE6ubh-t=09^~_>Kd-ED#=nqwDXuJo(LHhl3M$TsHOWl1y!TWa>qO9I{$__ zxc&;kGR(40?Fza&jJal}{E>2vmrRAthR0M~Z`-TY_YZRQWTWnO0~a*&-#hB*s_A1&pk+tR$Ut`K zN~7K!i@d86+e0?2DHLu>I_)Qw+>$cb&4pTCn2Lt1lw={29A%g*R5$ru_fkSo+nNW+5S_4~wn5!d6zaE`Gs`I?aDK%$$~1 zAsjEO?s_;rx2>Ny3mu^JwGYB0&20?f>+4 zq8kFmCX9j(z*kYEjt?!oNM;49%D_z!M7;r9tL}aqNMWD!&09TQ9j&#E`GcsvRn;fsShBMB{$(%|wzkwcHD|(f5>bPaN7`-#kDevg(}8;s%qQ;eafL z>|Lt->$)6{?5fkoJvp394!IMyOg)Wi%nlo?jAS7BGqRjsBhkcXamkt;0y#(mjF8SI_4%)Q9(Bd zy=OPH|W z&qZ-nD?4yFes}*y&?EE0JQ6+BV5Q zdg*?Z53K`D z+oUjjS&(e4;L6yMIqI~ZK??Z|F3!r(CsLTU-3W$s)-1Y-Af&aH=w*?4o8sIX*~L~x z*;en4(15pvz#P(w2c)75A?x}1+&$vQvzMPh837K#@Xg#8z$kM>;Q#y6YG;-dD@?=I z*7n~alqtg392{Qns?tYvIO8$9;+z6YZ+ej1Jq|DhIV@>JfHbQ$^%cL7jRHN=lcbp~ zwrlndt<$*PF`@eSn)V5dY}Olp*`1y4>k5&CP>kq03z*zHO=rFg8^kO>rer&*&5lsc zMI`UPAtAsq^tkE`c$kpvi38odmYwdCL zSg6{|O(15B%u{Anu!pGgj+@#Khkmix6dW)f{umB&;N7}@gi ze@2Z<;FXP+A0K~%W87pdBFp@{UMitwI|^)30Z2P#9S`)n+{Su2au;D&H%C24uL#Q| zJ_BooB=F8!5GlE*y{9g=n&#Kx>ub?N<|q`GL2z-Qf*b!r%*s{+p2e5B50Lr#v*0$p ziQ_m?18!A?oPJiTWLhwCDE5_+q`$MlO*wQAc;}m~`1M(wAo^}lKa;};de!w*S-tXX z976S-OUQV=4f~0SyPuARMl$ZndrrTqfc7ApEcbgy)-$>^$KST=YqWZo6h=3YC$y$$ z=JAamm@_S#`}tdCiZeD3VykR<^1krNI1X5dfIoM4jtd)*l;RLxtr*~KZd&39J62>$ z=r|vGzsx|WVBsL48Q`l|!k6x~U$j0DTADyXCq#FlInY3O zQs=z|Jd@R5>h3=ywuyJM;Q5da;ug9m{(uqy64Qj%Z@Pi~e0sKhW0BNAku7tI*Z%ck zt1%r99Rl9p>nCnr)a<)p-4EC3l0wwV`T|X0wz=L*)T;iET$h=QjVlrWs-2P2QQvki zofi}r5Qg#sEfqVcKVuE5S?W759xR2M`l;J`CYHX1k(=@|-1lLA|GuzV*uD48f33e? z9BW5FF2T^dAot*)m~HGWBAIbBqlGVlH6%WiNk9F~cmh_4@TRcQ_3^42n6_~Qg3&LN z#q(QMf^#+r4qe7tY{6C85muuC`2#^`;`c z&i1i$dK&eB)*`_`%EWoNG;nIeEC$|vcMTnZpAGPO(}ZKj#Q)+u#h^z*ZO_K~hcrS} zpHtfN822N>6@qMJ;&>h~U9b7J*r^?$8Od-+?(dih|7XJY&o=7%3sQZx!8pqmjxX*e zC`!`x7upmYso}EgQ236ke=YSdmI%;VJS#|shsZY&sdTRf2tMy38kP)q^x zI)IAgFG#^qPFmX#rc0Jv8FUjTKZcvGX!Iqe8gPdg@!hOW1lPUeU|PC)gvhhe#~!%a znai_NR!K@N;&;VxMp=}8@&=|xnAkUJW9_U#gIH}sytg>p?qum&a+zY?8MuavHpU&m zHBFN4f-y&|)`^ihFFd)Q&%XAT(wAt%%~J{(cd$5?qUUwE z0J5M+Hj~8<26U!ImT~K-^6y%`fW+UHb05aybaPF8keXWV+nyY<0ubt^6*D zktug>(*%&SFQj>JN7jnZZO@AT{Z3275PAuiB}0a1!v8==%l?Vr1p@G-LfFb{ppcW6Nmdez*N*Cc^t z2b{M-p{s%#-g!3|rK0!3>uSs^@_$j8yZgA@8dt9Yqhxktu_ZYWfBzOyeggd9mKIO zyIsOc2cz;PiphUE+gGp1ssJiXjWbQ>I41;}1rri(aGE*%z{_}Zn>EEwr{vRF> zpgkk~GhJZo94a5?Y4ppUY7Is?poKCuSmnt>I3bn&+5rg@gkLhuV=W!pa${Fp=8=6c zoE^R$0S2-g_8*W60RB&~ezw>;fOuV3Ips%d& zLR8&qN1OB1S$@d-0E0@MNcX<^P!$tKxK zr=BMaP&tN^+z;P^{SmihPrO!u|7v0(5r{vMv7ka^BgPdpG=3ac`-wIoyzJWCk-WLN zIfAi^=kW@rua}0Ws7-p#{g#a103H_h<-y;7HGVyJnm*F&2p5ng?$#dlI~(n3|8SJ- z%;T3+btob3Pdi&5*6JsZS?h1LG+zzHR!w;SkuhdWwsQAyy?Dd

`FxiHb!UO%TX+cOg*(@&FUwTUzTtuNa#I>5N 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�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 CsryF& literal 0 HcmV?d00001 From 80d4eb7392402c8c02c16a7acc0c51ed29bca722 Mon Sep 17 00:00:00 2001 From: mdxs Date: Sat, 15 Nov 2014 04:40:22 +0100 Subject: [PATCH 25/96] Removing duplicate example --- .../rfid_dump_block0/rfid_dump_block0.ino | 87 ------------------- 1 file changed, 87 deletions(-) delete mode 100644 examples/rfid_dump_block0/rfid_dump_block0.ino diff --git a/examples/rfid_dump_block0/rfid_dump_block0.ino b/examples/rfid_dump_block0/rfid_dump_block0.ino deleted file mode 100644 index 02ee875..0000000 --- a/examples/rfid_dump_block0/rfid_dump_block0.ino +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Dump block 0 of a MIFARE RFID card using a RFID-RC522 reader - * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. - ----------------------------------------------------------------------------- - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board - * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 52 MOSI - * SPI MISO 12 51 MISO - * SPI SCK 13 50 SCK - * - * Hardware required: - * Arduino - * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC - * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203. - * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. - */ - -#include -#include - -#define SS_PIN 10 //Arduino Uno -#define RST_PIN 9 -MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. - -void setup() { - Serial.begin(9600); // Initialize serial communications with the PC - SPI.begin(); // Init SPI bus - mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Print block 0 of a MIFARE PICC "); -} - -void loop() { - - // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. - MFRC522::MIFARE_Key key; - for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; - - // Look for new cards - if ( ! mfrc522.PICC_IsNewCardPresent()) { - return; - } - - // Select one of the cards - if ( ! mfrc522.PICC_ReadCardSerial()) return; - - Serial.print("Card UID:"); //Dump UID - for (byte i = 0; i < mfrc522.uid.size; i++) { - Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); - Serial.print(mfrc522.uid.uidByte[i], HEX); - } - Serial.print(" PICC type: "); // Dump PICC type - byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); - Serial.println(mfrc522.PICC_GetTypeName(piccType)); - - byte buffer[18]; - byte block = 0; - byte status; - //Serial.println("Authenticating using key A..."); - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); - if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - - // Read block - byte byteCount = sizeof(buffer); - status = mfrc522.MIFARE_Read(block, buffer, &byteCount); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - } - else // Dump data - for (byte index = 0; index < 16; index++) { - Serial.print(buffer[index] < 0x10 ? " 0" : " "); - Serial.print(buffer[index], HEX); - if ((index % 4) == 3) Serial.print(" "); - } - Serial.println(" "); - mfrc522.PICC_HaltA(); // Halt PICC - mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD - -} From 26190078a8f5e081e30072714cdd5489a6af8b62 Mon Sep 17 00:00:00 2001 From: mdxs Date: Mon, 24 Nov 2014 10:26:07 +0100 Subject: [PATCH 26/96] Adding explicit UNLICENSE file --- UNLICENSE | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 UNLICENSE diff --git a/UNLICENSE b/UNLICENSE new file mode 100644 index 0000000..00d2e13 --- /dev/null +++ b/UNLICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to \ No newline at end of file From 87fe23281781178680b23f2e43f5904c8928e957 Mon Sep 17 00:00:00 2001 From: mdxs Date: Mon, 24 Nov 2014 11:13:12 +0100 Subject: [PATCH 27/96] Adding (un)license section in README --- README.rst | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.rst b/README.rst index 7adc76c..daa7152 100644 --- a/README.rst +++ b/README.rst @@ -88,6 +88,34 @@ Protocols of the final draft (which might be outdated in some areas). +License +------- +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to http://unlicense.org/ + + History ------- From 16a035c89cc15676988e4ce1da60ab031e8a7a8c Mon Sep 17 00:00:00 2001 From: mdxs Date: Mon, 24 Nov 2014 11:46:57 +0100 Subject: [PATCH 28/96] Add get/set methods for MIFARE Classic value blocks --- MFRC522.cpp | 56 +++++++++++++++++++ MFRC522.h | 4 +- .../MifareClassicValueBlock.ino | 55 +++--------------- keywords.txt | 2 + 4 files changed, 69 insertions(+), 48 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 87a242b..d050812 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -958,6 +958,62 @@ byte MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. return STATUS_OK; } // End MIFARE_Transfer() +/** + * Helper routine to read the current value from a Value Block. + * + * Only for MIFARE Classic and only for blocks in "value block" mode, that + * is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing + * the block must be authenticated before calling this function. + * + * @param[in] blockAddr The block (0x00-0xff) number. + * @param[out] value Current value of the Value Block. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +byte MFRC522::MIFARE_GetValue(byte blockAddr, long *value) { + byte status; + byte buffer[18]; + byte size = sizeof(buffer); + + // Read the block + status = MIFARE_Read(blockAddr, buffer, &size); + if (status == STATUS_OK) { + // Extract the value + *value = (long(buffer[3])<<24) | (long(buffer[2])<<16) | (long(buffer[1])<<8) | long(buffer[0]); + } + return status; +} // End MIFARE_GetValue() + +/** + * Helper routine to write a specific value into a Value Block. + * + * Only for MIFARE Classic and only for blocks in "value block" mode, that + * is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing + * the block must be authenticated before calling this function. + * + * @param[in] blockAddr The block (0x00-0xff) number. + * @param[in] value New value of the Value Block. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +byte MFRC522::MIFARE_SetValue(byte blockAddr, long value) { + byte buffer[18]; + + // Translate the long into 4 bytes; repeated 2x in value block + buffer[0] = buffer[ 8] = (value & 0xFF); + buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8; + buffer[2] = buffer[10] = (value & 0xFF0000) >> 16; + buffer[3] = buffer[11] = (value & 0xFF000000) >> 24; + // Inverse 4 bytes also found in value block + buffer[4] = ~buffer[0]; + buffer[5] = ~buffer[1]; + buffer[6] = ~buffer[2]; + buffer[7] = ~buffer[3]; + // Address 2x with inverse address 2x + buffer[12] = buffer[14] = blockAddr; + buffer[13] = buffer[15] = ~blockAddr; + + // Write the whole data block + return MIFARE_Write(blockAddr, buffer, 16); +} // End MIFARE_SetValue() ///////////////////////////////////////////////////////////////////////////////////// // Support functions diff --git a/MFRC522.h b/MFRC522.h index ec14ca5..ed67d78 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -314,7 +314,9 @@ public: byte MIFARE_Restore(byte blockAddr); byte MIFARE_Transfer(byte blockAddr); byte MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize); - + byte MIFARE_GetValue(byte blockAddr, long *value); + byte MIFARE_SetValue(byte blockAddr, long value); + ///////////////////////////////////////////////////////////////////////////////////// // Support functions ///////////////////////////////////////////////////////////////////////////////////// diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino index 1558e51..e0ec757 100644 --- a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -1,4 +1,4 @@ -/* +/** * ---------------------------------------------------------------------------- * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid * for further details and other examples. @@ -37,7 +37,7 @@ MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. MFRC522::MIFARE_Key key; -/* +/** * Initialize. */ void setup() { @@ -59,7 +59,7 @@ void setup() { Serial.println("BEWARE: Data will be written to the PICC, in sector #1"); } -/* +/** * Main loop. */ void loop() { @@ -207,7 +207,7 @@ void loop() { return; } // Show the new value of valueBlockA - status = mifare_GetValue(valueBlockA, &value); + status = mfrc522.MIFARE_GetValue(valueBlockA, &value); if (status != MFRC522::STATUS_OK) { Serial.print("mifare_GetValue() failed: "); Serial.println(mfrc522.GetStatusCodeName(status)); @@ -231,7 +231,7 @@ void loop() { return; } // Show the new value of valueBlockB - status = mifare_GetValue(valueBlockB, &value); + status = mfrc522.MIFARE_GetValue(valueBlockB, &value); if (status != MFRC522::STATUS_OK) { Serial.print("mifare_GetValue() failed: "); Serial.println(mfrc522.GetStatusCodeName(status)); @@ -242,7 +242,7 @@ void loop() { // Check some boundary... if (value <= -100) { Serial.println("Below -100, so resetting it to 255 = 0xFF just for fun..."); - status = mifare_SetValue(valueBlockB, 255); + status = mfrc522.MIFARE_SetValue(valueBlockB, 255); if (status != MFRC522::STATUS_OK) { Serial.print("mifare_SetValue() failed: "); Serial.println(mfrc522.GetStatusCodeName(status)); @@ -260,7 +260,7 @@ void loop() { mfrc522.PCD_StopCrypto1(); } -/* +/** * Helper routine to dump a byte array as hex values to Serial. */ void dump_byte_array(byte *buffer, byte bufferSize) { @@ -270,46 +270,7 @@ void dump_byte_array(byte *buffer, byte bufferSize) { } } -/* - * Helper routine to read the current value from a Value Block. - */ -byte mifare_GetValue(byte blockAddr, long *value) { - byte status; - byte buffer[18]; - byte size = sizeof(buffer); - - status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); - if (status == MFRC522::STATUS_OK) { - *value = (long(buffer[3])<<24) | (long(buffer[2])<<16) | (long(buffer[1])<<8) | long(buffer[0]); - } - return status; -} - -/* - * Helper routine to write a value into a Value Block. - */ -byte mifare_SetValue(byte blockAddr, long value) { - byte buffer[18]; - - // Translate the long into 4 bytes; repeated 2x in value block - buffer[0] = buffer[ 8] = (value & 0xFF); - buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8; - buffer[2] = buffer[10] = (value & 0xFF0000) >> 16; - buffer[3] = buffer[11] = (value & 0xFF000000) >> 24; - // Inverse 4 bytes also found in value block - buffer[4] = ~buffer[0]; - buffer[5] = ~buffer[1]; - buffer[6] = ~buffer[2]; - buffer[7] = ~buffer[3]; - // Address 2x with inverse address 2x - buffer[12] = buffer[14] = blockAddr; - buffer[13] = buffer[15] = ~blockAddr; - - // Write the whole data block - return mfrc522.MIFARE_Write(blockAddr, buffer, 16); -} - -/* +/** * Ensure that a given block is formatted as a Value Block. */ void formatValueBlock(byte blockAddr) { diff --git a/keywords.txt b/keywords.txt index 891afb4..5690ce9 100644 --- a/keywords.txt +++ b/keywords.txt @@ -47,6 +47,8 @@ MIFARE_Read KEYWORD2 MIFARE_Write KEYWORD2 MIFARE_Increment KEYWORD2 MIFARE_Ultralight_Write KEYWORD2 +MIFARE_GetValue KEYWORD2 +MIFARE_SetValue KEYWORD2 PCD_MIFARE_Transceive KEYWORD2 PICC_GetType KEYWORD2 PICC_DumpToSerial KEYWORD2 From b4fd5f74f75db61c9660a43c4aa7dd3c1988d542 Mon Sep 17 00:00:00 2001 From: mdxs Date: Thu, 27 Nov 2014 13:30:31 +0100 Subject: [PATCH 29/96] Updated the ReadAndWrite example --- examples/ReadAndWrite/ReadAndWrite.ino | 398 +++++++++++-------------- 1 file changed, 178 insertions(+), 220 deletions(-) diff --git a/examples/ReadAndWrite/ReadAndWrite.ino b/examples/ReadAndWrite/ReadAndWrite.ino index 1f1fe79..cfe7dd8 100644 --- a/examples/ReadAndWrite/ReadAndWrite.ino +++ b/examples/ReadAndWrite/ReadAndWrite.ino @@ -1,240 +1,198 @@ -/* - * MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. - * The library file MFRC522.h has a wealth of useful info. Please read it. - * The functions are documented in MFRC522.cpp. - * - * Based on code Dr.Leong ( WWW.B2CQSHOP.COM ) - * Created by Miguel Balboa (circuitito.com), Jan, 2012. - * Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.) +/** + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. * * Released into the public domain. - * - * This sample shows how to setup a block on a MIFARE Classic PICC to be in "Value Block" mode. - * In Value Block mode the operations Increment/Decrement/Restore and Transfer can be used. + * ---------------------------------------------------------------------------- + * This sample shows how to read and write data blocks on a MIFARE Classic PICC + * (= card/tag). * - ----------------------------------------------------------------------------- empty_skull - - - Aggiunti pin per arduino Mega - - Scritto semplice codice per la scrittura e lettura - - - add pin configuration for arduino mega - - write simple read/write Code for new entry user - - http://mac86project.altervista.org/ - - ----------------------------------------------------------------------------- Nicola Coppola - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board + * BEWARE: Data will be written to the PICC, in sector #1 (blocks #4 to #7). + * + * + * Typical pin layout used: * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 51 MOSI - * SPI MISO 12 50 MISO - * SPI SCK 13 52 SCK - * - * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + * MFRC522 Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 + * Signal Pin Pin Pin Pin + * ------------------------------------------------------------ + * RST/Reset RST 9 5 D9 + * SPI SS SDA(SS) 10 53 D10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 + * SPI MISO MISO 12 / ICSP-1 50 D12 + * SPI SCK SCK 13 / ICSP-3 52 D13 */ #include #include -#define SS_PIN 10 -#define RST_PIN 9 -MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +MFRC522::MIFARE_Key key; + +/** + * Initialize. + */ void setup() { - Serial.begin(9600); // Initialize serial communications with the PC - SPI.begin(); // Init SPI bus - mfrc522.PCD_Init(); // Init MFRC522 card - //Serial.println("Scan a MIFARE Classic PICC to demonstrate Value Blocks."); + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + + // Prepare the key (used both as key A and as key B) + // using FFFFFFFFFFFFh which is the default at chip delivery from the factory + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + + Serial.println("Scan a MIFARE Classic PICC to demonstrate read and write."); + Serial.print("Using key (for A and B):"); + dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); + Serial.println(); + + Serial.println("BEWARE: Data will be written to the PICC, in sector #1"); } +/** + * Main loop. + */ void loop() { - - // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. - MFRC522::MIFARE_Key key; - for (byte i = 0; i < 6; i++) { - key.keyByte[i] = 0xFF; - } - // Look for new cards - if ( ! mfrc522.PICC_IsNewCardPresent()) { - return; - } + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; - // Select one of the cards - if ( ! mfrc522.PICC_ReadCardSerial()) { - return; - } - // Now a card is selected. The UID and SAK is in mfrc522.uid. - - // Dump UID - Serial.print("Card UID:"); - for (byte i = 0; i < mfrc522.uid.size; i++) { - Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); - Serial.print(mfrc522.uid.uidByte[i], HEX); - } - Serial.println(); + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; - // Dump PICC type - byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); - Serial.print("PICC type: "); - Serial.println(mfrc522.PICC_GetTypeName(piccType)); - if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI - && piccType != MFRC522::PICC_TYPE_MIFARE_1K - && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { - //Serial.println("This sample only works with MIFARE Classic cards."); - return; - } - - // In this sample we use the second sector (ie block 4-7). the first sector is = 0 - // scegliere settore di lettura da 0 = primo settore - byte sector = 1; - // block sector 0-3(sector0) 4-7(sector1) 8-11(sector2) - // blocchi di scrittura da 0-3(sector0) 4-7(sector1) 8-11(sector2) - byte valueBlockA = 4; - byte valueBlockB = 5; - byte valueBlockC = 6; - byte trailerBlock = 7; - byte status; - // Authenticate using key A. - // avvio l'autentificazione A - //Serial.println("Authenticating using key A..."); - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); - if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - // Authenticate using key B. - // avvio l'autentificazione B - //Serial.println("Authenticating again using key B..."); - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); - if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - - // Writing new value block A - // Scrivo i valori per il settore A - Serial.println("Writing new value block A(4) : the first of the sector TWO "); - byte value1Block[] = { 1,2,3,4, 5,6,7,8, 9,10,255,12, 13,14,15,16, valueBlockA,~valueBlockA,valueBlockA,~valueBlockA }; - status = mfrc522.MIFARE_Write(valueBlockA, value1Block, 16); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - } - /* - - // Writing new value block B - // Scrivo i valori per il settore B - Serial.println("Writing new value block B"); - byte value2Block[] = { 255,255,255,255, 0,0,0,0, 0,0,0,0, 255,255,255,255, valueBlockB,~valueBlockB,valueBlockB,~valueBlockB }; - status = mfrc522.MIFARE_Write(valueBlockB, value2Block, 16); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - } - - // Writing new value block D - // Scrivo i valori per il settore C - Serial.println("Writing new value block C"); - byte value3Block[] = { 255,255,255,255, 0,0,0,0, 0,0,0,0, 255,255,255,255, valueBlockC,~valueBlockC,valueBlockC,~valueBlockC }; - status = mfrc522.MIFARE_Write(valueBlockC, value3Block, 16); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - } - - */ - - - Serial.println("Read block A(4) : the first of the sector TWO"); - byte buffer[18]; - byte size = sizeof(buffer); - // change this: valueBlockA , for read anather block - // cambiate valueBlockA per leggere un altro blocco - status = mfrc522.MIFARE_Read(valueBlockA, buffer, &size); - Serial.print("Settore : 0 Valore :"); - Serial.println(buffer[0]); - Serial.print("Settore : 1 Valore :"); - Serial.println(buffer[1]); - Serial.print("Settore : 2 Valore :"); - Serial.println(buffer[2]); - Serial.print("Settore : 3 Valore :"); - Serial.println(buffer[3]); - Serial.print("Settore : 4 Valore :"); - Serial.println(buffer[4]); - Serial.print("Settore : 5 Valore :"); - Serial.println(buffer[5]); - Serial.print("Settore : 6 Valore :"); - Serial.println(buffer[6]); - Serial.print("Settore : 7 Valore :"); - Serial.println(buffer[7]); - Serial.print("Settore : 8 Valore :"); - Serial.println(buffer[8]); - Serial.print("Settore : 9 Valore :"); - Serial.println(buffer[9]); - Serial.print("Settore :10 Valore :"); - Serial.println(buffer[10]); - Serial.print("Settore :11 Valore :"); - Serial.println(buffer[11]); - Serial.print("Settore :12 Valore :"); - Serial.println(buffer[12]); - Serial.print("Settore :13 Valore :"); - Serial.println(buffer[13]); - Serial.print("Settore :14 Valore :"); - Serial.println(buffer[14]); - Serial.print("Settore :15 Valore :"); - Serial.println(buffer[15]); - - - - //byte value1Block[] = { 1,2,3,4, 5,6,7,8, 9,10,255,12, 13,14,15,16, valueBlockA,~valueBlockA,valueBlockA,~valueBlockA }; - if ( - buffer[0] == 1 && - buffer[1] == 2 && - buffer[2] == 3 && - buffer[3] == 4 && - buffer[4] == 5 && - buffer[5] == 6 && - buffer[6] == 7 && - buffer[7] == 8 && - buffer[8] == 9 && - buffer[9] == 10 && - buffer[10] == 255 && - buffer[11] == 12 && - buffer[12] == 13 && - buffer[13] == 14 && - buffer[14] == 15 && - buffer[15] == 16 - ){ - - // sel a scrittura è uguale alla lettura allora e stato un successo !! - Serial.println("Read block A(4) : the first of the sector TWO : success"); - Serial.println(":-)"); - - }else{ - - // scrittura Fallita - Serial.println("Read block A(4) : the first of the sector TWO : no match - write don't work fine "); - Serial.println(":-( "); - - } - - - // risponde successo - //Serial.println(mfrc522.GetStatusCodeName(status)); - - // Dump the result - //mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); - - // Halt PICC - mfrc522.PICC_HaltA(); + // Show some details of the PICC (that is: the tag/card) + Serial.print("Card UID:"); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print("PICC type: "); + byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); - // Stop encryption on PCD - mfrc522.PCD_StopCrypto1(); + // Check for compatibility + if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI + && piccType != MFRC522::PICC_TYPE_MIFARE_1K + && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { + Serial.println("This sample only works with MIFARE Classic cards."); + return; + } + + // In this sample we use the second sector, + // that is: sector #1, covering block #4 up to and including block #7 + byte sector = 1; + byte blockAddr = 4; + byte dataBlock[] = { + 0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4, + 0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8, + 0x08, 0x09, 0xff, 0x0b, // 9, 10, 255, 12, + 0x0c, 0x0d, 0x0e, 0x0f // 13, 14, 15, 16 + }; + byte trailerBlock = 7; + byte status; + byte buffer[18]; + byte size = sizeof(buffer); + + // Authenticate using key A + Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Show the whole sector as it currently is + Serial.println("Current data in sector:"); + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // Read data from the block + Serial.print("Reading data from block "); Serial.print(blockAddr); + Serial.println(" ..."); + status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + Serial.print("Data in block "); Serial.print(blockAddr); Serial.println(":"); + dump_byte_array(buffer, 16); Serial.println(); + Serial.println(); + + // Authenticate using key B + Serial.println("Authenticating again using key B..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write data to the block + Serial.print("Writing data into block "); Serial.print(blockAddr); + Serial.println(" ..."); + dump_byte_array(dataBlock, 16); Serial.println(); + status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + Serial.println(); + + // Read data from the block (again, should now be what we have written) + Serial.print("Reading data from block "); Serial.print(blockAddr); + Serial.println(" ..."); + status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + Serial.print("Data in block "); Serial.print(blockAddr); Serial.println(":"); + dump_byte_array(buffer, 16); Serial.println(); + // Check that data in block is what we have written + // by counting the number of bytes that are equal + Serial.println("Checking result..."); + byte count = 0; + for (byte i = 0; i < 16; i++) { + // Compare buffer (= what we've read) with dataBlock (= what we've written) + if (buffer[i] == dataBlock[i]) + count++; + } + Serial.print("Number of bytes that match = "); Serial.println(count); + if (count == 16) { + Serial.println("Success :-)"); + } else { + Serial.println("Failure, no match :-("); + Serial.println(" perhaps the write didn't work properly..."); + } + Serial.println(); + // Dump the sector data + Serial.println("Current data in sector:"); + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // Halt PICC + mfrc522.PICC_HaltA(); + // Stop encryption on PCD + mfrc522.PCD_StopCrypto1(); +} + +/** + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } } From 3d6d81defcadeebdcdc3460ad6099c64bce9bc11 Mon Sep 17 00:00:00 2001 From: mdxs Date: Thu, 27 Nov 2014 13:45:42 +0100 Subject: [PATCH 30/96] Fixed typos in example --- examples/MifareClassicValueBlock/MifareClassicValueBlock.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino index e0ec757..e61c42d 100644 --- a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -213,7 +213,7 @@ void loop() { Serial.println(mfrc522.GetStatusCodeName(status)); return; } - Serial.print("New value of value of block "); Serial.print(valueBlockA); + Serial.print("New value of value block "); Serial.print(valueBlockA); Serial.print(" = "); Serial.println(value); // Decrement 10 from the value of valueBlockB and store the result in valueBlockB. @@ -237,7 +237,7 @@ void loop() { Serial.println(mfrc522.GetStatusCodeName(status)); return; } - Serial.print("New value of value of block "); Serial.print(valueBlockB); + Serial.print("New value of value block "); Serial.print(valueBlockB); Serial.print(" = "); Serial.println(value); // Check some boundary... if (value <= -100) { From b1240e9024ece9ad9aae0dbb3fe4741a8dcadde8 Mon Sep 17 00:00:00 2001 From: Tom Clement Date: Sat, 3 Jan 2015 02:30:23 +0100 Subject: [PATCH 31/96] Implemented functionality to write to sector 0 on UID changeable MIFARE cards, using Chinese 'magic sequence' commands. --- MFRC522.cpp | 200 +++++++++++++++++++++++ MFRC522.h | 4 + README.rst | 4 + examples/ChangeUID/ChangeUID.ino | 122 ++++++++++++++ examples/FixBrickedUID/FixBrickedUID.ino | 65 ++++++++ 5 files changed, 395 insertions(+) create mode 100644 examples/ChangeUID/ChangeUID.ino create mode 100644 examples/FixBrickedUID/FixBrickedUID.ino diff --git a/MFRC522.cpp b/MFRC522.cpp index 87a242b..5c09caa 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1371,6 +1371,206 @@ void MFRC522::MIFARE_SetAccessBits( byte *accessBitBuffer, ///< Pointer to byte accessBitBuffer[2] = c3 << 4 | c2; } // End MIFARE_SetAccessBits() + +/** + * Performs the "magic sequence" needed to get Chinese UID changeable + * Mifare cards to allow writing to sector 0, where the card UID is stored. + * + * Note that you do not need to have selected the card through REQA or WUPA, + * this sequence works immediately when the card is in the reader vicinity. + * This means you can use this method even on "bricked" cards that your reader does + * not recognise anymore (see MFRC522::MIFARE_UnbrickUidSector). + * + * Of course with non-bricked devices, you're free to select them before calling this function. + */ +bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { + // Magic sequence: + // > 50 00 57 CD (HALT + CRC) + // > 40 (7 bits only) + // < A (4 bits only) + // > 43 + // < A (4 bits only) + // Then you can write to sector 0 without authenticating + + PICC_HaltA(); // 50 00 57 CD + + byte cmd = 0x40; + byte validBits = 7; /* Our command is only 7 bits. After receiving card response, + this will contain amount of valid response bits. */ + byte response[32]; // Card's response is written here + byte received; + byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 + if( status != STATUS_OK ) { + if( logErrors ) { + Serial.println("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?"); + Serial.print("Error name: "); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if ( received != 1 || response[0] != 0x0A ) { + if ( logErrors ) { + Serial.print("Got bad response on backdoor 0x40 command: "); + Serial.print(response[0], HEX); + Serial.print(" ("); + Serial.print(validBits); + Serial.print(" valid bits)\r\n"); + } + return false; + } + + cmd = 0x43; + validBits = 8; + status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 + if( status != STATUS_OK ) { + if( logErrors ) { + Serial.println("Error in communication at command 0x43, after successfully executing 0x40"); + Serial.print("Error name: "); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if ( received != 1 || response[0] != 0x0A ) { + if ( logErrors ) { + Serial.print("Got bad response on backdoor 0x43 command: "); + Serial.print(response[0], HEX); + Serial.print(" ("); + Serial.print(validBits); + Serial.print(" valid bits)\r\n"); + } + return false; + } + + // You can now write to sector 0 without authenticating! + return true; +} // End MIFARE_OpenUidBackdoor() + +/** + * Reads entire block 0, including all manufacturer data, and overwrites + * that block with the new UID, a freshly calculated BCC, and the original + * manufacturer data. + * + * It assumes a default KEY A of 0xFFFFFFFFFFFF. + * Make sure to have selected the card before this function is called. + */ +bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { + + // UID + BCC byte can not be larger than 16 together + if ( !newUid || !uidSize || uidSize > 15) { + if ( logErrors ) { + Serial.println("New UID buffer empty, size 0, or size > 15 given"); + } + return false; + } + + // Authenticate for reading + MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + byte status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if ( status != STATUS_OK ) { + + if ( status == STATUS_TIMEOUT ) { + // We get a read timeout if no card is selected yet, so let's select one + + // Wake the card up again if sleeping +// byte atqa_answer[2]; +// byte atqa_size = 2; +// PICC_WakeupA(atqa_answer, &atqa_size); + + if ( !PICC_IsNewCardPresent() || !PICC_ReadCardSerial() ) { + Serial.println("No card was previously selected, and none are available. Failed to set UID."); + return false; + } + + status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if ( status != STATUS_OK ) { + // We tried, time to give up + if ( logErrors ) { + Serial.println("Failed to authenticate to card for reading, could not set UID: "); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + else { + if ( logErrors ) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + + // Read block 0 + byte block0_buffer[18]; + byte byteCount = sizeof(block0_buffer); + status = MIFARE_Read((byte)0, block0_buffer, &byteCount); + if ( status != STATUS_OK ) { + if ( logErrors ) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(GetStatusCodeName(status)); + Serial.println("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?"); + } + return false; + } + + // Write new UID to the data we just read, and calculate BCC byte + byte bcc = 0; + for ( int i = 0; i < uidSize; i++ ) { + block0_buffer[i] = newUid[i]; + bcc ^= newUid[i]; + } + + // Write BCC byte to buffer + block0_buffer[uidSize] = bcc; + + // Stop encrypted traffic so we can send raw bytes + PCD_StopCrypto1(); + + // Activate UID backdoor + if ( !MIFARE_OpenUidBackdoor(logErrors) ) { + if ( logErrors ) { + Serial.println("Activating the UID backdoor failed."); + } + return false; + } + + // Write modified block 0 back to card + status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if ( logErrors ) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + + // Wake the card up again + byte atqa_answer[2]; + byte atqa_size = 2; + PICC_WakeupA(atqa_answer, &atqa_size); + + return true; +} + +/** + * Resets entire sector 0 to zeroes, so the card can be read again by readers. + */ +bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { + MIFARE_OpenUidBackdoor( logErrors ); + + byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + // Write modified block 0 back to card + byte status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if ( logErrors ) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(GetStatusCodeName(status)); + } + return false; + } +} + ///////////////////////////////////////////////////////////////////////////////////// // Convenience functions - does not add extra functionality ///////////////////////////////////////////////////////////////////////////////////// diff --git a/MFRC522.h b/MFRC522.h index ec14ca5..60c6cb0 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -3,6 +3,7 @@ * Based on code Dr.Leong ( WWW.B2CQSHOP.COM ) * Created by Miguel Balboa (circuitito.com), Jan, 2012. * Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.) + * Extended by Tom Clement with functionality to write to sector 0 of UID changeable Mifare cards. * Released into the public domain. * * Please read this file for an overview and then MFRC522.cpp for comments on the specific functions. @@ -327,6 +328,9 @@ public: void PICC_DumpMifareClassicSectorToSerial(Uid *uid, MIFARE_Key *key, byte sector); void PICC_DumpMifareUltralightToSerial(); void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3); + bool MIFARE_OpenUidBackdoor(bool logErrors); + bool MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors); + bool MIFARE_UnbrickUidSector(bool logErrors); ///////////////////////////////////////////////////////////////////////////////////// // Convenience functions - does not add extra functionality diff --git a/README.rst b/README.rst index 7adc76c..673f8c4 100644 --- a/README.rst +++ b/README.rst @@ -7,6 +7,8 @@ Read and write different types of Radio-Frequency IDentification (RFID) cards on your Arduino using a RC522 based reader connected via the Serial Peripheral Interface (SPI) interface. +Set the UID, write to sector 0, and unbrick Chinese UID changeable MIFARE cards. + .. _pin layout: @@ -98,6 +100,8 @@ for *"Arduino RFID module Kit 13.56 Mhz with Tags SPI W and R By COOQRobot"*. It was translated into English and rewritten/refactored in the fall of 2013 by Søren Thing Andersen (from http://access.thing.dk). +It has been extended with functionality to alter sector 0 on Chinese UID changeable MIFARE card in Oct 2014 by Tom Clement (from http://tomclement.nl). + .. _arduino: http://arduino.cc/ .. _ebay: http://www.ebay.com/ diff --git a/examples/ChangeUID/ChangeUID.ino b/examples/ChangeUID/ChangeUID.ino new file mode 100644 index 0000000..13ebdb7 --- /dev/null +++ b/examples/ChangeUID/ChangeUID.ino @@ -0,0 +1,122 @@ +/* + * MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. + * The library file MFRC522.h has a wealth of useful info. Please read it. + * The functions are documented in MFRC522.cpp. + * + * Based on code Dr.Leong ( WWW.B2CQSHOP.COM ) + * Created by Miguel Balboa (circuitito.com), Jan, 2012. + * Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.) + * Extended by Tom Clement with functionality to write to sector 0 of UID changeable Mifare cards. + * + * Released into the public domain. + * + * This sample shows how to setup a block on a MIFARE Classic PICC to be in "Value Block" mode. + * In Value Block mode the operations Increment/Decrement/Restore and Transfer can be used. + * + ----------------------------------------------------------------------------- empty_skull + + - Aggiunti pin per arduino Mega + - Scritto semplice codice per la scrittura e lettura + + - add pin configuration for arduino mega + - write simple read/write Code for new entry user + + http://mac86project.altervista.org/ + + ----------------------------------------------------------------------------- Nicola Coppola + * Pin layout should be as follows: + * Signal Pin Pin Pin + * Arduino Uno Arduino Mega MFRC522 board + * ------------------------------------------------------------ + * Reset 9 5 RST + * SPI SS 10 53 SDA + * SPI MOSI 11 51 MOSI + * SPI MISO 12 50 MISO + * SPI SCK 13 52 SCK + * + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +/* Set your new UID here! */ +#define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF} +#define SS_PIN 10 +#define RST_PIN 9 + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. +MFRC522::MIFARE_Key key; + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println("Warning: this example overwrites the UID of your UID changeable card, use with care!"); + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } +} + +// Setting the UID can be as simple as this: +//void loop() { +// byte newUid[] = NEW_UID; +// if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) { +// Serial.println("Wrote new UID to card."); +// } +// delay(1000); +//} + +// But of course this is a more proper approach +void loop() { + + // Look for new cards, and select one if present + if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) { + delay(50); + return; + } + + // Now a card is selected. The UID and SAK is in mfrc522.uid. + + // Dump UID + Serial.print("Card UID:"); + for (byte i = 0; i < mfrc522.uid.size; i++) { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.println(); + + // Dump PICC type +// byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); +// Serial.print("PICC type: "); +// Serial.print(mfrc522.PICC_GetTypeName(piccType)); +// Serial.print(" (SAK "); +// Serial.print(mfrc522.uid.sak); +// Serial.print(")\r\n"); +// if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI +// && piccType != MFRC522::PICC_TYPE_MIFARE_1K +// && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { +// Serial.println("This sample only works with MIFARE Classic cards."); +// return; +// } + + // Set new UID + byte newUid[] = NEW_UID; + if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) { + Serial.println("Wrote new UID to card."); + } + + // Halt PICC and re-select it so DumpToSerial doesn't get confused + mfrc522.PICC_HaltA(); + if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) { + return; + } + + // Dump the new memory contents + Serial.println("New UID and contents:"); + mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); + + delay(2000); +} diff --git a/examples/FixBrickedUID/FixBrickedUID.ino b/examples/FixBrickedUID/FixBrickedUID.ino new file mode 100644 index 0000000..d367c22 --- /dev/null +++ b/examples/FixBrickedUID/FixBrickedUID.ino @@ -0,0 +1,65 @@ +/* + * MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. + * The library file MFRC522.h has a wealth of useful info. Please read it. + * The functions are documented in MFRC522.cpp. + * + * Based on code Dr.Leong ( WWW.B2CQSHOP.COM ) + * Created by Miguel Balboa (circuitito.com), Jan, 2012. + * Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.) + * Extended by Tom Clement with functionality to write to sector 0 of UID changeable Mifare cards. + * + * Released into the public domain. + * + * This sample shows how to fix a UID changeable MIFARE cards that have a corrupted sector 0. + * + ----------------------------------------------------------------------------- empty_skull + + - Aggiunti pin per arduino Mega + - Scritto semplice codice per la scrittura e lettura + + - add pin configuration for arduino mega + - write simple read/write Code for new entry user + + http://mac86project.altervista.org/ + + ----------------------------------------------------------------------------- Nicola Coppola + * Pin layout should be as follows: + * Signal Pin Pin Pin + * Arduino Uno Arduino Mega MFRC522 board + * ------------------------------------------------------------ + * Reset 9 5 RST + * SPI SS 10 53 SDA + * SPI MOSI 11 51 MOSI + * SPI MISO 12 50 MISO + * SPI SCK 13 52 SCK + * + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +#define SS_PIN 10 +#define RST_PIN 9 + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. +MFRC522::MIFARE_Key key; + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println("Warning: this example clears your mifare UID, use with care!"); + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } +} + +void loop() { + if ( mfrc522.MIFARE_UnbrickUidSector(false) ) { + Serial.println("Cleared sector 0, set UID to 1234. Card should be responsive again now."); + } + delay(1000); +} From df1e6fa6df480082bf10c70d0e8fb4e8261c1bb9 Mon Sep 17 00:00:00 2001 From: Tom Clement Date: Sat, 3 Jan 2015 02:31:59 +0100 Subject: [PATCH 32/96] Implemented functionality to write to sector 0 on UID changeable MIFARE cards, using Chinese 'magic sequence' commands. --- examples/ChangeUID/ChangeUID.ino | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/ChangeUID/ChangeUID.ino b/examples/ChangeUID/ChangeUID.ino index 13ebdb7..75f126d 100644 --- a/examples/ChangeUID/ChangeUID.ino +++ b/examples/ChangeUID/ChangeUID.ino @@ -10,8 +10,7 @@ * * Released into the public domain. * - * This sample shows how to setup a block on a MIFARE Classic PICC to be in "Value Block" mode. - * In Value Block mode the operations Increment/Decrement/Restore and Transfer can be used. + * This sample shows how to set the UID on a UID changeable MIFARE card. * ----------------------------------------------------------------------------- empty_skull From 27b505b89bb92b75c451e9e51fe427b06f433671 Mon Sep 17 00:00:00 2001 From: Tim Pulver Date: Tue, 6 Jan 2015 17:20:22 +0100 Subject: [PATCH 33/96] Update README.rst Added Teensy 3.1 Pins --- README.rst | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.rst b/README.rst index 058c985..e40ba73 100644 --- a/README.rst +++ b/README.rst @@ -17,23 +17,23 @@ Pin Layout The following table shows the typical pin layout used: -+-----------+----------+---------------------------------+ -| | PCD | Arduino | -| +----------+-------------+---------+---------+ -| | MFRC522 | Uno | Mega | Nano v3 | -+-----------+----------+-------------+---------+---------+ -| Signal | Pin | Pin | Pin | Pin | -+===========+==========+=============+=========+=========+ -| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | -+-----------+----------+-------------+---------+---------+ -| SPI SS | SDA [3]_ | 10 [2]_ | 53 [2]_ | D10 | -+-----------+----------+-------------+---------+---------+ -| SPI MOSI | MOSI | 11 / ICSP-4 | 52 | D11 | -+-----------+----------+-------------+---------+---------+ -| SPI MISO | MISO | 12 / ICSP-1 | 51 | D12 | -+-----------+----------+-------------+---------+---------+ -| SPI SCK | SCK | 13 / ICSP-3 | 50 | D13 | -+-----------+----------+-------------+---------+---------+ ++-----------+----------+---------------------------------+--------+ +| | PCD | Arduino | Teensy | +| +----------+-------------+---------+---------+--------+ +| | MFRC522 | Uno | Mega | Nano v3 | 3.1 | ++-----------+----------+-------------+---------+---------+--------+ +| Signal | Pin | Pin | Pin | Pin | Pin | ++===========+==========+=============+=========+=========+========+ +| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | 9 | ++-----------+----------+-------------+---------+---------+--------+ +| SPI SS | SDA [3]_ | 10 [2]_ | 53 [2]_ | D10 | 10 | ++-----------+----------+-------------+---------+---------+--------+ +| SPI MOSI | MOSI | 11 / ICSP-4 | 52 | D11 | 11 | ++-----------+----------+-------------+---------+---------+--------+ +| SPI MISO | MISO | 12 / ICSP-1 | 51 | D12 | 12 | ++-----------+----------+-------------+---------+---------+--------+ +| SPI SCK | SCK | 13 / ICSP-3 | 50 | D13 | 13 | ++-----------+----------+-------------+---------+---------+--------+ .. [1] Configurable, typically defined as RST_PIN in sketch/program. .. [2] Configurable, typically defined as SS_PIN in sketch/program. @@ -135,4 +135,4 @@ It has been extended with functionality to alter sector 0 on Chinese UID changea .. _ebay: http://www.ebay.com/ .. _iso/iec 14443a: http://en.wikipedia.org/wiki/ISO/IEC_14443 .. _iso/iec 14443-3\:2011 part 3: -.. _nxp mfrc522: http://www.nxp.com/documents/data_sheet/MFRC522.pdf \ No newline at end of file +.. _nxp mfrc522: http://www.nxp.com/documents/data_sheet/MFRC522.pdf From 2f97c865fbfe13b5c14fff4986db65c1b1793bdd Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 01:07:24 +0000 Subject: [PATCH 34/96] Update README.rst Added pin layouts for ATMEGA32U4-based Arduinos --- README.rst | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.rst b/README.rst index e40ba73..a210eae 100644 --- a/README.rst +++ b/README.rst @@ -17,23 +17,23 @@ Pin Layout The following table shows the typical pin layout used: -+-----------+----------+---------------------------------+--------+ -| | PCD | Arduino | Teensy | -| +----------+-------------+---------+---------+--------+ -| | MFRC522 | Uno | Mega | Nano v3 | 3.1 | -+-----------+----------+-------------+---------+---------+--------+ -| Signal | Pin | Pin | Pin | Pin | Pin | -+===========+==========+=============+=========+=========+========+ -| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | 9 | -+-----------+----------+-------------+---------+---------+--------+ -| SPI SS | SDA [3]_ | 10 [2]_ | 53 [2]_ | D10 | 10 | -+-----------+----------+-------------+---------+---------+--------+ -| SPI MOSI | MOSI | 11 / ICSP-4 | 52 | D11 | 11 | -+-----------+----------+-------------+---------+---------+--------+ -| SPI MISO | MISO | 12 / ICSP-1 | 51 | D12 | 12 | -+-----------+----------+-------------+---------+---------+--------+ -| SPI SCK | SCK | 13 / ICSP-3 | 50 | D13 | 13 | -+-----------+----------+-------------+---------+---------+--------+ ++-----------+----------+-------------------------------------------------------------+--------+ +| | PCD | Arduino | Teensy | +| +----------+-------------+---------+---------+---------------+-----------+--------+ +| | MFRC522 | Uno | Mega | Nano v3 |Leonardo/Micro | Pro Micro | 3.1 | ++-----------+----------+-------------+---------+---------+---------------+-----------+--------+ +| Signal | Pin | Pin | Pin | Pin | Pin | Pin | Pin | ++===========+==========+=============+=========+=========+===============+===========+========+ +| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | RESET/ICSP-5 | RST | 9 | ++-----------+----------+-------------+---------+---------+---------------+-----------+--------+ +| SPI SS | SDA [3]_ | 10 [2]_ | 53 [2]_ | D10 | 10 | 10 | 10 | ++-----------+----------+-------------+---------+---------+---------------+-----------+--------+ +| SPI MOSI | MOSI | 11 / ICSP-4 | 52 | D11 | ICSP-4 | 16 | 11 | ++-----------+----------+-------------+---------+---------+---------------+-----------+--------+ +| SPI MISO | MISO | 12 / ICSP-1 | 51 | D12 | ICSP-1 | 14 | 12 | ++-----------+----------+-------------+---------+---------+---------------+-----------+--------+ +| SPI SCK | SCK | 13 / ICSP-3 | 50 | D13 | ICSP-3 | 15 | 13 | ++-----------+----------+-------------+---------+---------+---------------+-----------+--------+ .. [1] Configurable, typically defined as RST_PIN in sketch/program. .. [2] Configurable, typically defined as SS_PIN in sketch/program. From 19ada3f64a65a7e246ae30323385dc9b67d110bc Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 01:08:05 +0000 Subject: [PATCH 35/96] Update DumpInfo.ino Added pin layouts for ATMEGA32U4-based Arduinos in comment; code unchanged --- examples/DumpInfo/DumpInfo.ino | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/DumpInfo/DumpInfo.ino b/examples/DumpInfo/DumpInfo.ino index ca1e83f..40375a4 100644 --- a/examples/DumpInfo/DumpInfo.ino +++ b/examples/DumpInfo/DumpInfo.ino @@ -26,16 +26,16 @@ * reading distance until complete. * * Typical pin layout used: - * ------------------------------------------------------------ - * MFRC522 Arduino Arduino Arduino - * Reader/PCD Uno Mega Nano v3 - * Signal Pin Pin Pin Pin - * ------------------------------------------------------------ - * RST/Reset RST 9 5 D9 - * SPI SS SDA(SS) 10 53 D10 - * SPI MOSI MOSI 11 / ICSP-4 51 D11 - * SPI MISO MISO 12 / ICSP-1 50 D12 - * SPI SCK SCK 13 / ICSP-3 52 D13 + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 */ #include @@ -85,4 +85,4 @@ void ShowReaderDetails() { if ((v == 0x00) || (v == 0xFF)) { Serial.println("WARNING: Communication failure, is the MFRC522 properly connected?"); } -} \ No newline at end of file +} From 90729874011efa50d547c184d805bde9e7f5d246 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 22:03:45 +0000 Subject: [PATCH 36/96] Update DumpInfo.ino Added pin layouts for ATMEGA32U4-based Arduinos in comment; code updated to account for serial behaviors of ATMEGA32U4-based Arduinos --- examples/DumpInfo/DumpInfo.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/DumpInfo/DumpInfo.ino b/examples/DumpInfo/DumpInfo.ino index 40375a4..94010d3 100644 --- a/examples/DumpInfo/DumpInfo.ino +++ b/examples/DumpInfo/DumpInfo.ino @@ -48,6 +48,7 @@ MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance void setup() { Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 ShowReaderDetails(); // Show details of PCD - MFRC522 Card Reader details From 43209541ee13409c53303eab5dba484f3e00c3d7 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 23:44:43 +0000 Subject: [PATCH 37/96] Update ChangeUID.ino Added new pin layout info; standardizing format and info --- examples/ChangeUID/ChangeUID.ino | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/examples/ChangeUID/ChangeUID.ino b/examples/ChangeUID/ChangeUID.ino index 75f126d..aa3f53b 100644 --- a/examples/ChangeUID/ChangeUID.ino +++ b/examples/ChangeUID/ChangeUID.ino @@ -23,15 +23,17 @@ http://mac86project.altervista.org/ ----------------------------------------------------------------------------- Nicola Coppola - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board - * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 51 MOSI - * SPI MISO 12 50 MISO - * SPI SCK 13 52 SCK + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 * * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. */ From e4a25489b2d47c0f9d6b55b67d10d0697c399323 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 23:46:18 +0000 Subject: [PATCH 38/96] Update FixBrickedUID.ino Added new pin layout info; standardizing format and info --- examples/FixBrickedUID/FixBrickedUID.ino | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/examples/FixBrickedUID/FixBrickedUID.ino b/examples/FixBrickedUID/FixBrickedUID.ino index d367c22..0ddaf93 100644 --- a/examples/FixBrickedUID/FixBrickedUID.ino +++ b/examples/FixBrickedUID/FixBrickedUID.ino @@ -23,15 +23,17 @@ http://mac86project.altervista.org/ ----------------------------------------------------------------------------- Nicola Coppola - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board - * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 51 MOSI - * SPI MISO 12 50 MISO - * SPI SCK 13 52 SCK + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 * * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. */ From dde29687c2fa5e1727d89bd580719f6bb8df25ec Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 23:47:53 +0000 Subject: [PATCH 39/96] Update rfid_default_keys.ino Added new pin layout info; standardizing format and info --- .../rfid_default_keys/rfid_default_keys.ino | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/rfid_default_keys/rfid_default_keys.ino b/examples/rfid_default_keys/rfid_default_keys.ino index 11d3f7c..ea4fe08 100644 --- a/examples/rfid_default_keys/rfid_default_keys.ino +++ b/examples/rfid_default_keys/rfid_default_keys.ino @@ -12,16 +12,17 @@ * block 0 of a MIFARE RFID card using a RFID-RC522 reader. * * Typical pin layout used: - * ------------------------------------------------------------ - * MFRC522 Arduino Arduino Arduino - * Reader/PCD Uno Mega Nano v3 - * Signal Pin Pin Pin Pin - * ------------------------------------------------------------ - * RST/Reset RST 9 5 D9 - * SPI SS SDA(SS) 10 53 D10 - * SPI MOSI MOSI 11 / ICSP-4 51 D11 - * SPI MISO MISO 12 / ICSP-1 50 D12 - * SPI SCK SCK 13 / ICSP-3 52 D13 + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * */ #include From 993076a0c819da21d5dcacfca871908df9c4c63f Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 23:49:43 +0000 Subject: [PATCH 40/96] Update MifareClassicValueBlock.ino Added new pin layout info; standardizing format and info --- .../MifareClassicValueBlock.ino | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino index e61c42d..f88f191 100644 --- a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -15,16 +15,17 @@ * * * Typical pin layout used: - * ------------------------------------------------------------ - * MFRC522 Arduino Arduino Arduino - * Reader/PCD Uno Mega Nano v3 - * Signal Pin Pin Pin Pin - * ------------------------------------------------------------ - * RST/Reset RST 9 5 D9 - * SPI SS SDA(SS) 10 53 D10 - * SPI MOSI MOSI 11 / ICSP-4 51 D11 - * SPI MISO MISO 12 / ICSP-1 50 D12 - * SPI SCK SCK 13 / ICSP-3 52 D13 + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * */ #include From 499e13d33cff512fafc975f6a40735ee5e45fa21 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sat, 24 Jan 2015 23:51:13 +0000 Subject: [PATCH 41/96] Update ReadAndWrite.ino Added new pin layout info; standardizing format and info --- examples/ReadAndWrite/ReadAndWrite.ino | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/ReadAndWrite/ReadAndWrite.ino b/examples/ReadAndWrite/ReadAndWrite.ino index cfe7dd8..690771b 100644 --- a/examples/ReadAndWrite/ReadAndWrite.ino +++ b/examples/ReadAndWrite/ReadAndWrite.ino @@ -14,16 +14,17 @@ * * * Typical pin layout used: - * ------------------------------------------------------------ - * MFRC522 Arduino Arduino Arduino - * Reader/PCD Uno Mega Nano v3 - * Signal Pin Pin Pin Pin - * ------------------------------------------------------------ - * RST/Reset RST 9 5 D9 - * SPI SS SDA(SS) 10 53 D10 - * SPI MOSI MOSI 11 / ICSP-4 51 D11 - * SPI MISO MISO 12 / ICSP-1 50 D12 - * SPI SCK SCK 13 / ICSP-3 52 D13 + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * */ #include From 70bff5c1285df6da24b8fc15dd8ef52c2775ee54 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sun, 25 Jan 2015 00:04:30 +0000 Subject: [PATCH 42/96] Update ChangeUID.ino Updated code to account for serial behavior change in ATMEGA32U4 --- examples/ChangeUID/ChangeUID.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/ChangeUID/ChangeUID.ino b/examples/ChangeUID/ChangeUID.ino index aa3f53b..0a0a2ff 100644 --- a/examples/ChangeUID/ChangeUID.ino +++ b/examples/ChangeUID/ChangeUID.ino @@ -51,7 +51,8 @@ MFRC522::MIFARE_Key key; void setup() { Serial.begin(9600); // Initialize serial communications with the PC - SPI.begin(); // Init SPI bus + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card Serial.println("Warning: this example overwrites the UID of your UID changeable card, use with care!"); From 4a58153fd5b5cef8688482c6d3d5607296d4dcfc Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sun, 25 Jan 2015 00:06:41 +0000 Subject: [PATCH 43/96] Update FixBrickedUID.ino Updated code to account for serial behavior change in ATMEGA32U4 --- examples/FixBrickedUID/FixBrickedUID.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/FixBrickedUID/FixBrickedUID.ino b/examples/FixBrickedUID/FixBrickedUID.ino index 0ddaf93..c7aef0f 100644 --- a/examples/FixBrickedUID/FixBrickedUID.ino +++ b/examples/FixBrickedUID/FixBrickedUID.ino @@ -49,7 +49,8 @@ MFRC522::MIFARE_Key key; void setup() { Serial.begin(9600); // Initialize serial communications with the PC - SPI.begin(); // Init SPI bus + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card Serial.println("Warning: this example clears your mifare UID, use with care!"); From 0627e6e9df5fc1648ba98a123b568ae6e9d94112 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sun, 25 Jan 2015 00:07:26 +0000 Subject: [PATCH 44/96] Update rfid_default_keys.ino Updated code to account for serial behavior change in ATMEGA32U4 --- examples/rfid_default_keys/rfid_default_keys.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/rfid_default_keys/rfid_default_keys.ino b/examples/rfid_default_keys/rfid_default_keys.ino index ea4fe08..16693ef 100644 --- a/examples/rfid_default_keys/rfid_default_keys.ino +++ b/examples/rfid_default_keys/rfid_default_keys.ino @@ -53,6 +53,7 @@ byte knownKeys[NR_KNOWN_KEYS][MFRC522::MF_KEY_SIZE] = { */ void setup() { Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card Serial.println("Try the most used default keys to print block 0 of a MIFARE PICC."); From af323a12abe02f6ad7095cca18536fc6d1791219 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sun, 25 Jan 2015 00:09:20 +0000 Subject: [PATCH 45/96] Update ReadAndWrite.ino Updated code to account for serial behavior change in ATMEGA32U4 --- examples/ReadAndWrite/ReadAndWrite.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/ReadAndWrite/ReadAndWrite.ino b/examples/ReadAndWrite/ReadAndWrite.ino index 690771b..6d7b6b6 100644 --- a/examples/ReadAndWrite/ReadAndWrite.ino +++ b/examples/ReadAndWrite/ReadAndWrite.ino @@ -42,6 +42,7 @@ MFRC522::MIFARE_Key key; */ void setup() { Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card From 5657a16e1542a39973e8c2947d15645f91db0e00 Mon Sep 17 00:00:00 2001 From: UnKnoWn-Consortium Date: Sun, 25 Jan 2015 00:11:04 +0000 Subject: [PATCH 46/96] Update MifareClassicValueBlock.ino Updated code to account for serial behavior change in ATMEGA32U4 --- examples/MifareClassicValueBlock/MifareClassicValueBlock.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino index f88f191..588e5d0 100644 --- a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -43,6 +43,7 @@ MFRC522::MIFARE_Key key; */ void setup() { Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card From 605a1d755f3762e037cb7545c5cd868794d66ce7 Mon Sep 17 00:00:00 2001 From: Sebastian Kurella Date: Fri, 30 Jan 2015 15:29:39 +0000 Subject: [PATCH 47/96] Move strings to PROGMEM string tables This frees up almost 1KB of dynamic memory. --- MFRC522.cpp | 59 ++++++++++++++++------------------- MFRC522.h | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 112 insertions(+), 35 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 09e0c31..ad4495a 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -6,6 +6,7 @@ #include #include +#include ///////////////////////////////////////////////////////////////////////////////////// // Functions for setting up the Arduino @@ -1072,20 +1073,11 @@ byte MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data t */ const char *MFRC522::GetStatusCodeName(byte code ///< One of the StatusCode enums. ) { - switch (code) { - case STATUS_OK: return "Success."; break; - case STATUS_ERROR: return "Error in communication."; break; - case STATUS_COLLISION: return "Collission detected."; break; - case STATUS_TIMEOUT: return "Timeout in communication."; break; - case STATUS_NO_ROOM: return "A buffer is not big enough."; break; - case STATUS_INTERNAL_ERROR: return "Internal error in the code. Should not happen."; break; - case STATUS_INVALID: return "Invalid argument."; break; - case STATUS_CRC_WRONG: return "The CRC_A does not match."; break; - case STATUS_MIFARE_NACK: return "A MIFARE PICC responded with NAK."; break; - default: - return "Unknown error"; - break; + if (code == 0 || code > STATUS_MIFARE_NACK) { + return "Unknown error"; } + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_StatusCodeName[code - 1]))); + return stringBuffer; } // End GetStatusCodeName() /** @@ -1127,19 +1119,12 @@ byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select */ const char *MFRC522::PICC_GetTypeName(byte piccType ///< One of the PICC_Type enums. ) { - switch (piccType) { - case PICC_TYPE_ISO_14443_4: return "PICC compliant with ISO/IEC 14443-4"; break; - case PICC_TYPE_ISO_18092: return "PICC compliant with ISO/IEC 18092 (NFC)"; break; - case PICC_TYPE_MIFARE_MINI: return "MIFARE Mini, 320 bytes"; break; - case PICC_TYPE_MIFARE_1K: return "MIFARE 1KB"; break; - case PICC_TYPE_MIFARE_4K: return "MIFARE 4KB"; break; - case PICC_TYPE_MIFARE_UL: return "MIFARE Ultralight or Ultralight C"; break; - case PICC_TYPE_MIFARE_PLUS: return "MIFARE Plus"; break; - case PICC_TYPE_TNP3XXX: return "MIFARE TNP3XXX"; break; - case PICC_TYPE_NOT_COMPLETE: return "SAK indicates UID is not complete."; break; - case PICC_TYPE_UNKNOWN: - default: return "Unknown type"; break; + if (piccType == PICC_TYPE_UNKNOWN) { + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_PICC_TYPE_NOT_COMPLETE]))); + } else { + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_PICC_TypeName[piccType]))); } + return stringBuffer; } // End PICC_GetTypeName() /** @@ -1184,7 +1169,8 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro case PICC_TYPE_ISO_18092: case PICC_TYPE_MIFARE_PLUS: case PICC_TYPE_TNP3XXX: - Serial.println("Dumping memory contents not implemented for that PICC type."); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_PICC_TYPE_TNP3XXX]))); + Serial.println(stringBuffer); break; case PICC_TYPE_UNKNOWN: @@ -1458,7 +1444,8 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 if( status != STATUS_OK ) { if( logErrors ) { - Serial.println("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?"); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_NO_RESPONSE_AFTER_HALT]))); + Serial.println(stringBuffer); Serial.print("Error name: "); Serial.println(GetStatusCodeName(status)); } @@ -1466,7 +1453,8 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { } if ( received != 1 || response[0] != 0x0A ) { if ( logErrors ) { - Serial.print("Got bad response on backdoor 0x40 command: "); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_COMMAND_0x40_RESPONSE]))); + Serial.print(stringBuffer); Serial.print(response[0], HEX); Serial.print(" ("); Serial.print(validBits); @@ -1480,7 +1468,8 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 if( status != STATUS_OK ) { if( logErrors ) { - Serial.println("Error in communication at command 0x43, after successfully executing 0x40"); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_COMMAND_0x43_COMM]))); + Serial.println(stringBuffer); Serial.print("Error name: "); Serial.println(GetStatusCodeName(status)); } @@ -1488,7 +1477,8 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { } if ( received != 1 || response[0] != 0x0A ) { if ( logErrors ) { - Serial.print("Got bad response on backdoor 0x43 command: "); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_COMMAND_0x43_RESPONSE]))); + Serial.print(stringBuffer); Serial.print(response[0], HEX); Serial.print(" ("); Serial.print(validBits); @@ -1514,7 +1504,8 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // UID + BCC byte can not be larger than 16 together if ( !newUid || !uidSize || uidSize > 15) { if ( logErrors ) { - Serial.println("New UID buffer empty, size 0, or size > 15 given"); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_WRONG_UID]))); + Serial.println(stringBuffer); } return false; } @@ -1533,7 +1524,8 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // PICC_WakeupA(atqa_answer, &atqa_size); if ( !PICC_IsNewCardPresent() || !PICC_ReadCardSerial() ) { - Serial.println("No card was previously selected, and none are available. Failed to set UID."); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_NO_CARD]))); + Serial.println(stringBuffer); return false; } @@ -1541,7 +1533,8 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { if ( status != STATUS_OK ) { // We tried, time to give up if ( logErrors ) { - Serial.println("Failed to authenticate to card for reading, could not set UID: "); + strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_AUTH_KEY_A]))); + Serial.println(stringBuffer); Serial.println(GetStatusCodeName(status)); } return false; diff --git a/MFRC522.h b/MFRC522.h index 563dc1c..544edbf 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -78,6 +78,88 @@ #include #include +///////////////////////////////////////////////////////////////////////////////////// +// String tables to be stored in program memory +///////////////////////////////////////////////////////////////////////////////////// + +const char _MFRC522_str_STATUS_OK[] PROGMEM = "Success."; +const char _MFRC522_str_STATUS_ERROR[] PROGMEM = "Error in communication."; +const char _MFRC522_str_STATUS_COLLISION[] PROGMEM = "Collission detected."; +const char _MFRC522_str_STATUS_TIMEOUT[] PROGMEM = "Timeout in communication."; +const char _MFRC522_str_STATUS_NO_ROOM[] PROGMEM = "A buffer is not big enough."; +const char _MFRC522_str_STATUS_INTERNAL_ERROR[] PROGMEM = "Internal error in the code. Should not happen."; +const char _MFRC522_str_STATUS_INVALID[] PROGMEM = "Invalid argument."; +const char _MFRC522_str_STATUS_CRC_WRONG[] PROGMEM = "The CRC_A does not match."; +const char _MFRC522_str_STATUS_MIFARE_NACK[] PROGMEM = "A MIFARE PICC responded with NAK."; + +const char* const _MFRC522_str_StatusCodeName[] PROGMEM { + _MFRC522_str_STATUS_OK, + _MFRC522_str_STATUS_ERROR, + _MFRC522_str_STATUS_COLLISION, + _MFRC522_str_STATUS_TIMEOUT, + _MFRC522_str_STATUS_NO_ROOM, + _MFRC522_str_STATUS_INTERNAL_ERROR, + _MFRC522_str_STATUS_INVALID, + _MFRC522_str_STATUS_CRC_WRONG, + _MFRC522_str_STATUS_MIFARE_NACK +}; + +const char _MFRC522_str_PICC_TYPE_UNKNOWN[] PROGMEM = "Unknown type"; +const char _MFRC522_str_PICC_TYPE_ISO_14443_4[] PROGMEM = "PICC compliant with ISO/IEC 14443-4"; +const char _MFRC522_str_PICC_TYPE_ISO_18092[] PROGMEM = "PICC compliant with ISO/IEC 18092 (NFC)"; +const char _MFRC522_str_PICC_TYPE_MIFARE_MINI[] PROGMEM = "MIFARE Mini, 320 bytes"; +const char _MFRC522_str_PICC_TYPE_MIFARE_1K[] PROGMEM = "MIFARE 1KB"; +const char _MFRC522_str_PICC_TYPE_MIFARE_4K[] PROGMEM = "MIFARE 4KB"; +const char _MFRC522_str_PICC_TYPE_MIFARE_UL[] PROGMEM = "MIFARE Ultralight or Ultralight C"; +const char _MFRC522_str_PICC_TYPE_MIFARE_PLUS[] PROGMEM = "MIFARE Plus"; +const char _MFRC522_str_PICC_TYPE_TNP3XXX[] PROGMEM = "MIFARE TNP3XXX"; + +const char* const _MFRC522_str_PICC_TypeName[] PROGMEM { + _MFRC522_str_PICC_TYPE_UNKNOWN, + _MFRC522_str_PICC_TYPE_ISO_14443_4, + _MFRC522_str_PICC_TYPE_ISO_18092, + _MFRC522_str_PICC_TYPE_MIFARE_MINI, + _MFRC522_str_PICC_TYPE_MIFARE_1K, + _MFRC522_str_PICC_TYPE_MIFARE_4K, + _MFRC522_str_PICC_TYPE_MIFARE_UL, + _MFRC522_str_PICC_TYPE_MIFARE_PLUS, + _MFRC522_str_PICC_TYPE_TNP3XXX +}; + +const char _MFRC522_str_ERR_PICC_TYPE_NOT_COMPLETE[] PROGMEM = "SAK indicates UID is not complete."; +const char _MFRC522_str_ERR_PICC_TYPE_TNP3XXX[] PROGMEM = "Dumping memory contents not implemented for that PICC type."; +const char _MFRC522_str_ERR_NO_RESPONSE_AFTER_HALT[] PROGMEM = "Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?"; +const char _MFRC522_str_ERR_COMMAND_0x40_RESPONSE[] PROGMEM = "Got bad response on backdoor 0x40 command: "; +const char _MFRC522_str_ERR_COMMAND_0x43_COMM[] PROGMEM = "Error in communication at command 0x43, after successfully executing 0x40"; +const char _MFRC522_str_ERR_COMMAND_0x43_RESPONSE[] PROGMEM = "Got bad response on backdoor 0x43 command: "; +const char _MFRC522_str_ERR_WRONG_UID[] PROGMEM = "New UID buffer empty, size 0, or size > 15 given"; +const char _MFRC522_str_ERR_NO_CARD[] PROGMEM = "No card was previously selected, and none are available. Failed to set UID."; +const char _MFRC522_str_ERR_AUTH_KEY_A[] PROGMEM = "Failed to authenticate to card for reading, could not set UID: "; + +enum _MFRC522_str_Error { + ERR_PICC_TYPE_NOT_COMPLETE, + ERR_PICC_TYPE_TNP3XXX, + ERR_NO_RESPONSE_AFTER_HALT, + ERR_COMMAND_0x40_RESPONSE, + ERR_COMMAND_0x43_COMM, + ERR_COMMAND_0x43_RESPONSE, + ERR_WRONG_UID, + ERR_NO_CARD, + ERR_AUTH_KEY_A +}; + +const char* const _MFRC522_str_Error[] PROGMEM { + _MFRC522_str_ERR_PICC_TYPE_NOT_COMPLETE, + _MFRC522_str_ERR_PICC_TYPE_TNP3XXX, + _MFRC522_str_ERR_NO_RESPONSE_AFTER_HALT, + _MFRC522_str_ERR_COMMAND_0x40_RESPONSE, + _MFRC522_str_ERR_COMMAND_0x43_COMM, + _MFRC522_str_ERR_COMMAND_0x43_RESPONSE, + _MFRC522_str_ERR_WRONG_UID, + _MFRC522_str_ERR_NO_CARD, + _MFRC522_str_ERR_AUTH_KEY_A +}; + class MFRC522 { public: // MFRC522 registers. Described in chapter 9 of the datasheet. @@ -218,7 +300,7 @@ public: MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. }; - // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more. + // PICC types we can detect. Remember to update string tables and PICC_GetTypeName() if you add more. enum PICC_Type { PICC_TYPE_UNKNOWN = 0, PICC_TYPE_ISO_14443_4 = 1, // PICC compliant with ISO/IEC 14443-4 @@ -232,7 +314,7 @@ public: PICC_TYPE_NOT_COMPLETE = 255 // SAK indicates UID is not complete. }; - // Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more. + // Return codes from the functions in this class. Remember to update string tables and GetStatusCodeName() if you add more. enum StatusCode { STATUS_OK = 1, // Success STATUS_ERROR = 2, // Error in communication @@ -344,6 +426,8 @@ private: byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) byte MIFARE_TwoStepHelper(byte command, byte blockAddr, long data); + + char stringBuffer[100]; }; #endif From 8f4d3cd54257d6fb5c8da5fef6464b5eaad41bcb Mon Sep 17 00:00:00 2001 From: lorneb Date: Sun, 1 Feb 2015 13:08:05 +1000 Subject: [PATCH 48/96] Revert "Move strings to PROGMEM string tables" --- MFRC522.cpp | 59 +++++++++++++++++++---------------- MFRC522.h | 88 ++--------------------------------------------------- 2 files changed, 35 insertions(+), 112 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index ad4495a..09e0c31 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -6,7 +6,6 @@ #include #include -#include ///////////////////////////////////////////////////////////////////////////////////// // Functions for setting up the Arduino @@ -1073,11 +1072,20 @@ byte MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data t */ const char *MFRC522::GetStatusCodeName(byte code ///< One of the StatusCode enums. ) { - if (code == 0 || code > STATUS_MIFARE_NACK) { - return "Unknown error"; + switch (code) { + case STATUS_OK: return "Success."; break; + case STATUS_ERROR: return "Error in communication."; break; + case STATUS_COLLISION: return "Collission detected."; break; + case STATUS_TIMEOUT: return "Timeout in communication."; break; + case STATUS_NO_ROOM: return "A buffer is not big enough."; break; + case STATUS_INTERNAL_ERROR: return "Internal error in the code. Should not happen."; break; + case STATUS_INVALID: return "Invalid argument."; break; + case STATUS_CRC_WRONG: return "The CRC_A does not match."; break; + case STATUS_MIFARE_NACK: return "A MIFARE PICC responded with NAK."; break; + default: + return "Unknown error"; + break; } - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_StatusCodeName[code - 1]))); - return stringBuffer; } // End GetStatusCodeName() /** @@ -1119,12 +1127,19 @@ byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select */ const char *MFRC522::PICC_GetTypeName(byte piccType ///< One of the PICC_Type enums. ) { - if (piccType == PICC_TYPE_UNKNOWN) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_PICC_TYPE_NOT_COMPLETE]))); - } else { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_PICC_TypeName[piccType]))); + switch (piccType) { + case PICC_TYPE_ISO_14443_4: return "PICC compliant with ISO/IEC 14443-4"; break; + case PICC_TYPE_ISO_18092: return "PICC compliant with ISO/IEC 18092 (NFC)"; break; + case PICC_TYPE_MIFARE_MINI: return "MIFARE Mini, 320 bytes"; break; + case PICC_TYPE_MIFARE_1K: return "MIFARE 1KB"; break; + case PICC_TYPE_MIFARE_4K: return "MIFARE 4KB"; break; + case PICC_TYPE_MIFARE_UL: return "MIFARE Ultralight or Ultralight C"; break; + case PICC_TYPE_MIFARE_PLUS: return "MIFARE Plus"; break; + case PICC_TYPE_TNP3XXX: return "MIFARE TNP3XXX"; break; + case PICC_TYPE_NOT_COMPLETE: return "SAK indicates UID is not complete."; break; + case PICC_TYPE_UNKNOWN: + default: return "Unknown type"; break; } - return stringBuffer; } // End PICC_GetTypeName() /** @@ -1169,8 +1184,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro case PICC_TYPE_ISO_18092: case PICC_TYPE_MIFARE_PLUS: case PICC_TYPE_TNP3XXX: - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_PICC_TYPE_TNP3XXX]))); - Serial.println(stringBuffer); + Serial.println("Dumping memory contents not implemented for that PICC type."); break; case PICC_TYPE_UNKNOWN: @@ -1444,8 +1458,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 if( status != STATUS_OK ) { if( logErrors ) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_NO_RESPONSE_AFTER_HALT]))); - Serial.println(stringBuffer); + Serial.println("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?"); Serial.print("Error name: "); Serial.println(GetStatusCodeName(status)); } @@ -1453,8 +1466,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { } if ( received != 1 || response[0] != 0x0A ) { if ( logErrors ) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_COMMAND_0x40_RESPONSE]))); - Serial.print(stringBuffer); + Serial.print("Got bad response on backdoor 0x40 command: "); Serial.print(response[0], HEX); Serial.print(" ("); Serial.print(validBits); @@ -1468,8 +1480,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 if( status != STATUS_OK ) { if( logErrors ) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_COMMAND_0x43_COMM]))); - Serial.println(stringBuffer); + Serial.println("Error in communication at command 0x43, after successfully executing 0x40"); Serial.print("Error name: "); Serial.println(GetStatusCodeName(status)); } @@ -1477,8 +1488,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { } if ( received != 1 || response[0] != 0x0A ) { if ( logErrors ) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_COMMAND_0x43_RESPONSE]))); - Serial.print(stringBuffer); + Serial.print("Got bad response on backdoor 0x43 command: "); Serial.print(response[0], HEX); Serial.print(" ("); Serial.print(validBits); @@ -1504,8 +1514,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // UID + BCC byte can not be larger than 16 together if ( !newUid || !uidSize || uidSize > 15) { if ( logErrors ) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_WRONG_UID]))); - Serial.println(stringBuffer); + Serial.println("New UID buffer empty, size 0, or size > 15 given"); } return false; } @@ -1524,8 +1533,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // PICC_WakeupA(atqa_answer, &atqa_size); if ( !PICC_IsNewCardPresent() || !PICC_ReadCardSerial() ) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_NO_CARD]))); - Serial.println(stringBuffer); + Serial.println("No card was previously selected, and none are available. Failed to set UID."); return false; } @@ -1533,8 +1541,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { if ( status != STATUS_OK ) { // We tried, time to give up if ( logErrors ) { - strcpy_P(stringBuffer, (char*)pgm_read_word(&(_MFRC522_str_Error[ERR_AUTH_KEY_A]))); - Serial.println(stringBuffer); + Serial.println("Failed to authenticate to card for reading, could not set UID: "); Serial.println(GetStatusCodeName(status)); } return false; diff --git a/MFRC522.h b/MFRC522.h index 544edbf..563dc1c 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -78,88 +78,6 @@ #include #include -///////////////////////////////////////////////////////////////////////////////////// -// String tables to be stored in program memory -///////////////////////////////////////////////////////////////////////////////////// - -const char _MFRC522_str_STATUS_OK[] PROGMEM = "Success."; -const char _MFRC522_str_STATUS_ERROR[] PROGMEM = "Error in communication."; -const char _MFRC522_str_STATUS_COLLISION[] PROGMEM = "Collission detected."; -const char _MFRC522_str_STATUS_TIMEOUT[] PROGMEM = "Timeout in communication."; -const char _MFRC522_str_STATUS_NO_ROOM[] PROGMEM = "A buffer is not big enough."; -const char _MFRC522_str_STATUS_INTERNAL_ERROR[] PROGMEM = "Internal error in the code. Should not happen."; -const char _MFRC522_str_STATUS_INVALID[] PROGMEM = "Invalid argument."; -const char _MFRC522_str_STATUS_CRC_WRONG[] PROGMEM = "The CRC_A does not match."; -const char _MFRC522_str_STATUS_MIFARE_NACK[] PROGMEM = "A MIFARE PICC responded with NAK."; - -const char* const _MFRC522_str_StatusCodeName[] PROGMEM { - _MFRC522_str_STATUS_OK, - _MFRC522_str_STATUS_ERROR, - _MFRC522_str_STATUS_COLLISION, - _MFRC522_str_STATUS_TIMEOUT, - _MFRC522_str_STATUS_NO_ROOM, - _MFRC522_str_STATUS_INTERNAL_ERROR, - _MFRC522_str_STATUS_INVALID, - _MFRC522_str_STATUS_CRC_WRONG, - _MFRC522_str_STATUS_MIFARE_NACK -}; - -const char _MFRC522_str_PICC_TYPE_UNKNOWN[] PROGMEM = "Unknown type"; -const char _MFRC522_str_PICC_TYPE_ISO_14443_4[] PROGMEM = "PICC compliant with ISO/IEC 14443-4"; -const char _MFRC522_str_PICC_TYPE_ISO_18092[] PROGMEM = "PICC compliant with ISO/IEC 18092 (NFC)"; -const char _MFRC522_str_PICC_TYPE_MIFARE_MINI[] PROGMEM = "MIFARE Mini, 320 bytes"; -const char _MFRC522_str_PICC_TYPE_MIFARE_1K[] PROGMEM = "MIFARE 1KB"; -const char _MFRC522_str_PICC_TYPE_MIFARE_4K[] PROGMEM = "MIFARE 4KB"; -const char _MFRC522_str_PICC_TYPE_MIFARE_UL[] PROGMEM = "MIFARE Ultralight or Ultralight C"; -const char _MFRC522_str_PICC_TYPE_MIFARE_PLUS[] PROGMEM = "MIFARE Plus"; -const char _MFRC522_str_PICC_TYPE_TNP3XXX[] PROGMEM = "MIFARE TNP3XXX"; - -const char* const _MFRC522_str_PICC_TypeName[] PROGMEM { - _MFRC522_str_PICC_TYPE_UNKNOWN, - _MFRC522_str_PICC_TYPE_ISO_14443_4, - _MFRC522_str_PICC_TYPE_ISO_18092, - _MFRC522_str_PICC_TYPE_MIFARE_MINI, - _MFRC522_str_PICC_TYPE_MIFARE_1K, - _MFRC522_str_PICC_TYPE_MIFARE_4K, - _MFRC522_str_PICC_TYPE_MIFARE_UL, - _MFRC522_str_PICC_TYPE_MIFARE_PLUS, - _MFRC522_str_PICC_TYPE_TNP3XXX -}; - -const char _MFRC522_str_ERR_PICC_TYPE_NOT_COMPLETE[] PROGMEM = "SAK indicates UID is not complete."; -const char _MFRC522_str_ERR_PICC_TYPE_TNP3XXX[] PROGMEM = "Dumping memory contents not implemented for that PICC type."; -const char _MFRC522_str_ERR_NO_RESPONSE_AFTER_HALT[] PROGMEM = "Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?"; -const char _MFRC522_str_ERR_COMMAND_0x40_RESPONSE[] PROGMEM = "Got bad response on backdoor 0x40 command: "; -const char _MFRC522_str_ERR_COMMAND_0x43_COMM[] PROGMEM = "Error in communication at command 0x43, after successfully executing 0x40"; -const char _MFRC522_str_ERR_COMMAND_0x43_RESPONSE[] PROGMEM = "Got bad response on backdoor 0x43 command: "; -const char _MFRC522_str_ERR_WRONG_UID[] PROGMEM = "New UID buffer empty, size 0, or size > 15 given"; -const char _MFRC522_str_ERR_NO_CARD[] PROGMEM = "No card was previously selected, and none are available. Failed to set UID."; -const char _MFRC522_str_ERR_AUTH_KEY_A[] PROGMEM = "Failed to authenticate to card for reading, could not set UID: "; - -enum _MFRC522_str_Error { - ERR_PICC_TYPE_NOT_COMPLETE, - ERR_PICC_TYPE_TNP3XXX, - ERR_NO_RESPONSE_AFTER_HALT, - ERR_COMMAND_0x40_RESPONSE, - ERR_COMMAND_0x43_COMM, - ERR_COMMAND_0x43_RESPONSE, - ERR_WRONG_UID, - ERR_NO_CARD, - ERR_AUTH_KEY_A -}; - -const char* const _MFRC522_str_Error[] PROGMEM { - _MFRC522_str_ERR_PICC_TYPE_NOT_COMPLETE, - _MFRC522_str_ERR_PICC_TYPE_TNP3XXX, - _MFRC522_str_ERR_NO_RESPONSE_AFTER_HALT, - _MFRC522_str_ERR_COMMAND_0x40_RESPONSE, - _MFRC522_str_ERR_COMMAND_0x43_COMM, - _MFRC522_str_ERR_COMMAND_0x43_RESPONSE, - _MFRC522_str_ERR_WRONG_UID, - _MFRC522_str_ERR_NO_CARD, - _MFRC522_str_ERR_AUTH_KEY_A -}; - class MFRC522 { public: // MFRC522 registers. Described in chapter 9 of the datasheet. @@ -300,7 +218,7 @@ public: MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. }; - // PICC types we can detect. Remember to update string tables and PICC_GetTypeName() if you add more. + // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more. enum PICC_Type { PICC_TYPE_UNKNOWN = 0, PICC_TYPE_ISO_14443_4 = 1, // PICC compliant with ISO/IEC 14443-4 @@ -314,7 +232,7 @@ public: PICC_TYPE_NOT_COMPLETE = 255 // SAK indicates UID is not complete. }; - // Return codes from the functions in this class. Remember to update string tables and GetStatusCodeName() if you add more. + // Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more. enum StatusCode { STATUS_OK = 1, // Success STATUS_ERROR = 2, // Error in communication @@ -426,8 +344,6 @@ private: byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) byte MIFARE_TwoStepHelper(byte command, byte blockAddr, long data); - - char stringBuffer[100]; }; #endif From 5b148a2e7245acb2b1f0454026992e3b9dd9b0d7 Mon Sep 17 00:00:00 2001 From: Lorne Bonnell Date: Mon, 2 Feb 2015 08:42:32 +1000 Subject: [PATCH 50/96] use F() Macro to move strings to ProgMem --- MFRC522.cpp | 74 ++++++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 09e0c31..6197126 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1152,7 +1152,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro MIFARE_Key key; // UID - Serial.print("Card UID:"); + Serial.print(F("Card UID:")); for (byte i = 0; i < uid->size; i++) { Serial.print(uid->uidByte[i] < 0x10 ? " 0" : " "); Serial.print(uid->uidByte[i], HEX); @@ -1161,7 +1161,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro // PICC type byte piccType = PICC_GetType(uid->sak); - Serial.print("PICC type: "); + Serial.print(F("PICC type: "0); Serial.println(PICC_GetTypeName(piccType)); // Dump contents @@ -1184,7 +1184,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro case PICC_TYPE_ISO_18092: case PICC_TYPE_MIFARE_PLUS: case PICC_TYPE_TNP3XXX: - Serial.println("Dumping memory contents not implemented for that PICC type."); + Serial.println(F("Dumping memory contents not implemented for that PICC type.")); break; case PICC_TYPE_UNKNOWN: @@ -1228,7 +1228,7 @@ void MFRC522::PICC_DumpMifareClassicToSerial( Uid *uid, ///< Pointer to Uid str // Dump sectors, highest address first. if (no_of_sectors) { - Serial.println("Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits"); + Serial.println(F("Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits")); for (char i = no_of_sectors - 1; i >= 0; i--) { PICC_DumpMifareClassicSectorToSerial(uid, key, i); } @@ -1290,20 +1290,20 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U if (isSectorTrailer) { Serial.print(sector < 10 ? " " : " "); // Pad with spaces Serial.print(sector); - Serial.print(" "); + Serial.print(F(" ")); } else { - Serial.print(" "); + Serial.print(F(" ")); } // Block number Serial.print(blockAddr < 10 ? " " : (blockAddr < 100 ? " " : " ")); // Pad with spaces Serial.print(blockAddr); - Serial.print(" "); + Serial.print(F(" ")); // Establish encrypted communications before reading the first block if (isSectorTrailer) { status = PCD_Authenticate(PICC_CMD_MF_AUTH_KEY_A, firstBlock, key, uid); if (status != STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(GetStatusCodeName(status)); return; } @@ -1312,7 +1312,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U byteCount = sizeof(buffer); status = MIFARE_Read(blockAddr, buffer, &byteCount); if (status != STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); + Serial.print(F("MIFARE_Read() failed: ")); Serial.println(GetStatusCodeName(status)); continue; } @@ -1321,7 +1321,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U Serial.print(buffer[index] < 0x10 ? " 0" : " "); Serial.print(buffer[index], HEX); if ((index % 4) == 3) { - Serial.print(" "); + Serial.print(F(" ")); } } // Parse sector trailer data @@ -1352,20 +1352,20 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U if (firstInGroup) { // Print access bits - Serial.print(" [ "); + Serial.print(F(" [ ")); Serial.print((g[group] >> 2) & 1, DEC); Serial.print(" "); Serial.print((g[group] >> 1) & 1, DEC); Serial.print(" "); Serial.print((g[group] >> 0) & 1, DEC); - Serial.print(" ] "); + Serial.print(F(" ] ")); if (invertedError) { - Serial.print(" Inverted access bits did not match! "); + Serial.print(F(" Inverted access bits did not match! ")); } } if (group != 3 && (g[group] == 1 || g[group] == 6)) { // Not a sector trailer, a value block long value = (long(buffer[3])<<24) | (long(buffer[2])<<16) | (long(buffer[1])<<8) | long(buffer[0]); - Serial.print(" Value=0x"); Serial.print(value, HEX); - Serial.print(" Adr=0x"); Serial.print(buffer[12], HEX); + Serial.print(F(" Value=0x")); Serial.print(value, HEX); + Serial.print(F(" Adr=0x")); Serial.print(buffer[12], HEX); } Serial.println(); } @@ -1382,14 +1382,14 @@ void MFRC522::PICC_DumpMifareUltralightToSerial() { byte buffer[18]; byte i; - Serial.println("Page 0 1 2 3"); + Serial.println(F("Page 0 1 2 3")); // Try the mpages of the original Ultralight. Ultralight C has more pages. for (byte page = 0; page < 16; page +=4) { // Read returns data for 4 pages at a time. // Read pages byteCount = sizeof(buffer); status = MIFARE_Read(page, buffer, &byteCount); if (status != STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); + Serial.print(F("MIFARE_Read() failed: ")); Serial.println(GetStatusCodeName(status)); break; } @@ -1398,7 +1398,7 @@ void MFRC522::PICC_DumpMifareUltralightToSerial() { i = page + offset; Serial.print(i < 10 ? " " : " "); // Pad with spaces Serial.print(i); - Serial.print(" "); + Serial.print(F(" ")); for (byte index = 0; index < 4; index++) { i = 4 * offset + index; Serial.print(buffer[i] < 0x10 ? " 0" : " "); @@ -1458,19 +1458,19 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 if( status != STATUS_OK ) { if( logErrors ) { - Serial.println("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?"); - Serial.print("Error name: "); + Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?")); + Serial.print(F("Error name: ")); Serial.println(GetStatusCodeName(status)); } return false; } if ( received != 1 || response[0] != 0x0A ) { if ( logErrors ) { - Serial.print("Got bad response on backdoor 0x40 command: "); + Serial.print(F("Got bad response on backdoor 0x40 command: ")); Serial.print(response[0], HEX); - Serial.print(" ("); + Serial.print(F(" (")); Serial.print(validBits); - Serial.print(" valid bits)\r\n"); + Serial.print(F(" valid bits)\r\n")); } return false; } @@ -1480,19 +1480,19 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 if( status != STATUS_OK ) { if( logErrors ) { - Serial.println("Error in communication at command 0x43, after successfully executing 0x40"); - Serial.print("Error name: "); + Serial.println(F("Error in communication at command 0x43, after successfully executing 0x40")); + Serial.print(F("Error name: ")); Serial.println(GetStatusCodeName(status)); } return false; } if ( received != 1 || response[0] != 0x0A ) { if ( logErrors ) { - Serial.print("Got bad response on backdoor 0x43 command: "); + Serial.print(F("Got bad response on backdoor 0x43 command: ")); Serial.print(response[0], HEX); - Serial.print(" ("); + Serial.print(F(" (")); Serial.print(validBits); - Serial.print(" valid bits)\r\n"); + Serial.print(F(" valid bits)\r\n")); } return false; } @@ -1514,7 +1514,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // UID + BCC byte can not be larger than 16 together if ( !newUid || !uidSize || uidSize > 15) { if ( logErrors ) { - Serial.println("New UID buffer empty, size 0, or size > 15 given"); + Serial.println(F("New UID buffer empty, size 0, or size > 15 given")); } return false; } @@ -1533,7 +1533,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // PICC_WakeupA(atqa_answer, &atqa_size); if ( !PICC_IsNewCardPresent() || !PICC_ReadCardSerial() ) { - Serial.println("No card was previously selected, and none are available. Failed to set UID."); + Serial.println(F("No card was previously selected, and none are available. Failed to set UID.")); return false; } @@ -1541,7 +1541,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { if ( status != STATUS_OK ) { // We tried, time to give up if ( logErrors ) { - Serial.println("Failed to authenticate to card for reading, could not set UID: "); + Serial.println(F("Failed to authenticate to card for reading, could not set UID: ")); Serial.println(GetStatusCodeName(status)); } return false; @@ -1549,7 +1549,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { } else { if ( logErrors ) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(GetStatusCodeName(status)); } return false; @@ -1562,9 +1562,9 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { status = MIFARE_Read((byte)0, block0_buffer, &byteCount); if ( status != STATUS_OK ) { if ( logErrors ) { - Serial.print("MIFARE_Read() failed: "); + Serial.print(F("MIFARE_Read() failed: ")); Serial.println(GetStatusCodeName(status)); - Serial.println("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?"); + Serial.println(F("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?")); } return false; } @@ -1585,7 +1585,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // Activate UID backdoor if ( !MIFARE_OpenUidBackdoor(logErrors) ) { if ( logErrors ) { - Serial.println("Activating the UID backdoor failed."); + Serial.println(F("Activating the UID backdoor failed.")); } return false; } @@ -1594,7 +1594,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { status = MIFARE_Write((byte)0, block0_buffer, (byte)16); if (status != STATUS_OK) { if ( logErrors ) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(GetStatusCodeName(status)); } return false; @@ -1620,7 +1620,7 @@ bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { byte status = MIFARE_Write((byte)0, block0_buffer, (byte)16); if (status != STATUS_OK) { if ( logErrors ) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(GetStatusCodeName(status)); } return false; From d914032c7cb9e1ccda19e5e83f7a09aa070925cf Mon Sep 17 00:00:00 2001 From: Spyros Panagiotopoulos Date: Tue, 3 Feb 2015 20:59:07 +0200 Subject: [PATCH 51/96] Fixed some typos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of 0,”)” added --- MFRC522.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 6197126..510708f 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1161,7 +1161,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro // PICC type byte piccType = PICC_GetType(uid->sak); - Serial.print(F("PICC type: "0); + Serial.print(F("PICC type: ")); Serial.println(PICC_GetTypeName(piccType)); // Dump contents From bbe86fcb7b5f53fccd61d2f1ed4eec495a746d4d Mon Sep 17 00:00:00 2001 From: WGH Date: Mon, 9 Feb 2015 01:59:33 +0300 Subject: [PATCH 52/96] fixed PCD_AntennaOff (wrong register was assigned) --- MFRC522.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 510708f..441f1e9 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -246,7 +246,7 @@ void MFRC522::PCD_AntennaOn() { * Turns the antenna off by disabling pins TX1 and TX2. */ void MFRC522::PCD_AntennaOff() { - PCD_ClearRegisterBitMask(RFCfgReg, 0x03); + PCD_ClearRegisterBitMask(TxControlReg, 0x03); } // End PCD_AntennaOff() /** From 0ccfb06aa58d75263e852185d45c937285a29465 Mon Sep 17 00:00:00 2001 From: rotzbua Date: Mon, 23 Feb 2015 16:07:08 +0100 Subject: [PATCH 53/96] Update examples, use F() macro Saves a lot of memory, examples now run at a arduino uno --- examples/ChangeUID/ChangeUID.ino | 14 ++--- examples/DumpInfo/DumpInfo.ino | 14 ++--- examples/FixBrickedUID/FixBrickedUID.ino | 4 +- .../MifareClassicValueBlock.ino | 60 +++++++++---------- examples/ReadAndWrite/ReadAndWrite.ino | 56 ++++++++--------- .../rfid_default_keys/rfid_default_keys.ino | 16 ++--- .../rfid_write_personal_data.ino | 43 ++++++------- 7 files changed, 104 insertions(+), 103 deletions(-) diff --git a/examples/ChangeUID/ChangeUID.ino b/examples/ChangeUID/ChangeUID.ino index 0a0a2ff..556ec7e 100644 --- a/examples/ChangeUID/ChangeUID.ino +++ b/examples/ChangeUID/ChangeUID.ino @@ -54,7 +54,7 @@ void setup() { while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Warning: this example overwrites the UID of your UID changeable card, use with care!"); + Serial.println(F("Warning: this example overwrites the UID of your UID changeable card, use with care!")); // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. for (byte i = 0; i < 6; i++) { @@ -83,7 +83,7 @@ void loop() { // Now a card is selected. The UID and SAK is in mfrc522.uid. // Dump UID - Serial.print("Card UID:"); + Serial.print(F("Card UID:")); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); @@ -92,22 +92,22 @@ void loop() { // Dump PICC type // byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); -// Serial.print("PICC type: "); +// Serial.print(F("PICC type: ")); // Serial.print(mfrc522.PICC_GetTypeName(piccType)); -// Serial.print(" (SAK "); +// Serial.print(F(" (SAK ")); // Serial.print(mfrc522.uid.sak); // Serial.print(")\r\n"); // if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI // && piccType != MFRC522::PICC_TYPE_MIFARE_1K // && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { -// Serial.println("This sample only works with MIFARE Classic cards."); +// Serial.println(F("This sample only works with MIFARE Classic cards.")); // return; // } // Set new UID byte newUid[] = NEW_UID; if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) { - Serial.println("Wrote new UID to card."); + Serial.println(F("Wrote new UID to card.")); } // Halt PICC and re-select it so DumpToSerial doesn't get confused @@ -117,7 +117,7 @@ void loop() { } // Dump the new memory contents - Serial.println("New UID and contents:"); + Serial.println(F("New UID and contents:")); mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); delay(2000); diff --git a/examples/DumpInfo/DumpInfo.ino b/examples/DumpInfo/DumpInfo.ino index 94010d3..cfbf6fe 100644 --- a/examples/DumpInfo/DumpInfo.ino +++ b/examples/DumpInfo/DumpInfo.ino @@ -48,11 +48,11 @@ MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance void setup() { Serial.begin(9600); // Initialize serial communications with the PC - while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 ShowReaderDetails(); // Show details of PCD - MFRC522 Card Reader details - Serial.println("Scan PICC to see UID, type, and data blocks..."); + Serial.println(F("Scan PICC to see UID, type, and data blocks...")); } void loop() { @@ -73,17 +73,17 @@ void loop() { void ShowReaderDetails() { // Get the MFRC522 software version byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); - Serial.print("MFRC522 Software Version: 0x"); + Serial.print(F("MFRC522 Software Version: 0x")); Serial.print(v, HEX); if (v == 0x91) - Serial.print(" = v1.0"); + Serial.print(F(" = v1.0")); else if (v == 0x92) - Serial.print(" = v2.0"); + Serial.print(F(" = v2.0")); else - Serial.print(" (unknown)"); + Serial.print(F(" (unknown)")); Serial.println(""); // When 0x00 or 0xFF is returned, communication probably failed if ((v == 0x00) || (v == 0xFF)) { - Serial.println("WARNING: Communication failure, is the MFRC522 properly connected?"); + Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?")); } } diff --git a/examples/FixBrickedUID/FixBrickedUID.ino b/examples/FixBrickedUID/FixBrickedUID.ino index c7aef0f..eea1cf4 100644 --- a/examples/FixBrickedUID/FixBrickedUID.ino +++ b/examples/FixBrickedUID/FixBrickedUID.ino @@ -52,7 +52,7 @@ void setup() { while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Warning: this example clears your mifare UID, use with care!"); + Serial.println(F("Warning: this example clears your mifare UID, use with care!")); // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. for (byte i = 0; i < 6; i++) { @@ -62,7 +62,7 @@ void setup() { void loop() { if ( mfrc522.MIFARE_UnbrickUidSector(false) ) { - Serial.println("Cleared sector 0, set UID to 1234. Card should be responsive again now."); + Serial.println(F("Cleared sector 0, set UID to 1234. Card should be responsive again now.")); } delay(1000); } diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino index 588e5d0..b78f913 100644 --- a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -53,12 +53,12 @@ void setup() { key.keyByte[i] = 0xFF; } - Serial.println("Scan a MIFARE Classic PICC to demonstrate Value Block mode."); - Serial.print("Using key (for A and B):"); + Serial.println(F("Scan a MIFARE Classic PICC to demonstrate Value Block mode.")); + Serial.print(F("Using key (for A and B):")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); - Serial.println("BEWARE: Data will be written to the PICC, in sector #1"); + Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); } /** @@ -74,10 +74,10 @@ void loop() { return; // Show some details of the PICC (that is: the tag/card) - Serial.print("Card UID:"); + Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); - Serial.print("PICC type: "); + Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); @@ -85,7 +85,7 @@ void loop() { if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { - Serial.println("This sample only works with MIFARE Classic cards."); + Serial.println(F("This sample only works with MIFARE Classic cards.")); return; } @@ -101,16 +101,16 @@ void loop() { long value; // Authenticate using key A - Serial.println("Authenticating using key A..."); + Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Show the whole sector as it currently is - Serial.println("Current data in sector:"); + Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); @@ -156,10 +156,10 @@ void loop() { mfrc522.MIFARE_SetAccessBits(&trailerBuffer[6], 0, 6, 6, 3); // Read the sector trailer as it is currently stored on the PICC - Serial.println("Reading sector trailer..."); + Serial.println(F("Reading sector trailer...")); status = mfrc522.MIFARE_Read(trailerBlock, buffer, &size); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); + Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -169,20 +169,20 @@ void loop() { && buffer[7] != trailerBuffer[7] && buffer[8] != trailerBuffer[8]) { // They don't match (yet), so write it to the PICC - Serial.println("Writing new sector trailer..."); + Serial.println(F("Writing new sector trailer...")); status = mfrc522.MIFARE_Write(trailerBlock, trailerBuffer, 16); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } } // Authenticate using key B - Serial.println("Authenticating again using key B..."); + Serial.println(F("Authenticating again using key B...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -198,20 +198,20 @@ void loop() { Serial.print("Adding 1 to value of block "); Serial.println(valueBlockA); status = mfrc522.MIFARE_Increment(valueBlockA, 1); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Increment() failed: "); + Serial.print(F("MIFARE_Increment() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } status = mfrc522.MIFARE_Transfer(valueBlockA); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Transfer() failed: "); + Serial.print(F("MIFARE_Transfer() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Show the new value of valueBlockA status = mfrc522.MIFARE_GetValue(valueBlockA, &value); if (status != MFRC522::STATUS_OK) { - Serial.print("mifare_GetValue() failed: "); + Serial.print(F("mifare_GetValue() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -222,31 +222,31 @@ void loop() { Serial.print("Subtracting 10 from value of block "); Serial.println(valueBlockB); status = mfrc522.MIFARE_Decrement(valueBlockB, 10); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Decrement() failed: "); + Serial.print(F("MIFARE_Decrement() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } status = mfrc522.MIFARE_Transfer(valueBlockB); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Transfer() failed: "); + Serial.print(F("MIFARE_Transfer() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Show the new value of valueBlockB status = mfrc522.MIFARE_GetValue(valueBlockB, &value); if (status != MFRC522::STATUS_OK) { - Serial.print("mifare_GetValue() failed: "); + Serial.print(F("mifare_GetValue() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } - Serial.print("New value of value block "); Serial.print(valueBlockB); - Serial.print(" = "); Serial.println(value); + Serial.print(F("New value of value block ")); Serial.print(valueBlockB); + Serial.print(F(" = ")); Serial.println(value); // Check some boundary... if (value <= -100) { - Serial.println("Below -100, so resetting it to 255 = 0xFF just for fun..."); + Serial.println(F("Below -100, so resetting it to 255 = 0xFF just for fun...")); status = mfrc522.MIFARE_SetValue(valueBlockB, 255); if (status != MFRC522::STATUS_OK) { - Serial.print("mifare_SetValue() failed: "); + Serial.print(F("mifare_SetValue() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -280,10 +280,10 @@ void formatValueBlock(byte blockAddr) { byte size = sizeof(buffer); byte status; - Serial.print("Reading block "); Serial.println(blockAddr); + Serial.print(F("Reading block ")); Serial.println(blockAddr); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); + Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -301,10 +301,10 @@ void formatValueBlock(byte blockAddr) { && (buffer[12] == (byte)~buffer[13]) && (buffer[12] == buffer[14]) && (buffer[12] == (byte)~buffer[15])) { - Serial.println("Block has correct Value Block format."); + Serial.println(F("Block has correct Value Block format.")); } else { - Serial.println("Formatting as Value Block..."); + Serial.println(F("Formatting as Value Block...")); byte valueBlock[] = { 0, 0, 0, 0, 255, 255, 255, 255, @@ -312,7 +312,7 @@ void formatValueBlock(byte blockAddr) { blockAddr, ~blockAddr, blockAddr, ~blockAddr }; status = mfrc522.MIFARE_Write(blockAddr, valueBlock, 16); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } } diff --git a/examples/ReadAndWrite/ReadAndWrite.ino b/examples/ReadAndWrite/ReadAndWrite.ino index 6d7b6b6..950e441 100644 --- a/examples/ReadAndWrite/ReadAndWrite.ino +++ b/examples/ReadAndWrite/ReadAndWrite.ino @@ -52,12 +52,12 @@ void setup() { key.keyByte[i] = 0xFF; } - Serial.println("Scan a MIFARE Classic PICC to demonstrate read and write."); - Serial.print("Using key (for A and B):"); + Serial.println(F("Scan a MIFARE Classic PICC to demonstrate read and write.")); + Serial.print(F("Using key (for A and B):")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); - Serial.println("BEWARE: Data will be written to the PICC, in sector #1"); + Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1")); } /** @@ -73,10 +73,10 @@ void loop() { return; // Show some details of the PICC (that is: the tag/card) - Serial.print("Card UID:"); + Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); - Serial.print("PICC type: "); + Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); @@ -84,7 +84,7 @@ void loop() { if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { - Serial.println("This sample only works with MIFARE Classic cards."); + Serial.println(F("This sample only works with MIFARE Classic cards.")); return; } @@ -104,82 +104,82 @@ void loop() { byte size = sizeof(buffer); // Authenticate using key A - Serial.println("Authenticating using key A..."); + Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Show the whole sector as it currently is - Serial.println("Current data in sector:"); + Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); // Read data from the block - Serial.print("Reading data from block "); Serial.print(blockAddr); - Serial.println(" ..."); + Serial.print(F("Reading data from block ")); Serial.print(blockAddr); + Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); + Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } - Serial.print("Data in block "); Serial.print(blockAddr); Serial.println(":"); + Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(); // Authenticate using key B - Serial.println("Authenticating again using key B..."); + Serial.println(F("Authenticating again using key B...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Write data to the block - Serial.print("Writing data into block "); Serial.print(blockAddr); - Serial.println(" ..."); + Serial.print(F("Writing data into block ")); Serial.print(blockAddr); + Serial.println(F(" ...")); dump_byte_array(dataBlock, 16); Serial.println(); status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.println(); // Read data from the block (again, should now be what we have written) - Serial.print("Reading data from block "); Serial.print(blockAddr); - Serial.println(" ..."); + Serial.print(F("Reading data from block ")); Serial.print(blockAddr); + Serial.println(F(" ...")); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); + Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); } - Serial.print("Data in block "); Serial.print(blockAddr); Serial.println(":"); + Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); // Check that data in block is what we have written // by counting the number of bytes that are equal - Serial.println("Checking result..."); + Serial.println(F("Checking result...")); byte count = 0; for (byte i = 0; i < 16; i++) { // Compare buffer (= what we've read) with dataBlock (= what we've written) if (buffer[i] == dataBlock[i]) count++; } - Serial.print("Number of bytes that match = "); Serial.println(count); + Serial.print(F("Number of bytes that match = ")); Serial.println(count); if (count == 16) { - Serial.println("Success :-)"); + Serial.println(F("Success :-)")); } else { - Serial.println("Failure, no match :-("); - Serial.println(" perhaps the write didn't work properly..."); + Serial.println(F("Failure, no match :-(")); + Serial.println(F(" perhaps the write didn't work properly...")); } Serial.println(); // Dump the sector data - Serial.println("Current data in sector:"); + Serial.println(F("Current data in sector:")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); diff --git a/examples/rfid_default_keys/rfid_default_keys.ino b/examples/rfid_default_keys/rfid_default_keys.ino index 16693ef..4b5bfff 100644 --- a/examples/rfid_default_keys/rfid_default_keys.ino +++ b/examples/rfid_default_keys/rfid_default_keys.ino @@ -56,7 +56,7 @@ void setup() { while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Try the most used default keys to print block 0 of a MIFARE PICC."); + Serial.println(F("Try the most used default keys to print block 0 of a MIFARE PICC.")); } /* @@ -82,10 +82,10 @@ boolean try_key(MFRC522::MIFARE_Key *key) byte block = 0; byte status; - // Serial.println("Authenticating using key A..."); + // Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - // Serial.print("PCD_Authenticate() failed: "); + // Serial.print(F("PCD_Authenticate() failed: ")); // Serial.println(mfrc522.GetStatusCodeName(status)); return false; } @@ -94,17 +94,17 @@ boolean try_key(MFRC522::MIFARE_Key *key) byte byteCount = sizeof(buffer); status = mfrc522.MIFARE_Read(block, buffer, &byteCount); if (status != MFRC522::STATUS_OK) { - // Serial.print("MIFARE_Read() failed: "); + // Serial.print(F("MIFARE_Read() failed: ")); // Serial.println(mfrc522.GetStatusCodeName(status)); } else { // Successful read result = true; - Serial.print("Success with key:"); + Serial.print(F("Success with key:")); dump_byte_array((*key).keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); // Dump block data - Serial.print("Block "); Serial.print(block); Serial.print(":"); + Serial.print(F("Block ")); Serial.print(block); Serial.print(F(":")); dump_byte_array(buffer, 16); Serial.println(); } @@ -128,10 +128,10 @@ void loop() { return; // Show some details of the PICC (that is: the tag/card) - Serial.print("Card UID:"); + Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); - Serial.print("PICC type: "); + Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); diff --git a/examples/rfid_write_personal_data/rfid_write_personal_data.ino b/examples/rfid_write_personal_data/rfid_write_personal_data.ino index 7ef2fe8..64f0e65 100644 --- a/examples/rfid_write_personal_data/rfid_write_personal_data.ino +++ b/examples/rfid_write_personal_data/rfid_write_personal_data.ino @@ -30,7 +30,7 @@ void setup() { Serial.begin(9600); // Initialize serial communications with the PC SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Write personal data on a MIFARE PICC "); + Serial.println(F("Write personal data on a MIFARE PICC ")); } void loop() { @@ -47,12 +47,12 @@ void loop() { // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) return; - Serial.print("Card UID:"); //Dump UID + Serial.print(F("Card UID:")); //Dump UID for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } - Serial.print(" PICC type: "); // Dump PICC type + Serial.print(F(" PICC type: ")); // Dump PICC type byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); @@ -62,33 +62,34 @@ void loop() { Serial.setTimeout(20000L) ; // wait until 20 seconds for input from serial // Ask personal data: Family name - Serial.println("Type Family name, ending with #"); + Serial.println(F("Type Family name, ending with #")); len=Serial.readBytesUntil('#', (char *) buffer, 30) ; // read family name from serial for (byte i = len; i < 30; i++) buffer[i] = '\s'; // pad with spaces block = 1; - //Serial.println("Authenticating using key A..."); + //Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } + else Serial.println(F("PCD_Authenticate() success: ")); // Write block status = mfrc522.MIFARE_Write(block, buffer, 16); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } - else Serial.println("MIFARE_Write() success: "); + else Serial.println(F("MIFARE_Write() success: ")); block = 2; - //Serial.println("Authenticating using key A..."); + //Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -96,22 +97,22 @@ void loop() { // Write block status = mfrc522.MIFARE_Write(block, &buffer[16], 16); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } - else Serial.println("MIFARE_Write() success: "); + else Serial.println(F("MIFARE_Write() success: ")); // Ask personal data: First name - Serial.println("Type First name, ending with #"); + Serial.println(F("Type First name, ending with #")); len=Serial.readBytesUntil('#', (char *) buffer, 20) ; // read first name from serial for (byte i = len; i < 20; i++) buffer[i] = '\s'; // pad with spaces block = 4; - //Serial.println("Authenticating using key A..."); + //Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -119,17 +120,17 @@ void loop() { // Write block status = mfrc522.MIFARE_Write(block, buffer, 16); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } - else Serial.println("MIFARE_Write() success: "); + else Serial.println(F("MIFARE_Write() success: ")); block = 5; - //Serial.println("Authenticating using key A..."); + //Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); + Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } @@ -137,11 +138,11 @@ void loop() { // Write block status = mfrc522.MIFARE_Write(block, &buffer[16], 16); if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); + Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } - else Serial.println("MIFARE_Write() success: "); + else Serial.println(F("MIFARE_Write() success: ")); Serial.println(" "); From d4092ba6dcc0661fad03022e7f38d22f06b42040 Mon Sep 17 00:00:00 2001 From: rotzbua Date: Mon, 23 Feb 2015 16:14:02 +0100 Subject: [PATCH 54/96] Update example rfid_write_personal_data.ino Update pin layout hint like other examples --- .../rfid_write_personal_data.ino | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/rfid_write_personal_data/rfid_write_personal_data.ino b/examples/rfid_write_personal_data/rfid_write_personal_data.ino index 64f0e65..21721a6 100644 --- a/examples/rfid_write_personal_data/rfid_write_personal_data.ino +++ b/examples/rfid_write_personal_data/rfid_write_personal_data.ino @@ -1,16 +1,16 @@ /* * Write personal data of a MIFARE RFID card using a RFID-RC522 reader * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. - ----------------------------------------------------------------------------- - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board - * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 52 MOSI - * SPI MISO 12 51 MISO - * SPI SCK 13 50 SCK + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 * * Hardware required: * Arduino From ffe097628257932504ce3ac4cbf4bb489b06e317 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Wed, 11 Mar 2015 17:30:06 +0100 Subject: [PATCH 55/96] use F() macro for return strings by functions fkt GetStatusCodeName() and PICC_GetTypeName() return pointer to flash saves about 450 byte memory if you need char: copy it from the flash --- MFRC522.cpp | 50 ++++++++++++++++++++++++-------------------------- MFRC522.h | 10 +++++++--- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 441f1e9..5cee248 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1067,24 +1067,22 @@ byte MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data t } // End PCD_MIFARE_Transceive() /** - * Returns a string pointer to a status code name. + * Returns a __FlashStringHelper pointer to a status code name. * */ -const char *MFRC522::GetStatusCodeName(byte code ///< One of the StatusCode enums. +const __FlashStringHelper *MFRC522::GetStatusCodeName(byte code ///< One of the StatusCode enums. ) { switch (code) { - case STATUS_OK: return "Success."; break; - case STATUS_ERROR: return "Error in communication."; break; - case STATUS_COLLISION: return "Collission detected."; break; - case STATUS_TIMEOUT: return "Timeout in communication."; break; - case STATUS_NO_ROOM: return "A buffer is not big enough."; break; - case STATUS_INTERNAL_ERROR: return "Internal error in the code. Should not happen."; break; - case STATUS_INVALID: return "Invalid argument."; break; - case STATUS_CRC_WRONG: return "The CRC_A does not match."; break; - case STATUS_MIFARE_NACK: return "A MIFARE PICC responded with NAK."; break; - default: - return "Unknown error"; - break; + case STATUS_OK: return F("Success."); break; + case STATUS_ERROR: return F("Error in communication."); break; + case STATUS_COLLISION: return F("Collission detected."); break; + case STATUS_TIMEOUT: return F("Timeout in communication."); break; + case STATUS_NO_ROOM: return F("A buffer is not big enough."); break; + case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen."); break; + case STATUS_INVALID: return F("Invalid argument."); break; + case STATUS_CRC_WRONG: return F("The CRC_A does not match."); break; + case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK."); break; + default: return F("Unknown error"); break; } } // End GetStatusCodeName() @@ -1122,23 +1120,23 @@ byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select } // End PICC_GetType() /** - * Returns a string pointer to the PICC type name. + * Returns a __FlashStringHelper pointer to the PICC type name. * */ -const char *MFRC522::PICC_GetTypeName(byte piccType ///< One of the PICC_Type enums. +const __FlashStringHelper *MFRC522::PICC_GetTypeName(byte piccType ///< One of the PICC_Type enums. ) { switch (piccType) { - case PICC_TYPE_ISO_14443_4: return "PICC compliant with ISO/IEC 14443-4"; break; - case PICC_TYPE_ISO_18092: return "PICC compliant with ISO/IEC 18092 (NFC)"; break; - case PICC_TYPE_MIFARE_MINI: return "MIFARE Mini, 320 bytes"; break; - case PICC_TYPE_MIFARE_1K: return "MIFARE 1KB"; break; - case PICC_TYPE_MIFARE_4K: return "MIFARE 4KB"; break; - case PICC_TYPE_MIFARE_UL: return "MIFARE Ultralight or Ultralight C"; break; - case PICC_TYPE_MIFARE_PLUS: return "MIFARE Plus"; break; - case PICC_TYPE_TNP3XXX: return "MIFARE TNP3XXX"; break; - case PICC_TYPE_NOT_COMPLETE: return "SAK indicates UID is not complete."; break; + case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4"); break; + case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)");break; + case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes"); break; + case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB"); break; + case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB"); break; + case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C"); break; + case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus"); break; + case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX"); break; + case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete."); break; case PICC_TYPE_UNKNOWN: - default: return "Unknown type"; break; + default: return F("Unknown type"); break; } } // End PICC_GetTypeName() diff --git a/MFRC522.h b/MFRC522.h index 563dc1c..809146b 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -321,10 +321,14 @@ public: ///////////////////////////////////////////////////////////////////////////////////// // Support functions ///////////////////////////////////////////////////////////////////////////////////// - byte PCD_MIFARE_Transceive( byte *sendData, byte sendLen, bool acceptTimeout = false); - const char *GetStatusCodeName(byte code); + byte PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout = false); + // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory + //const char *GetStatusCodeName(byte code); + const __FlashStringHelper *GetStatusCodeName(byte code); byte PICC_GetType(byte sak); - const char *PICC_GetTypeName(byte type); + // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory + //const char *PICC_GetTypeName(byte type); + const __FlashStringHelper *PICC_GetTypeName(byte type); void PICC_DumpToSerial(Uid *uid); void PICC_DumpMifareClassicToSerial(Uid *uid, byte piccType, MIFARE_Key *key); void PICC_DumpMifareClassicSectorToSerial(Uid *uid, MIFARE_Key *key, byte sector); From 26f95497ae96d1c8207f2b54b3adf6e9336bb174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Paaske=20T=C3=B8rholm?= Date: Wed, 11 Mar 2015 23:25:35 +0100 Subject: [PATCH 56/96] Implement method for performing self-test of firmware Closes #89 --- MFRC522.cpp | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++ MFRC522.h | 1 + 2 files changed, 100 insertions(+) diff --git a/MFRC522.cpp b/MFRC522.cpp index 441f1e9..3f67779 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -272,6 +272,105 @@ void MFRC522::PCD_SetAntennaGain(byte mask) { } } // End PCD_SetAntennaGain() +/** + * Performs a self-test of the MFRC522 + * See 16.1.1 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * + * @return Whether or not the test passed. + */ +bool MFRC522::PCD_PerformSelfTest() { + // This follows directly the steps outlined in 16.1.1 + + // 1. Perform a soft reset. + PCD_Reset(); + + // 2. Clear the internal buffer by writing 25 bytes of 00h + byte ZEROES[25] = {0x00}; + PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // flush the FIFO buffer + PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO + PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer + + // 3. Enable self-test + PCD_WriteRegister(AutoTestReg, 0x09); + + // 4. Write 00h to FIFO buffer + PCD_WriteRegister(FIFODataReg, 0x00); + + // 5. Start self-test by issuing the CalcCRC command + PCD_WriteRegister(CommandReg, PCD_CalcCRC); + + // 6. Wait for self-test to complete + word i; + byte n; + for (i = 0; i < 0xFF; i++) { + n = PCD_ReadRegister(DivIrqReg); // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved + if (n & 0x04) { // CRCIRq bit set - calculation done + break; + } + } + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + + // 7. Read out resulting 64 bytes from the FIFO buffer. + byte result[64]; + PCD_ReadRegister(FIFODataReg, 64, result, 0); + + // Auto self-test done + + // Reset AutoTestReg register to be 0 again. Required for normal operation. + PCD_WriteRegister(AutoTestReg, 0x00); + + // Determine firmware version (see section 9.3.4.8 in spec) + byte version = PCD_ReadRegister(VersionReg); + + // Reference values based on firmware version; taken from 16.1.1 in spec. + // Version 1.0 + byte referenceV1_0[] = { + 0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C, + 0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73, + 0x10, 0xE6, 0xD2, 0xAA, 0x5E, 0xA1, 0x3E, 0x5A, + 0x14, 0xAF, 0x30, 0x61, 0xC9, 0x70, 0xDB, 0x2E, + 0x64, 0x22, 0x72, 0xB5, 0xBD, 0x65, 0xF4, 0xEC, + 0x22, 0xBC, 0xD3, 0x72, 0x35, 0xCD, 0xAA, 0x41, + 0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02, + 0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79 + }; + + // Version 2.0 + byte referenceV2_0[] = { + 0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95, + 0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE, + 0x9D, 0x3B, 0xA7, 0x00, 0x21, 0x5B, 0x89, 0x82, + 0x51, 0x3A, 0xEB, 0x02, 0x0C, 0xA5, 0x00, 0x49, + 0x7C, 0x84, 0x4D, 0xB3, 0xCC, 0xD2, 0x1B, 0x81, + 0x5D, 0x48, 0x76, 0xD5, 0x71, 0x61, 0x21, 0xA9, + 0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D, + 0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F + }; + + // Pick the appropriate reference values + byte *reference; + switch (version) { + case 0x91: // Version 1.0 + reference = referenceV1_0; + break; + case 0x92: // Version 2.0 + reference = referenceV2_0; + break; + default: // Unknown version + return false; + } + + // Verify that the results match up to our expectations + for (i = 0; i < 64; i++) { + if (result[i] != reference[i]) { + return false; + } + } + + // Test passed; all is good. + return true; +} // End PCD_PerformSelfTest() + ///////////////////////////////////////////////////////////////////////////////////// // Functions for communicating with PICCs ///////////////////////////////////////////////////////////////////////////////////// diff --git a/MFRC522.h b/MFRC522.h index 563dc1c..8a4e2ee 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -290,6 +290,7 @@ public: void PCD_AntennaOff(); byte PCD_GetAntennaGain(); void PCD_SetAntennaGain(byte mask); + bool PCD_PerformSelfTest(); ///////////////////////////////////////////////////////////////////////////////////// // Functions for communicating with PICCs From 038badba6c4b2f2ac5a422313bddaba6bc5c809f Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Thu, 12 Mar 2015 15:26:43 +0100 Subject: [PATCH 57/96] move self-test reference from ram to flash --- MFRC522.cpp | 33 ++++----------------------------- MFRC522.h | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index b745d58..8b20c0c 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -322,39 +322,14 @@ bool MFRC522::PCD_PerformSelfTest() { // Determine firmware version (see section 9.3.4.8 in spec) byte version = PCD_ReadRegister(VersionReg); - // Reference values based on firmware version; taken from 16.1.1 in spec. - // Version 1.0 - byte referenceV1_0[] = { - 0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C, - 0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73, - 0x10, 0xE6, 0xD2, 0xAA, 0x5E, 0xA1, 0x3E, 0x5A, - 0x14, 0xAF, 0x30, 0x61, 0xC9, 0x70, 0xDB, 0x2E, - 0x64, 0x22, 0x72, 0xB5, 0xBD, 0x65, 0xF4, 0xEC, - 0x22, 0xBC, 0xD3, 0x72, 0x35, 0xCD, 0xAA, 0x41, - 0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02, - 0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79 - }; - - // Version 2.0 - byte referenceV2_0[] = { - 0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95, - 0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE, - 0x9D, 0x3B, 0xA7, 0x00, 0x21, 0x5B, 0x89, 0x82, - 0x51, 0x3A, 0xEB, 0x02, 0x0C, 0xA5, 0x00, 0x49, - 0x7C, 0x84, 0x4D, 0xB3, 0xCC, 0xD2, 0x1B, 0x81, - 0x5D, 0x48, 0x76, 0xD5, 0x71, 0x61, 0x21, 0xA9, - 0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D, - 0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F - }; - // Pick the appropriate reference values - byte *reference; + const byte *reference; switch (version) { case 0x91: // Version 1.0 - reference = referenceV1_0; + reference = MFRC522_firmware_referenceV1_0; break; case 0x92: // Version 2.0 - reference = referenceV2_0; + reference = MFRC522_firmware_referenceV2_0; break; default: // Unknown version return false; @@ -362,7 +337,7 @@ bool MFRC522::PCD_PerformSelfTest() { // Verify that the results match up to our expectations for (i = 0; i < 64; i++) { - if (result[i] != reference[i]) { + if (result[i] != pgm_read_byte(&(reference[i]))) { return false; } } diff --git a/MFRC522.h b/MFRC522.h index 1b6a9bc..b0429dd 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -78,6 +78,31 @@ #include #include +// Firmware data for self-test +// Reference values based on firmware version; taken from 16.1.1 in spec. +// Version 1.0 +const byte MFRC522_firmware_referenceV1_0[] PROGMEM = { + 0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C, + 0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73, + 0x10, 0xE6, 0xD2, 0xAA, 0x5E, 0xA1, 0x3E, 0x5A, + 0x14, 0xAF, 0x30, 0x61, 0xC9, 0x70, 0xDB, 0x2E, + 0x64, 0x22, 0x72, 0xB5, 0xBD, 0x65, 0xF4, 0xEC, + 0x22, 0xBC, 0xD3, 0x72, 0x35, 0xCD, 0xAA, 0x41, + 0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02, + 0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79 +}; +// Version 2.0 +const byte MFRC522_firmware_referenceV2_0[] PROGMEM = { + 0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95, + 0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE, + 0x9D, 0x3B, 0xA7, 0x00, 0x21, 0x5B, 0x89, 0x82, + 0x51, 0x3A, 0xEB, 0x02, 0x0C, 0xA5, 0x00, 0x49, + 0x7C, 0x84, 0x4D, 0xB3, 0xCC, 0xD2, 0x1B, 0x81, + 0x5D, 0x48, 0x76, 0xD5, 0x71, 0x61, 0x21, 0xA9, + 0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D, + 0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F +}; + class MFRC522 { public: // MFRC522 registers. Described in chapter 9 of the datasheet. From 56d2777eb3da4d201baebf37498b4fe576260e15 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 15 Mar 2015 19:57:57 +0100 Subject: [PATCH 58/96] upd keywords.txt add some missing functions add comments for structure like MFRC522.h --- keywords.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/keywords.txt b/keywords.txt index 5690ce9..73e6216 100644 --- a/keywords.txt +++ b/keywords.txt @@ -19,7 +19,10 @@ MIFARE_Key KEYWORD1 ####################################### # KEYWORD2 Methods and functions ####################################### +# Functions for setting up the Arduino setSPIConfig KEYWORD2 + +# Basic interface functions for communicating with the MFRC522 PCD_WriteRegister KEYWORD2 PCD_WriteRegister KEYWORD2 PCD_ReadRegister KEYWORD2 @@ -28,12 +31,17 @@ setBitMask KEYWORD2 PCD_SetRegisterBitMask KEYWORD2 PCD_ClearRegisterBitMask KEYWORD2 PCD_CalculateCRC KEYWORD2 + +# Functions for manipulating the MFRC522 PCD_Init KEYWORD2 PCD_Reset KEYWORD2 PCD_AntennaOn KEYWORD2 PCD_AntennaOff KEYWORD2 PCD_GetAntennaGain KEYWORD2 PCD_SetAntennaGain KEYWORD2 +PCD_PerformSelfTest KEYWORD2 + +# Functions for communicating with PICCs PCD_TransceiveData KEYWORD2 PCD_CommunicateWithPICC KEYWORD2 PICC_RequestA KEYWORD2 @@ -41,6 +49,8 @@ PICC_WakeupA KEYWORD2 PICC_REQA_or_WUPA KEYWORD2 PICC_Select KEYWORD2 PICC_HaltA KEYWORD2 + +# Functions for communicating with MIFARE PICCs PCD_Authenticate KEYWORD2 PCD_StopCrypto1 KEYWORD2 MIFARE_Read KEYWORD2 @@ -49,13 +59,22 @@ MIFARE_Increment KEYWORD2 MIFARE_Ultralight_Write KEYWORD2 MIFARE_GetValue KEYWORD2 MIFARE_SetValue KEYWORD2 + +# Support functions PCD_MIFARE_Transceive KEYWORD2 +GetStatusCodeName KEYWORD2 PICC_GetType KEYWORD2 +PICC_GetTypeName KEYWORD2 PICC_DumpToSerial KEYWORD2 PICC_DumpMifareClassicToSerial KEYWORD2 PICC_DumpMifareClassicSectorToSerial KEYWORD2 PICC_DumpMifareUltralightToSerial KEYWORD2 MIFARE_SetAccessBits KEYWORD2 +MIFARE_OpenUidBackdoor KEYWORD2 +MIFARE_SetUid KEYWORD2 +MIFARE_UnbrickUidSector KEYWORD2 + +# Convenience functions - does not add extra functionality PICC_IsNewCardPresent KEYWORD2 PICC_ReadCardSerial KEYWORD2 From 2dc9124ffcac018244f11ba784cc7083278b9ae0 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 15 Mar 2015 20:07:39 +0100 Subject: [PATCH 59/96] style space to tab no code change, just style --- MFRC522.cpp | 564 ++++++++++++++++++++++++++-------------------------- MFRC522.h | 27 ++- 2 files changed, 294 insertions(+), 297 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 8b20c0c..e2deda1 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -279,71 +279,69 @@ void MFRC522::PCD_SetAntennaGain(byte mask) { * @return Whether or not the test passed. */ bool MFRC522::PCD_PerformSelfTest() { - // This follows directly the steps outlined in 16.1.1 - - // 1. Perform a soft reset. - PCD_Reset(); - - // 2. Clear the internal buffer by writing 25 bytes of 00h - byte ZEROES[25] = {0x00}; - PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // flush the FIFO buffer - PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO - PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer - - // 3. Enable self-test - PCD_WriteRegister(AutoTestReg, 0x09); - - // 4. Write 00h to FIFO buffer - PCD_WriteRegister(FIFODataReg, 0x00); - - // 5. Start self-test by issuing the CalcCRC command - PCD_WriteRegister(CommandReg, PCD_CalcCRC); - - // 6. Wait for self-test to complete - word i; - byte n; - for (i = 0; i < 0xFF; i++) { - n = PCD_ReadRegister(DivIrqReg); // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved - if (n & 0x04) { // CRCIRq bit set - calculation done - break; - } - } - PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. - - // 7. Read out resulting 64 bytes from the FIFO buffer. - byte result[64]; - PCD_ReadRegister(FIFODataReg, 64, result, 0); - - // Auto self-test done - - // Reset AutoTestReg register to be 0 again. Required for normal operation. - PCD_WriteRegister(AutoTestReg, 0x00); - - // Determine firmware version (see section 9.3.4.8 in spec) - byte version = PCD_ReadRegister(VersionReg); - - // Pick the appropriate reference values - const byte *reference; - switch (version) { - case 0x91: // Version 1.0 - reference = MFRC522_firmware_referenceV1_0; - break; - case 0x92: // Version 2.0 - reference = MFRC522_firmware_referenceV2_0; - break; - default: // Unknown version - return false; - } - - // Verify that the results match up to our expectations - for (i = 0; i < 64; i++) { - if (result[i] != pgm_read_byte(&(reference[i]))) { - return false; - } - } - - // Test passed; all is good. - return true; + // This follows directly the steps outlined in 16.1.1 + // 1. Perform a soft reset. + PCD_Reset(); + + // 2. Clear the internal buffer by writing 25 bytes of 00h + byte ZEROES[25] = {0x00}; + PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // flush the FIFO buffer + PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO + PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer + + // 3. Enable self-test + PCD_WriteRegister(AutoTestReg, 0x09); + + // 4. Write 00h to FIFO buffer + PCD_WriteRegister(FIFODataReg, 0x00); + + // 5. Start self-test by issuing the CalcCRC command + PCD_WriteRegister(CommandReg, PCD_CalcCRC); + + // 6. Wait for self-test to complete + word i; + byte n; + for (i = 0; i < 0xFF; i++) { + n = PCD_ReadRegister(DivIrqReg); // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved + if (n & 0x04) { // CRCIRq bit set - calculation done + break; + } + } + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + + // 7. Read out resulting 64 bytes from the FIFO buffer. + byte result[64]; + PCD_ReadRegister(FIFODataReg, 64, result, 0); + + // Auto self-test done + // Reset AutoTestReg register to be 0 again. Required for normal operation. + PCD_WriteRegister(AutoTestReg, 0x00); + + // Determine firmware version (see section 9.3.4.8 in spec) + byte version = PCD_ReadRegister(VersionReg); + + // Pick the appropriate reference values + const byte *reference; + switch (version) { + case 0x91: // Version 1.0 + reference = MFRC522_firmware_referenceV1_0; + break; + case 0x92: // Version 2.0 + reference = MFRC522_firmware_referenceV2_0; + break; + default: // Unknown version + return false; + } + + // Verify that the results match up to our expectations + for (i = 0; i < 64; i++) { + if (result[i] != pgm_read_byte(&(reference[i]))) { + return false; + } + } + + // Test passed; all is good. + return true; } // End PCD_PerformSelfTest() ///////////////////////////////////////////////////////////////////////////////////// @@ -386,7 +384,7 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut ) { byte n, _validBits; unsigned int i; - + // Prepare values for BitFramingReg byte txLastBits = validBits ? *validBits : 0; byte bitFraming = (rxAlign << 4) + txLastBits; // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] @@ -754,7 +752,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp byte MFRC522::PICC_HaltA() { byte result; byte buffer[4]; - + // Build command buffer buffer[0] = PICC_CMD_HLTA; buffer[1] = 0; @@ -763,7 +761,7 @@ byte MFRC522::PICC_HaltA() { if (result != STATUS_OK) { return result; } - + // Send the command. // The standard says: // If the PICC responds with any modulation during a period of 1 ms after the end of the frame containing the @@ -853,7 +851,7 @@ byte MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0x if (buffer == NULL || *bufferSize < 18) { return STATUS_NO_ROOM; } - + // Build command buffer buffer[0] = PICC_CMD_MF_READ; buffer[1] = blockAddr; @@ -883,12 +881,12 @@ byte MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0x byte bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written. ) { byte result; - + // Sanity check if (buffer == NULL || bufferSize < 16) { return STATUS_INVALID; } - + // Mifare Classic protocol requires two communications to perform a write. // Step 1: Tell the PICC we want to write to block blockAddr. byte cmdBuffer[2]; @@ -898,13 +896,13 @@ byte MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0x if (result != STATUS_OK) { return result; } - + // Step 2: Transfer the data result = PCD_MIFARE_Transceive( buffer, bufferSize); // Adds CRC_A and checks that the response is MF_ACK. if (result != STATUS_OK) { return result; } - + return STATUS_OK; } // End MIFARE_Write() @@ -918,12 +916,12 @@ byte MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to writ byte bufferSize ///< Buffer size, must be at least 4 bytes. Exactly 4 bytes are written. ) { byte result; - + // Sanity check if (buffer == NULL || bufferSize < 4) { return STATUS_INVALID; } - + // Build commmand buffer byte cmdBuffer[6]; cmdBuffer[0] = PICC_CMD_UL_WRITE; @@ -992,7 +990,7 @@ byte MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use ) { byte result; byte cmdBuffer[2]; // We only need room for 2 bytes. - + // Step 1: Tell the PICC the command and block address cmdBuffer[0] = command; cmdBuffer[1] = blockAddr; @@ -1000,13 +998,13 @@ byte MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use if (result != STATUS_OK) { return result; } - + // Step 2: Transfer the data result = PCD_MIFARE_Transceive( (byte *)&data, 4, true); // Adds CRC_A and accept timeout as success. if (result != STATUS_OK) { return result; } - + return STATUS_OK; } // End MIFARE_TwoStepHelper() @@ -1021,7 +1019,7 @@ byte MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. ) { byte result; byte cmdBuffer[2]; // We only need room for 2 bytes. - + // Tell the PICC we want to transfer the result into block blockAddr. cmdBuffer[0] = PICC_CMD_MF_TRANSFER; cmdBuffer[1] = blockAddr; @@ -1044,17 +1042,17 @@ byte MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. * @return STATUS_OK on success, STATUS_??? otherwise. */ byte MFRC522::MIFARE_GetValue(byte blockAddr, long *value) { - byte status; - byte buffer[18]; - byte size = sizeof(buffer); - - // Read the block - status = MIFARE_Read(blockAddr, buffer, &size); - if (status == STATUS_OK) { - // Extract the value - *value = (long(buffer[3])<<24) | (long(buffer[2])<<16) | (long(buffer[1])<<8) | long(buffer[0]); - } - return status; + byte status; + byte buffer[18]; + byte size = sizeof(buffer); + + // Read the block + status = MIFARE_Read(blockAddr, buffer, &size); + if (status == STATUS_OK) { + // Extract the value + *value = (long(buffer[3])<<24) | (long(buffer[2])<<16) | (long(buffer[1])<<8) | long(buffer[0]); + } + return status; } // End MIFARE_GetValue() /** @@ -1069,24 +1067,24 @@ byte MFRC522::MIFARE_GetValue(byte blockAddr, long *value) { * @return STATUS_OK on success, STATUS_??? otherwise. */ byte MFRC522::MIFARE_SetValue(byte blockAddr, long value) { - byte buffer[18]; - - // Translate the long into 4 bytes; repeated 2x in value block - buffer[0] = buffer[ 8] = (value & 0xFF); - buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8; - buffer[2] = buffer[10] = (value & 0xFF0000) >> 16; - buffer[3] = buffer[11] = (value & 0xFF000000) >> 24; - // Inverse 4 bytes also found in value block - buffer[4] = ~buffer[0]; - buffer[5] = ~buffer[1]; - buffer[6] = ~buffer[2]; - buffer[7] = ~buffer[3]; - // Address 2x with inverse address 2x - buffer[12] = buffer[14] = blockAddr; - buffer[13] = buffer[15] = ~blockAddr; - - // Write the whole data block - return MIFARE_Write(blockAddr, buffer, 16); + byte buffer[18]; + + // Translate the long into 4 bytes; repeated 2x in value block + buffer[0] = buffer[ 8] = (value & 0xFF); + buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8; + buffer[2] = buffer[10] = (value & 0xFF0000) >> 16; + buffer[3] = buffer[11] = (value & 0xFF000000) >> 24; + // Inverse 4 bytes also found in value block + buffer[4] = ~buffer[0]; + buffer[5] = ~buffer[1]; + buffer[6] = ~buffer[2]; + buffer[7] = ~buffer[3]; + // Address 2x with inverse address 2x + buffer[12] = buffer[14] = blockAddr; + buffer[13] = buffer[15] = ~blockAddr; + + // Write the whole data block + return MIFARE_Write(blockAddr, buffer, 16); } // End MIFARE_SetValue() ///////////////////////////////////////////////////////////////////////////////////// @@ -1105,7 +1103,7 @@ byte MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data t ) { byte result; byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. - + // Sanity check if (sendData == NULL || sendLen > 16) { return STATUS_INVALID; @@ -1230,7 +1228,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro Serial.print(uid->uidByte[i], HEX); } Serial.println(); - + // PICC type byte piccType = PICC_GetType(uid->sak); Serial.print(F("PICC type: ")); @@ -1264,7 +1262,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro default: break; // No memory dump here } - + Serial.println(); PICC_HaltA(); // Already done if it was a MIFARE Classic PICC. } // End PICC_DumpToSerial() @@ -1322,7 +1320,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U byte firstBlock; // Address of lowest address to dump actually last block dumped) byte no_of_blocks; // Number of blocks in sector bool isSectorTrailer; // Set to true while handling the "last" (ie highest address) in the sector. - + // The access bits are stored in a peculiar fashion. // There are four groups: // g[3] Access bits for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39) @@ -1337,7 +1335,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U byte g[4]; // Access bits for each of the four groups. byte group; // 0-3 - active group for access bits bool firstInGroup; // True for the first block dumped in the group - + // Determine position and size of sector. if (sector < 32) { // Sectors 0..31 has 4 blocks each no_of_blocks = 4; @@ -1411,7 +1409,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U g[3] = ((c1 & 8) >> 1) | ((c2 & 8) >> 2) | ((c3 & 8) >> 3); isSectorTrailer = false; } - + // Which access group is this block in? if (no_of_blocks == 4) { group = blockOffset; @@ -1453,7 +1451,7 @@ void MFRC522::PICC_DumpMifareUltralightToSerial() { byte byteCount; byte buffer[18]; byte i; - + Serial.println(F("Page 0 1 2 3")); // Try the mpages of the original Ultralight. Ultralight C has more pages. for (byte page = 0; page < 16; page +=4) { // Read returns data for 4 pages at a time. @@ -1512,65 +1510,65 @@ void MFRC522::MIFARE_SetAccessBits( byte *accessBitBuffer, ///< Pointer to byte * Of course with non-bricked devices, you're free to select them before calling this function. */ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { - // Magic sequence: - // > 50 00 57 CD (HALT + CRC) - // > 40 (7 bits only) - // < A (4 bits only) - // > 43 - // < A (4 bits only) - // Then you can write to sector 0 without authenticating - - PICC_HaltA(); // 50 00 57 CD - - byte cmd = 0x40; - byte validBits = 7; /* Our command is only 7 bits. After receiving card response, - this will contain amount of valid response bits. */ - byte response[32]; // Card's response is written here - byte received; - byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 - if( status != STATUS_OK ) { - if( logErrors ) { - Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?")); - Serial.print(F("Error name: ")); - Serial.println(GetStatusCodeName(status)); - } - return false; - } - if ( received != 1 || response[0] != 0x0A ) { - if ( logErrors ) { - Serial.print(F("Got bad response on backdoor 0x40 command: ")); - Serial.print(response[0], HEX); - Serial.print(F(" (")); - Serial.print(validBits); - Serial.print(F(" valid bits)\r\n")); - } - return false; - } - - cmd = 0x43; - validBits = 8; - status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 - if( status != STATUS_OK ) { - if( logErrors ) { - Serial.println(F("Error in communication at command 0x43, after successfully executing 0x40")); - Serial.print(F("Error name: ")); - Serial.println(GetStatusCodeName(status)); - } - return false; - } - if ( received != 1 || response[0] != 0x0A ) { - if ( logErrors ) { - Serial.print(F("Got bad response on backdoor 0x43 command: ")); - Serial.print(response[0], HEX); - Serial.print(F(" (")); - Serial.print(validBits); - Serial.print(F(" valid bits)\r\n")); - } - return false; - } - - // You can now write to sector 0 without authenticating! - return true; + // Magic sequence: + // > 50 00 57 CD (HALT + CRC) + // > 40 (7 bits only) + // < A (4 bits only) + // > 43 + // < A (4 bits only) + // Then you can write to sector 0 without authenticating + + PICC_HaltA(); // 50 00 57 CD + + byte cmd = 0x40; + byte validBits = 7; /* Our command is only 7 bits. After receiving card response, + this will contain amount of valid response bits. */ + byte response[32]; // Card's response is written here + byte received; + byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 + if( status != STATUS_OK ) { + if( logErrors ) { + Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?")); + Serial.print(F("Error name: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if ( received != 1 || response[0] != 0x0A ) { + if ( logErrors ) { + Serial.print(F("Got bad response on backdoor 0x40 command: ")); + Serial.print(response[0], HEX); + Serial.print(F(" (")); + Serial.print(validBits); + Serial.print(F(" valid bits)\r\n")); + } + return false; + } + + cmd = 0x43; + validBits = 8; + status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 + if( status != STATUS_OK ) { + if( logErrors ) { + Serial.println(F("Error in communication at command 0x43, after successfully executing 0x40")); + Serial.print(F("Error name: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if ( received != 1 || response[0] != 0x0A ) { + if ( logErrors ) { + Serial.print(F("Got bad response on backdoor 0x43 command: ")); + Serial.print(response[0], HEX); + Serial.print(F(" (")); + Serial.print(validBits); + Serial.print(F(" valid bits)\r\n")); + } + return false; + } + + // You can now write to sector 0 without authenticating! + return true; } // End MIFARE_OpenUidBackdoor() /** @@ -1582,121 +1580,121 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { * Make sure to have selected the card before this function is called. */ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { - - // UID + BCC byte can not be larger than 16 together - if ( !newUid || !uidSize || uidSize > 15) { - if ( logErrors ) { - Serial.println(F("New UID buffer empty, size 0, or size > 15 given")); - } - return false; - } - - // Authenticate for reading - MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - byte status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); - if ( status != STATUS_OK ) { - - if ( status == STATUS_TIMEOUT ) { - // We get a read timeout if no card is selected yet, so let's select one - - // Wake the card up again if sleeping -// byte atqa_answer[2]; -// byte atqa_size = 2; -// PICC_WakeupA(atqa_answer, &atqa_size); - - if ( !PICC_IsNewCardPresent() || !PICC_ReadCardSerial() ) { - Serial.println(F("No card was previously selected, and none are available. Failed to set UID.")); - return false; - } - - status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); - if ( status != STATUS_OK ) { - // We tried, time to give up - if ( logErrors ) { - Serial.println(F("Failed to authenticate to card for reading, could not set UID: ")); - Serial.println(GetStatusCodeName(status)); - } - return false; - } - } - else { - if ( logErrors ) { - Serial.print(F("PCD_Authenticate() failed: ")); - Serial.println(GetStatusCodeName(status)); - } - return false; - } - } - - // Read block 0 - byte block0_buffer[18]; - byte byteCount = sizeof(block0_buffer); - status = MIFARE_Read((byte)0, block0_buffer, &byteCount); - if ( status != STATUS_OK ) { - if ( logErrors ) { - Serial.print(F("MIFARE_Read() failed: ")); - Serial.println(GetStatusCodeName(status)); - Serial.println(F("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?")); - } - return false; - } - - // Write new UID to the data we just read, and calculate BCC byte - byte bcc = 0; - for ( int i = 0; i < uidSize; i++ ) { - block0_buffer[i] = newUid[i]; - bcc ^= newUid[i]; - } - - // Write BCC byte to buffer - block0_buffer[uidSize] = bcc; - - // Stop encrypted traffic so we can send raw bytes - PCD_StopCrypto1(); - - // Activate UID backdoor - if ( !MIFARE_OpenUidBackdoor(logErrors) ) { - if ( logErrors ) { - Serial.println(F("Activating the UID backdoor failed.")); - } - return false; - } - - // Write modified block 0 back to card - status = MIFARE_Write((byte)0, block0_buffer, (byte)16); - if (status != STATUS_OK) { - if ( logErrors ) { - Serial.print(F("MIFARE_Write() failed: ")); - Serial.println(GetStatusCodeName(status)); - } - return false; - } - - // Wake the card up again - byte atqa_answer[2]; - byte atqa_size = 2; - PICC_WakeupA(atqa_answer, &atqa_size); - - return true; + + // UID + BCC byte can not be larger than 16 together + if ( !newUid || !uidSize || uidSize > 15) { + if ( logErrors ) { + Serial.println(F("New UID buffer empty, size 0, or size > 15 given")); + } + return false; + } + + // Authenticate for reading + MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + byte status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if ( status != STATUS_OK ) { + + if ( status == STATUS_TIMEOUT ) { + // We get a read timeout if no card is selected yet, so let's select one + + // Wake the card up again if sleeping +// byte atqa_answer[2]; +// byte atqa_size = 2; +// PICC_WakeupA(atqa_answer, &atqa_size); + + if ( !PICC_IsNewCardPresent() || !PICC_ReadCardSerial() ) { + Serial.println(F("No card was previously selected, and none are available. Failed to set UID.")); + return false; + } + + status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if ( status != STATUS_OK ) { + // We tried, time to give up + if ( logErrors ) { + Serial.println(F("Failed to authenticate to card for reading, could not set UID: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + else { + if ( logErrors ) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + + // Read block 0 + byte block0_buffer[18]; + byte byteCount = sizeof(block0_buffer); + status = MIFARE_Read((byte)0, block0_buffer, &byteCount); + if ( status != STATUS_OK ) { + if ( logErrors ) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(GetStatusCodeName(status)); + Serial.println(F("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?")); + } + return false; + } + + // Write new UID to the data we just read, and calculate BCC byte + byte bcc = 0; + for ( int i = 0; i < uidSize; i++ ) { + block0_buffer[i] = newUid[i]; + bcc ^= newUid[i]; + } + + // Write BCC byte to buffer + block0_buffer[uidSize] = bcc; + + // Stop encrypted traffic so we can send raw bytes + PCD_StopCrypto1(); + + // Activate UID backdoor + if ( !MIFARE_OpenUidBackdoor(logErrors) ) { + if ( logErrors ) { + Serial.println(F("Activating the UID backdoor failed.")); + } + return false; + } + + // Write modified block 0 back to card + status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if ( logErrors ) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + + // Wake the card up again + byte atqa_answer[2]; + byte atqa_size = 2; + PICC_WakeupA(atqa_answer, &atqa_size); + + return true; } /** * Resets entire sector 0 to zeroes, so the card can be read again by readers. */ bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { - MIFARE_OpenUidBackdoor( logErrors ); - - byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - - // Write modified block 0 back to card - byte status = MIFARE_Write((byte)0, block0_buffer, (byte)16); - if (status != STATUS_OK) { - if ( logErrors ) { - Serial.print(F("MIFARE_Write() failed: ")); - Serial.println(GetStatusCodeName(status)); - } - return false; - } + MIFARE_OpenUidBackdoor( logErrors ); + + byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + // Write modified block 0 back to card + byte status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if ( logErrors ) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } } ///////////////////////////////////////////////////////////////////////////////////// diff --git a/MFRC522.h b/MFRC522.h index b0429dd..098d874 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -242,7 +242,7 @@ public: MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. }; - + // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more. enum PICC_Type { PICC_TYPE_UNKNOWN = 0, @@ -305,7 +305,7 @@ public: void PCD_SetRegisterBitMask(byte reg, byte mask); void PCD_ClearRegisterBitMask(byte reg, byte mask); byte PCD_CalculateCRC(byte *data, byte length, byte *result); - + ///////////////////////////////////////////////////////////////////////////////////// // Functions for manipulating the MFRC522 ///////////////////////////////////////////////////////////////////////////////////// @@ -315,14 +315,13 @@ public: void PCD_AntennaOff(); byte PCD_GetAntennaGain(); void PCD_SetAntennaGain(byte mask); - bool PCD_PerformSelfTest(); + bool PCD_PerformSelfTest(); ///////////////////////////////////////////////////////////////////////////////////// // Functions for communicating with PICCs ///////////////////////////////////////////////////////////////////////////////////// byte PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); byte PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData = NULL, byte *backLen = NULL, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); - byte PICC_RequestA(byte *bufferATQA, byte *bufferSize); byte PICC_WakeupA(byte *bufferATQA, byte *bufferSize); byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); @@ -336,14 +335,14 @@ public: void PCD_StopCrypto1(); byte MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize); byte MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize); - byte MIFARE_Decrement(byte blockAddr, long delta); + byte MIFARE_Decrement(byte blockAddr, long delta); byte MIFARE_Increment(byte blockAddr, long delta); - byte MIFARE_Restore(byte blockAddr); - byte MIFARE_Transfer(byte blockAddr); + byte MIFARE_Restore(byte blockAddr); + byte MIFARE_Transfer(byte blockAddr); byte MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize); - byte MIFARE_GetValue(byte blockAddr, long *value); - byte MIFARE_SetValue(byte blockAddr, long value); - + byte MIFARE_GetValue(byte blockAddr, long *value); + byte MIFARE_SetValue(byte blockAddr, long value); + ///////////////////////////////////////////////////////////////////////////////////// // Support functions ///////////////////////////////////////////////////////////////////////////////////// @@ -360,16 +359,16 @@ public: void PICC_DumpMifareClassicSectorToSerial(Uid *uid, MIFARE_Key *key, byte sector); void PICC_DumpMifareUltralightToSerial(); void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3); - bool MIFARE_OpenUidBackdoor(bool logErrors); - bool MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors); - bool MIFARE_UnbrickUidSector(bool logErrors); + bool MIFARE_OpenUidBackdoor(bool logErrors); + bool MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors); + bool MIFARE_UnbrickUidSector(bool logErrors); ///////////////////////////////////////////////////////////////////////////////////// // Convenience functions - does not add extra functionality ///////////////////////////////////////////////////////////////////////////////////// bool PICC_IsNewCardPresent(); bool PICC_ReadCardSerial(); - + private: byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) From e891ec00330ff21b3d094616a1fe33787f3aee2e Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 15 Mar 2015 20:12:36 +0100 Subject: [PATCH 60/96] style add missing tabs --- MFRC522.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index e2deda1..698950a 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -579,10 +579,10 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp if (validBits > 80) { return STATUS_INVALID; } - + // Prepare MFRC522 PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. - + // Repeat Cascade Level loop until we have a complete UID. uidComplete = false; while ( ! uidComplete) { @@ -667,11 +667,11 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp responseBuffer = &buffer[index]; responseLength = sizeof(buffer) - index; } - + // Set bit adjustments rxAlign = txLastBits; // Having a seperate variable is overkill. But it makes the next line easier to read. PCD_WriteRegister(BitFramingReg, (rxAlign << 4) + txLastBits); // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] - + // Transmit the buffer and receive the response. result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign); if (result == STATUS_COLLISION) { // More than one PICC in the field => collision. @@ -707,7 +707,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp } } } // End of while ( ! selectDone) - + // We do not check the CBB - it was constructed by us above. // Copy the found UID bytes from buffer[] to uid->uidByte[] @@ -740,7 +740,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp // Set correct uid->size uid->size = 3 * cascadeLevel + 1; - + return STATUS_OK; } // End PICC_Select() From ac12772d07672c3aa912251f73b332b6118ca264 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 15 Mar 2015 21:11:55 +0100 Subject: [PATCH 61/96] add .pdf of .doc in documentation --- doc/rfidmifare.pdf | Bin 0 -> 255101 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/rfidmifare.pdf diff --git a/doc/rfidmifare.pdf b/doc/rfidmifare.pdf new file mode 100644 index 0000000000000000000000000000000000000000..526c71d388e372c524986cbe35bd2d2e6912dca9 GIT binary patch literal 255101 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%0DGyu=t38A2f9af1*FOj+Ngl90JU)iTNCkz~173 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

}h||$9&LY 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� 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 Date: Thu, 2 Apr 2015 14:10:17 +0200 Subject: [PATCH 62/96] style improved --- MFRC522.cpp | 82 ++++++++++++++++++++++++++--------------------------- MFRC522.h | 6 ++-- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 698950a..3e8d084 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -114,7 +114,7 @@ void MFRC522::PCD_ReadRegister( byte reg, ///< The register to read from. One o mask |= (1 << i); } // Read value and tell that we want to read the same address again. - byte value = SPI.transfer(address); + byte value = SPI.transfer(address); // Apply mask to both current value of values[0] and the new data in value. values[0] = (values[index] & ~mask) | (value & mask); } @@ -387,7 +387,7 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut // Prepare values for BitFramingReg byte txLastBits = validBits ? *validBits : 0; - byte bitFraming = (rxAlign << 4) + txLastBits; // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + byte bitFraming = (rxAlign << 4) + txLastBits; // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. PCD_WriteRegister(ComIrqReg, 0x7F); // Clear all seven interrupt request bits @@ -452,7 +452,7 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut return STATUS_CRC_WRONG; } // Verify CRC_A - do our own calculation and store the control in controlBuffer. - byte controlBuffer[2]; + byte controlBuffer[2]; n = PCD_CalculateCRC(&backData[0], *backLen - 2, &controlBuffer[0]); if (n != STATUS_OK) { return n; @@ -540,7 +540,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp bool uidComplete; bool selectDone; bool useCascadeTag; - byte cascadeLevel = 1; + byte cascadeLevel = 1; byte result; byte count; byte index; @@ -585,7 +585,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp // Repeat Cascade Level loop until we have a complete UID. uidComplete = false; - while ( ! uidComplete) { + while (!uidComplete) { // Set the Cascade Level in the SEL byte, find out if we need to use the Cascade Tag in byte 2. switch (cascadeLevel) { case 1: @@ -624,7 +624,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp byte bytesToCopy = currentLevelKnownBits / 8 + (currentLevelKnownBits % 8 ? 1 : 0); // The number of bytes needed to represent the known bits for this level. if (bytesToCopy) { byte maxBytes = useCascadeTag ? 3 : 4; // Max 4 bytes in each Cascade Level. Only 3 left if we use the Cascade Tag - if (bytesToCopy > maxBytes) { + if (bytesToCopy > maxBytes) { bytesToCopy = maxBytes; } for (count = 0; count < bytesToCopy; count++) { @@ -638,7 +638,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp // Repeat anti collision loop until we can transmit all UID bits + BCC and receive a SAK - max 32 iterations. selectDone = false; - while ( ! selectDone) { + while (!selectDone) { // Find out how many bits and bytes to send and receive. if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT. //Serial.print("SELECT: currentLevelKnownBits="); Serial.println(currentLevelKnownBits, DEC); @@ -673,7 +673,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp PCD_WriteRegister(BitFramingReg, (rxAlign << 4) + txLastBits); // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] // Transmit the buffer and receive the response. - result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign); + result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign); if (result == STATUS_COLLISION) { // More than one PICC in the field => collision. result = PCD_ReadRegister(CollReg); // CollReg[7..0] bits are: ValuesAfterColl reserved CollPosNotValid CollPos[4:0] if (result & 0x20) { // CollPosNotValid @@ -690,7 +690,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp currentLevelKnownBits = collisionPos; count = (currentLevelKnownBits - 1) % 8; // The bit to modify index = 1 + (currentLevelKnownBits / 8) + (count ? 1 : 0); // First byte is index 0. - buffer[index] |= (1 << count); + buffer[index] |= (1 << count); } else if (result != STATUS_OK) { return result; @@ -706,7 +706,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp // Run loop again to do the SELECT. } } - } // End of while ( ! selectDone) + } // End of while (!selectDone) // We do not check the CBB - it was constructed by us above. @@ -718,7 +718,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp } // Check response SAK (Select Acknowledge) - if (responseLength != 3 || txLastBits != 0) { // SAK must be exactly 24 bits (1 byte + CRC_A). + if (responseLength != 3 || txLastBits != 0) { // SAK must be exactly 24 bits (1 byte + CRC_A). return STATUS_ERROR; } // Verify CRC_A - do our own calculation and store the control in buffer[2..3] - those bytes are not needed anymore. @@ -736,7 +736,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp uidComplete = true; uid->sak = responseBuffer[0]; } - } // End of while ( ! uidComplete) + } // End of while (!uidComplete) // Set correct uid->size uid->size = 3 * cascadeLevel + 1; @@ -751,7 +751,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp */ byte MFRC522::PICC_HaltA() { byte result; - byte buffer[4]; + byte buffer[4]; // Build command buffer buffer[0] = PICC_CMD_HLTA; @@ -898,7 +898,7 @@ byte MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0x } // Step 2: Transfer the data - result = PCD_MIFARE_Transceive( buffer, bufferSize); // Adds CRC_A and checks that the response is MF_ACK. + result = PCD_MIFARE_Transceive(buffer, bufferSize); // Adds CRC_A and checks that the response is MF_ACK. if (result != STATUS_OK) { return result; } @@ -1250,7 +1250,7 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro PICC_DumpMifareUltralightToSerial(); break; - case PICC_TYPE_ISO_14443_4: + case PICC_TYPE_ISO_14443_4: case PICC_TYPE_ISO_18092: case PICC_TYPE_MIFARE_PLUS: case PICC_TYPE_TNP3XXX: @@ -1293,7 +1293,7 @@ void MFRC522::PICC_DumpMifareClassicToSerial( Uid *uid, ///< Pointer to Uid str break; default: // Should not happen. Ignore. - break; + break; } // Dump sectors, highest address first. @@ -1526,16 +1526,16 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { byte response[32]; // Card's response is written here byte received; byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 - if( status != STATUS_OK ) { - if( logErrors ) { + if(status != STATUS_OK) { + if(logErrors) { Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?")); Serial.print(F("Error name: ")); Serial.println(GetStatusCodeName(status)); } return false; } - if ( received != 1 || response[0] != 0x0A ) { - if ( logErrors ) { + if (received != 1 || response[0] != 0x0A) { + if (logErrors) { Serial.print(F("Got bad response on backdoor 0x40 command: ")); Serial.print(response[0], HEX); Serial.print(F(" (")); @@ -1548,16 +1548,16 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { cmd = 0x43; validBits = 8; status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 - if( status != STATUS_OK ) { - if( logErrors ) { + if(status != STATUS_OK) { + if(logErrors) { Serial.println(F("Error in communication at command 0x43, after successfully executing 0x40")); Serial.print(F("Error name: ")); Serial.println(GetStatusCodeName(status)); } return false; } - if ( received != 1 || response[0] != 0x0A ) { - if ( logErrors ) { + if (received != 1 || response[0] != 0x0A) { + if (logErrors) { Serial.print(F("Got bad response on backdoor 0x43 command: ")); Serial.print(response[0], HEX); Serial.print(F(" (")); @@ -1579,11 +1579,11 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { * It assumes a default KEY A of 0xFFFFFFFFFFFF. * Make sure to have selected the card before this function is called. */ -bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { +bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) { // UID + BCC byte can not be larger than 16 together - if ( !newUid || !uidSize || uidSize > 15) { - if ( logErrors ) { + if (!newUid || !uidSize || uidSize > 15) { + if (logErrors) { Serial.println(F("New UID buffer empty, size 0, or size > 15 given")); } return false; @@ -1592,9 +1592,9 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // Authenticate for reading MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; byte status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); - if ( status != STATUS_OK ) { + if (status != STATUS_OK) { - if ( status == STATUS_TIMEOUT ) { + if (status == STATUS_TIMEOUT) { // We get a read timeout if no card is selected yet, so let's select one // Wake the card up again if sleeping @@ -1602,15 +1602,15 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // byte atqa_size = 2; // PICC_WakeupA(atqa_answer, &atqa_size); - if ( !PICC_IsNewCardPresent() || !PICC_ReadCardSerial() ) { + if (!PICC_IsNewCardPresent() || !PICC_ReadCardSerial()) { Serial.println(F("No card was previously selected, and none are available. Failed to set UID.")); return false; } status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); - if ( status != STATUS_OK ) { + if (status != STATUS_OK) { // We tried, time to give up - if ( logErrors ) { + if (logErrors) { Serial.println(F("Failed to authenticate to card for reading, could not set UID: ")); Serial.println(GetStatusCodeName(status)); } @@ -1618,7 +1618,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { } } else { - if ( logErrors ) { + if (logErrors) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(GetStatusCodeName(status)); } @@ -1630,8 +1630,8 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { byte block0_buffer[18]; byte byteCount = sizeof(block0_buffer); status = MIFARE_Read((byte)0, block0_buffer, &byteCount); - if ( status != STATUS_OK ) { - if ( logErrors ) { + if (status != STATUS_OK) { + if (logErrors) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(GetStatusCodeName(status)); Serial.println(F("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?")); @@ -1641,7 +1641,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // Write new UID to the data we just read, and calculate BCC byte byte bcc = 0; - for ( int i = 0; i < uidSize; i++ ) { + for (int i = 0; i < uidSize; i++) { block0_buffer[i] = newUid[i]; bcc ^= newUid[i]; } @@ -1653,8 +1653,8 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { PCD_StopCrypto1(); // Activate UID backdoor - if ( !MIFARE_OpenUidBackdoor(logErrors) ) { - if ( logErrors ) { + if (!MIFARE_OpenUidBackdoor(logErrors)) { + if (logErrors) { Serial.println(F("Activating the UID backdoor failed.")); } return false; @@ -1663,7 +1663,7 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { // Write modified block 0 back to card status = MIFARE_Write((byte)0, block0_buffer, (byte)16); if (status != STATUS_OK) { - if ( logErrors ) { + if (logErrors) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(GetStatusCodeName(status)); } @@ -1682,14 +1682,14 @@ bool MFRC522::MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors) { * Resets entire sector 0 to zeroes, so the card can be read again by readers. */ bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { - MIFARE_OpenUidBackdoor( logErrors ); + MIFARE_OpenUidBackdoor(logErrors); byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Write modified block 0 back to card byte status = MIFARE_Write((byte)0, block0_buffer, (byte)16); if (status != STATUS_OK) { - if ( logErrors ) { + if (logErrors) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(GetStatusCodeName(status)); } diff --git a/MFRC522.h b/MFRC522.h index 098d874..ba0c16c 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -324,7 +324,7 @@ public: byte PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData = NULL, byte *backLen = NULL, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); byte PICC_RequestA(byte *bufferATQA, byte *bufferSize); byte PICC_WakeupA(byte *bufferATQA, byte *bufferSize); - byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); + byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); byte PICC_Select(Uid *uid, byte validBits = 0); byte PICC_HaltA(); @@ -360,14 +360,14 @@ public: void PICC_DumpMifareUltralightToSerial(); void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3); bool MIFARE_OpenUidBackdoor(bool logErrors); - bool MIFARE_SetUid(byte* newUid, byte uidSize, bool logErrors); + bool MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors); bool MIFARE_UnbrickUidSector(bool logErrors); ///////////////////////////////////////////////////////////////////////////////////// // Convenience functions - does not add extra functionality ///////////////////////////////////////////////////////////////////////////////////// bool PICC_IsNewCardPresent(); - bool PICC_ReadCardSerial(); + bool PICC_ReadCardSerial(); private: byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) From a7f6f7526d3c516a6d8f5f865a89a6887b085d58 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Thu, 2 Apr 2015 17:28:48 +0200 Subject: [PATCH 63/96] tiny typo --- MFRC522.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MFRC522.h b/MFRC522.h index ba0c16c..c249f85 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -40,7 +40,7 @@ * Bytes 6-8: Access Bits * Bytes 9: User data * Bytes 10-15: Key B (or user data) - * Block 0 is read only manufacturer data. + * Block 0 is read-only manufacturer data. * To access a block, an authentication using a key from the block's sector must be performed first. * Example: To read from block 10, first authenticate using a key from sector 3 (blocks 8-11). * All keys are set to FFFFFFFFFFFFh at chip delivery. From b49790d40c1176cc800dbbc1e7415e8083ac7afc Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Fri, 3 Apr 2015 19:47:11 +0200 Subject: [PATCH 64/96] example for firmware check --- examples/firmware_check/firmware_check.ino | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 examples/firmware_check/firmware_check.ino diff --git a/examples/firmware_check/firmware_check.ino b/examples/firmware_check/firmware_check.ino new file mode 100644 index 0000000..c72795b --- /dev/null +++ b/examples/firmware_check/firmware_check.ino @@ -0,0 +1,72 @@ +/* + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. The functions are + * documented in MFRC522.cpp. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * Example sketch/program showing how to test your firmware. + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS SDA(SS) 10 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 module + + Serial.println(F("*****************************")); + Serial.println(F("MFRC522 Digital self test")); + Serial.println(F("*****************************")); + ShowReaderDetails(); // Show details of PCD - MFRC522 Card Reader details + Serial.println(F("Performing test...")); + bool result = mfrc522.PCD_PerformSelfTest(); + Serial.println(F("-----------------------------")); + Serial.print(F("Result: ")); + if (result) + Serial.println(F("OK")); + else + Serial.println(F("defect or unknown")); + Serial.println(); +} + +void loop() {} // nothing to do + +void ShowReaderDetails() { + // Get the MFRC522 firmware version + byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); + Serial.print(F("Firmware Version: 0x")); + Serial.print(v, HEX); + if (v == 0x91) + Serial.print(F(" = v1.0")); + else if (v == 0x92) + Serial.print(F(" = v2.0")); + else + Serial.print(F(" = (unknown)")); + Serial.println(); + // When 0x00 or 0xFF is returned, communication probably failed + if ((v == 0x00) || (v == 0xFF)) + Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?")); +} From 33ef3be01304a3d8367e9b791a19c08677f9e0df Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Mon, 6 Apr 2015 17:56:32 +0200 Subject: [PATCH 65/96] tiny wrong comment --- MFRC522.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MFRC522.h b/MFRC522.h index c249f85..d2c00da 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -218,8 +218,8 @@ public: PICC_CMD_WUPA = 0x52, // Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1 - PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 1 - PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 1 + PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2 + PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3 PICC_CMD_HLTA = 0x50, // HaLT command, Type A. Instructs an ACTIVE PICC to go to state HALT. // The commands used for MIFARE Classic (from http://www.nxp.com/documents/data_sheet/MF1S503x.pdf, Section 9) // Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector. From 4cbca4bada4d1bb19a269337e5faf317733799bb Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Mon, 6 Apr 2015 17:59:32 +0200 Subject: [PATCH 66/96] move last remaining strings to flash save: 6 byte ram cost: 20 byte flash --- MFRC522.cpp | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 3e8d084..88d7478 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -100,7 +100,7 @@ void MFRC522::PCD_ReadRegister( byte reg, ///< The register to read from. One o if (count == 0) { return; } - //Serial.print("Reading "); Serial.print(count); Serial.println(" bytes from register."); + //Serial.print(F("Reading ")); Serial.print(count); Serial.println(F(" bytes from register.")); byte address = 0x80 | (reg & 0x7E); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3. byte index = 0; // Index in values array. digitalWrite(_chipSelectPin, LOW); // Select slave @@ -641,7 +641,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp while (!selectDone) { // Find out how many bits and bytes to send and receive. if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT. - //Serial.print("SELECT: currentLevelKnownBits="); Serial.println(currentLevelKnownBits, DEC); + //Serial.print(F("SELECT: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes // Calculate BCC - Block Check Character buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5]; @@ -657,7 +657,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp responseLength = 3; } else { // This is an ANTICOLLISION. - //Serial.print("ANTICOLLISION: currentLevelKnownBits="); Serial.println(currentLevelKnownBits, DEC); + //Serial.print(F("ANTICOLLISION: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); txLastBits = currentLevelKnownBits % 8; count = currentLevelKnownBits / 8; // Number of whole bytes in the UID part. index = 2 + count; // Number of whole bytes: SEL + NVB + UIDs @@ -1224,7 +1224,10 @@ void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned fro // UID Serial.print(F("Card UID:")); for (byte i = 0; i < uid->size; i++) { - Serial.print(uid->uidByte[i] < 0x10 ? " 0" : " "); + if(uid->uidByte[i] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); Serial.print(uid->uidByte[i], HEX); } Serial.println(); @@ -1358,7 +1361,10 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U blockAddr = firstBlock + blockOffset; // Sector number - only on first line if (isSectorTrailer) { - Serial.print(sector < 10 ? " " : " "); // Pad with spaces + if(sector < 10) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces Serial.print(sector); Serial.print(F(" ")); } @@ -1366,7 +1372,14 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U Serial.print(F(" ")); } // Block number - Serial.print(blockAddr < 10 ? " " : (blockAddr < 100 ? " " : " ")); // Pad with spaces + if(blockAddr < 10) + Serial.print(F(" ")); // Pad with spaces + else { + if(blockAddr < 100) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces + } Serial.print(blockAddr); Serial.print(F(" ")); // Establish encrypted communications before reading the first block @@ -1388,7 +1401,10 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U } // Dump data for (byte index = 0; index < 16; index++) { - Serial.print(buffer[index] < 0x10 ? " 0" : " "); + if(buffer[index] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); Serial.print(buffer[index], HEX); if ((index % 4) == 3) { Serial.print(F(" ")); @@ -1423,8 +1439,8 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U if (firstInGroup) { // Print access bits Serial.print(F(" [ ")); - Serial.print((g[group] >> 2) & 1, DEC); Serial.print(" "); - Serial.print((g[group] >> 1) & 1, DEC); Serial.print(" "); + Serial.print((g[group] >> 2) & 1, DEC); Serial.print(F(" ")); + Serial.print((g[group] >> 1) & 1, DEC); Serial.print(F(" ")); Serial.print((g[group] >> 0) & 1, DEC); Serial.print(F(" ] ")); if (invertedError) { @@ -1466,12 +1482,18 @@ void MFRC522::PICC_DumpMifareUltralightToSerial() { // Dump data for (byte offset = 0; offset < 4; offset++) { i = page + offset; - Serial.print(i < 10 ? " " : " "); // Pad with spaces + if(i < 10) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces Serial.print(i); Serial.print(F(" ")); for (byte index = 0; index < 4; index++) { i = 4 * offset + index; - Serial.print(buffer[i] < 0x10 ? " 0" : " "); + if(buffer[i] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); Serial.print(buffer[i], HEX); } Serial.println(); From 956df8e4344f395a671578e1e860e1250ed8e2ad Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sat, 11 Apr 2015 23:48:48 +0200 Subject: [PATCH 67/96] add comment --- examples/firmware_check/firmware_check.ino | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/firmware_check/firmware_check.ino b/examples/firmware_check/firmware_check.ino index c72795b..2bdf348 100644 --- a/examples/firmware_check/firmware_check.ino +++ b/examples/firmware_check/firmware_check.ino @@ -54,6 +54,9 @@ void setup() { void loop() {} // nothing to do +/** +* Helper to print MFRC522 module info +*/ void ShowReaderDetails() { // Get the MFRC522 firmware version byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); From b8136f2449b2d8a853bc271b56aeaa75f571ad3e Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 12 Apr 2015 02:32:03 +0200 Subject: [PATCH 68/96] upd README make more clear that only type A supported --- README.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index a210eae..2813de2 100644 --- a/README.rst +++ b/README.rst @@ -82,13 +82,14 @@ Protocols 2. The reader and the tags communicate using a 13.56 MHz electromagnetic field. -* The protocol is defined in ISO/IEC 14443-3:2011 Part 3. +* The protocol is defined in ISO/IEC 14443-3:2011 Part 3 Type A. * Details are found in chapter 6 *"Type A – Initialization and anticollision"*. * See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version of the final draft (which might be outdated in some areas). + * The reader do not support ISO/IEC 14443-3 Type B. License ------- From 6e8f4e0f29c018cac127c3da2bd5295f8134918b Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 12 Apr 2015 16:14:37 +0200 Subject: [PATCH 69/96] upd doc --- MFRC522.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MFRC522.cpp b/MFRC522.cpp index 88d7478..db466ab 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1141,6 +1141,7 @@ byte MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data t /** * Returns a __FlashStringHelper pointer to a status code name. * + * @return const __FlashStringHelper * */ const __FlashStringHelper *MFRC522::GetStatusCodeName(byte code ///< One of the StatusCode enums. ) { @@ -1194,6 +1195,7 @@ byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select /** * Returns a __FlashStringHelper pointer to the PICC type name. * + * @return const __FlashStringHelper * */ const __FlashStringHelper *MFRC522::PICC_GetTypeName(byte piccType ///< One of the PICC_Type enums. ) { From 33fc41a302c7f3069f902b3429fa721dd2bc04f3 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 12 Apr 2015 16:33:06 +0200 Subject: [PATCH 70/96] add self-test reference for 0x90 --- MFRC522.cpp | 9 ++++++--- MFRC522.h | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 88d7478..b9e7484 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -285,9 +285,9 @@ bool MFRC522::PCD_PerformSelfTest() { // 2. Clear the internal buffer by writing 25 bytes of 00h byte ZEROES[25] = {0x00}; - PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // flush the FIFO buffer - PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO - PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer + PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // flush the FIFO buffer + PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO + PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer // 3. Enable self-test PCD_WriteRegister(AutoTestReg, 0x09); @@ -323,6 +323,9 @@ bool MFRC522::PCD_PerformSelfTest() { // Pick the appropriate reference values const byte *reference; switch (version) { + case 0x90: // Version 0.0 + reference = MFRC522_firmware_referenceV0_0; + break; case 0x91: // Version 1.0 reference = MFRC522_firmware_referenceV1_0; break; diff --git a/MFRC522.h b/MFRC522.h index d2c00da..8ac78b7 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -79,8 +79,21 @@ #include // Firmware data for self-test -// Reference values based on firmware version; taken from 16.1.1 in spec. -// Version 1.0 +// Reference values based on firmware version +// Version 0.0 (0x90) +// Philips Semiconductors; Preliminary Specification Revision 2.0 - 01 August 2005; 16.1 Sefttest +const byte MFRC522_firmware_referenceV0_0[] PROGMEM = { + 0x00, 0x87, 0x98, 0x0f, 0x49, 0xFF, 0x07, 0x19, + 0xBF, 0x22, 0x30, 0x49, 0x59, 0x63, 0xAD, 0xCA, + 0x7F, 0xE3, 0x4E, 0x03, 0x5C, 0x4E, 0x49, 0x50, + 0x47, 0x9A, 0x37, 0x61, 0xE7, 0xE2, 0xC6, 0x2E, + 0x75, 0x5A, 0xED, 0x04, 0x3D, 0x02, 0x4B, 0x78, + 0x32, 0xFF, 0x58, 0x3B, 0x7C, 0xE9, 0x00, 0x94, + 0xB4, 0x4A, 0x59, 0x5B, 0xFD, 0xC9, 0x29, 0xDF, + 0x35, 0x96, 0x98, 0x9E, 0x4F, 0x30, 0x32, 0x8D +}; +// Version 1.0 (0x91) +// NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 Self test const byte MFRC522_firmware_referenceV1_0[] PROGMEM = { 0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C, 0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73, @@ -91,7 +104,8 @@ const byte MFRC522_firmware_referenceV1_0[] PROGMEM = { 0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02, 0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79 }; -// Version 2.0 +// Version 2.0 (0x92) +// NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 Self test const byte MFRC522_firmware_referenceV2_0[] PROGMEM = { 0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95, 0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE, From 7da08d8fd8b6b0c40dc9b10cf6288ad8d77bf3fe Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Tue, 14 Apr 2015 02:16:36 +0200 Subject: [PATCH 71/96] add firmware version to ShowReaderDetails --- examples/firmware_check/firmware_check.ino | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/firmware_check/firmware_check.ino b/examples/firmware_check/firmware_check.ino index 2bdf348..b774ffd 100644 --- a/examples/firmware_check/firmware_check.ino +++ b/examples/firmware_check/firmware_check.ino @@ -62,7 +62,9 @@ void ShowReaderDetails() { byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F("Firmware Version: 0x")); Serial.print(v, HEX); - if (v == 0x91) + if (v == 0x90) + Serial.print(F(" = v0.0")); + else if (v == 0x91) Serial.print(F(" = v1.0")); else if (v == 0x92) Serial.print(F(" = v2.0")); From 5bbe648b480ac0075592850f663f46dc5048fa40 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sun, 5 Apr 2015 01:15:00 +0200 Subject: [PATCH 72/96] add library specification for arduino ide --- library.properties | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 library.properties diff --git a/library.properties b/library.properties new file mode 100644 index 0000000..84137f6 --- /dev/null +++ b/library.properties @@ -0,0 +1,10 @@ +name=MFRC522 +#date as version +version=20150405 +author=GithubCommunity +maintainer=miguelbalboa +sentence=Arduino RFID Library for MFRC522 (SPI) +paragraph=Read/Write a RFID Card or Tag using the ISO/IEC 14443A/MIFARE interface. +category=Communication +url=https://github.com/miguelbalboa/rfid +architectures=avr From c460250b74e55493a79f617dc8632d52f99c207f Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Tue, 19 May 2015 17:45:47 +0200 Subject: [PATCH 73/96] add Troubleshooting to README --- README.rst | 78 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/README.rst b/README.rst index 2813de2..dc25097 100644 --- a/README.rst +++ b/README.rst @@ -47,28 +47,28 @@ There are three hardware components involved: 1. **Micro Controller**: -* An `Arduino`_ or compatible executing the Sketch using this library. + * An `Arduino`_ or compatible executing the Sketch using this library. -* Prices vary from USD 7 for clones, to USD 75 for "starter kits" (which - might be a good choice if this is your first exposure to Arduino; - check if such kit already includes the Arduino, Reader, and some Tags). + * Prices vary from USD 7 for clones, to USD 75 for "starter kits" (which + might be a good choice if this is your first exposure to Arduino; + check if such kit already includes the Arduino, Reader, and some Tags). 2. **Proximity Coupling Device (PCD)**: -* The PCD is the actual RFID **Reader** based on `NXP MFRC522`_ Contactless - Reader Integrated Circuit). + * The PCD is the actual RFID **Reader** based on `NXP MFRC522`_ Contactless + Reader Integrated Circuit). -* Readers can be found on `eBay`_ for around USD 5: search for *"rc522"*. + * Readers can be found on `eBay`_ for around USD 5: search for *"rc522"*. -* You can also find them at several web stores, they are often included in - *"starter kits"*; so check your favourite electronics provider as well. + * You can also find them at several web stores, they are often included in + *"starter kits"*; so check your favourite electronics provider as well. 3. **Proximity Integrated Circuit Card (PICC)**: -* The PICC is the RFID **Card** or **Tag** using the `ISO/IEC 14443A`_ - interface, for example Mifare or NTAG203. + * The PICC is the RFID **Card** or **Tag** using the `ISO/IEC 14443A`_ + interface, for example Mifare or NTAG203. -* One or two might be included with the Reader or *"starter kit"* already. + * One or two might be included with the Reader or *"starter kit"* already. Protocols @@ -76,21 +76,61 @@ Protocols 1. The micro controller and the reader use SPI for communication. -* The protocol is described in the `NXP MFRC522`_ datasheet. + * The protocol is described in the `NXP MFRC522`_ datasheet. -* See the `Pin Layout`_ section for details on connecting the pins. + * See the `Pin Layout`_ section for details on connecting the pins. 2. The reader and the tags communicate using a 13.56 MHz electromagnetic field. -* The protocol is defined in ISO/IEC 14443-3:2011 Part 3 Type A. + * The protocol is defined in ISO/IEC 14443-3:2011 Part 3 Type A. - * Details are found in chapter 6 *"Type A – Initialization and anticollision"*. + * Details are found in chapter 6 *"Type A – Initialization and anticollision"*. - * See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version - of the final draft (which might be outdated in some areas). + * See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version + of the final draft (which might be outdated in some areas). - * The reader do not support ISO/IEC 14443-3 Type B. + * The reader do not support ISO/IEC 14443-3 Type B. + +Troubleshooting +------- + +* **I don't get input from reader** or **WARNING: Communication failure, is the MFRC522 properly connected?** + + 1. Check your connection, see `Pin Layout`_ . + 2. Check voltage. Most breakouts work with 3.3V. + 3. The SPI only works with 3.3V, most breakouts seems 5V tollerant, but try a level shifter. + + +* **Sometimes I get timeouts** or **tag/card sometimes not work.** + + 1. Try other site of the antenna. + 2. Try to decrease distance between MFRC522. + 3. Increase antenna gain per firmware: ``mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);`` + 4. Use better power supply. + 5. Hardware corrupted, most products are from china and sometimes the quality is really low. Contact your seller. + + +* **My tag/card doesn't work.** + + 1. Distance between antenna and token too huge (>1cm). + 2. You got wrong PICC. Is it really 13.56MGhz? Is it really a Mifare Type A? + 3. NFC tokens are not supported. Some may work. + 4. Animal marker are not supported. They use other frequency. + 5. Hardware corrupted, most products are from china and sometimes the quality is really low. Contact your seller. + +* **My mobile phone doesn't recognize the MFRC522** or **my MFRC522 can't read data from other MFRC522** + + 1. Card simmulation is not supported. + 2. Communication with mobile phones is not supported. + 3. Peer to peer communication is not supported. + +* **I need more features.** + + 1. If software: code it and make a pull request. + 2. If hardware: buy a more expensive like PN532 (supports NFC and many more, but costs about $15) + + License ------- This is free and unencumbered software released into the public domain. From 27211e0f23069359a1e1eb15a4d8900399d1d8f5 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Tue, 19 May 2015 17:53:45 +0200 Subject: [PATCH 74/96] correct mistake at README --- README.rst | 78 +++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/README.rst b/README.rst index dc25097..48af024 100644 --- a/README.rst +++ b/README.rst @@ -47,28 +47,28 @@ There are three hardware components involved: 1. **Micro Controller**: - * An `Arduino`_ or compatible executing the Sketch using this library. +* An `Arduino`_ or compatible executing the Sketch using this library. - * Prices vary from USD 7 for clones, to USD 75 for "starter kits" (which - might be a good choice if this is your first exposure to Arduino; - check if such kit already includes the Arduino, Reader, and some Tags). +* Prices vary from USD 7 for clones, to USD 75 for "starter kits" (which + might be a good choice if this is your first exposure to Arduino; + check if such kit already includes the Arduino, Reader, and some Tags). 2. **Proximity Coupling Device (PCD)**: - * The PCD is the actual RFID **Reader** based on `NXP MFRC522`_ Contactless - Reader Integrated Circuit). +* The PCD is the actual RFID **Reader** based on `NXP MFRC522`_ Contactless + Reader Integrated Circuit). - * Readers can be found on `eBay`_ for around USD 5: search for *"rc522"*. +* Readers can be found on `eBay`_ for around USD 5: search for *"rc522"*. - * You can also find them at several web stores, they are often included in - *"starter kits"*; so check your favourite electronics provider as well. +* You can also find them at several web stores, they are often included in + *"starter kits"*; so check your favourite electronics provider as well. 3. **Proximity Integrated Circuit Card (PICC)**: - * The PICC is the RFID **Card** or **Tag** using the `ISO/IEC 14443A`_ - interface, for example Mifare or NTAG203. +* The PICC is the RFID **Card** or **Tag** using the `ISO/IEC 14443A`_ + interface, for example Mifare or NTAG203. - * One or two might be included with the Reader or *"starter kit"* already. +* One or two might be included with the Reader or *"starter kit"* already. Protocols @@ -76,20 +76,20 @@ Protocols 1. The micro controller and the reader use SPI for communication. - * The protocol is described in the `NXP MFRC522`_ datasheet. +* The protocol is described in the `NXP MFRC522`_ datasheet. - * See the `Pin Layout`_ section for details on connecting the pins. +* See the `Pin Layout`_ section for details on connecting the pins. 2. The reader and the tags communicate using a 13.56 MHz electromagnetic field. - * The protocol is defined in ISO/IEC 14443-3:2011 Part 3 Type A. +* The protocol is defined in ISO/IEC 14443-3:2011 Part 3 Type A. - * Details are found in chapter 6 *"Type A – Initialization and anticollision"*. - - * See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version - of the final draft (which might be outdated in some areas). - - * The reader do not support ISO/IEC 14443-3 Type B. + * Details are found in chapter 6 *"Type A – Initialization and anticollision"*. + + * See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version + of the final draft (which might be outdated in some areas). + + * The reader do not support ISO/IEC 14443-3 Type B. Troubleshooting @@ -97,38 +97,38 @@ Troubleshooting * **I don't get input from reader** or **WARNING: Communication failure, is the MFRC522 properly connected?** - 1. Check your connection, see `Pin Layout`_ . - 2. Check voltage. Most breakouts work with 3.3V. - 3. The SPI only works with 3.3V, most breakouts seems 5V tollerant, but try a level shifter. + #. Check your connection, see `Pin Layout`_ . + #. Check voltage. Most breakouts work with 3.3V. + #. The SPI only works with 3.3V, most breakouts seems 5V tollerant, but try a level shifter. * **Sometimes I get timeouts** or **tag/card sometimes not work.** - 1. Try other site of the antenna. - 2. Try to decrease distance between MFRC522. - 3. Increase antenna gain per firmware: ``mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);`` - 4. Use better power supply. - 5. Hardware corrupted, most products are from china and sometimes the quality is really low. Contact your seller. + #. Try other site of the antenna. + #. Try to decrease distance between MFRC522. + #. Increase antenna gain per firmware: ``mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);`` + #. Use better power supply. + #. Hardware corrupted, most products are from china and sometimes the quality is really low. Contact your seller. * **My tag/card doesn't work.** - 1. Distance between antenna and token too huge (>1cm). - 2. You got wrong PICC. Is it really 13.56MGhz? Is it really a Mifare Type A? - 3. NFC tokens are not supported. Some may work. - 4. Animal marker are not supported. They use other frequency. - 5. Hardware corrupted, most products are from china and sometimes the quality is really low. Contact your seller. + #. Distance between antenna and token too huge (>1cm). + #. You got wrong PICC. Is it really 13.56MGhz? Is it really a Mifare Type A? + #. NFC tokens are not supported. Some may work. + #. Animal marker are not supported. They use other frequency. + #. Hardware corrupted, most products are from china and sometimes the quality is really low. Contact your seller. * **My mobile phone doesn't recognize the MFRC522** or **my MFRC522 can't read data from other MFRC522** - 1. Card simmulation is not supported. - 2. Communication with mobile phones is not supported. - 3. Peer to peer communication is not supported. + #. Card simmulation is not supported. + #. Communication with mobile phones is not supported. + #. Peer to peer communication is not supported. * **I need more features.** - 1. If software: code it and make a pull request. - 2. If hardware: buy a more expensive like PN532 (supports NFC and many more, but costs about $15) + #. If software: code it and make a pull request. + #. If hardware: buy a more expensive like PN532 (supports NFC and many more, but costs about $15) License From ced2555bc47cfcda366370143850f177e83e6312 Mon Sep 17 00:00:00 2001 From: Marcos Vives Del Sol Date: Fri, 12 Jun 2015 21:02:36 +0200 Subject: [PATCH 75/96] Added selftest support for FM17522 --- MFRC522.cpp | 3 +++ MFRC522.h | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/MFRC522.cpp b/MFRC522.cpp index db466ab..306708f 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -323,6 +323,9 @@ bool MFRC522::PCD_PerformSelfTest() { // Pick the appropriate reference values const byte *reference; switch (version) { + case 0x88: // Fudan Semiconductor FM17522 clone + reference = FM17522_firmware_reference; + break; case 0x91: // Version 1.0 reference = MFRC522_firmware_referenceV1_0; break; diff --git a/MFRC522.h b/MFRC522.h index d2c00da..48aa73b 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -102,6 +102,17 @@ const byte MFRC522_firmware_referenceV2_0[] PROGMEM = { 0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D, 0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F }; +// Fudan Semiconductor FM17522 +const byte FM17522_firmware_reference[] PROGMEM = { + 0x00, 0xD6, 0x78, 0x8C, 0xE2, 0xAA, 0x0C, 0x18, + 0x2A, 0xB8, 0x7A, 0x7F, 0xD3, 0x6A, 0xCF, 0x0B, + 0xB1, 0x37, 0x63, 0x4B, 0x69, 0xAE, 0x91, 0xC7, + 0xC3, 0x97, 0xAE, 0x77, 0xF4, 0x37, 0xD7, 0x9B, + 0x7C, 0xF5, 0x3C, 0x11, 0x8F, 0x15, 0xC3, 0xD7, + 0xC1, 0x5B, 0x00, 0x2A, 0xD0, 0x75, 0xDE, 0x9E, + 0x51, 0x64, 0xAB, 0x3E, 0xE9, 0x15, 0xB5, 0xAB, + 0x56, 0x9A, 0x98, 0x82, 0x26, 0xEA, 0x2A, 0x62 +}; class MFRC522 { public: From ecb509a0d6a0a6baa73dab03f7b32dc36d336515 Mon Sep 17 00:00:00 2001 From: Adrian Nistor Date: Sat, 13 Jun 2015 19:36:07 +0300 Subject: [PATCH 76/96] Fix invalid escape sequence --- .../rfid_write_personal_data/rfid_write_personal_data.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/rfid_write_personal_data/rfid_write_personal_data.ino b/examples/rfid_write_personal_data/rfid_write_personal_data.ino index 21721a6..dda943a 100644 --- a/examples/rfid_write_personal_data/rfid_write_personal_data.ino +++ b/examples/rfid_write_personal_data/rfid_write_personal_data.ino @@ -64,7 +64,7 @@ void loop() { // Ask personal data: Family name Serial.println(F("Type Family name, ending with #")); len=Serial.readBytesUntil('#', (char *) buffer, 30) ; // read family name from serial - for (byte i = len; i < 30; i++) buffer[i] = '\s'; // pad with spaces + for (byte i = len; i < 30; i++) buffer[i] = ' '; // pad with spaces block = 1; //Serial.println(F("Authenticating using key A...")); @@ -106,7 +106,7 @@ void loop() { // Ask personal data: First name Serial.println(F("Type First name, ending with #")); len=Serial.readBytesUntil('#', (char *) buffer, 20) ; // read first name from serial - for (byte i = len; i < 20; i++) buffer[i] = '\s'; // pad with spaces + for (byte i = len; i < 20; i++) buffer[i] = ' '; // pad with spaces block = 4; //Serial.println(F("Authenticating using key A...")); From 56da797e704a50fe3302843faf1b70c8247c6063 Mon Sep 17 00:00:00 2001 From: Adrian Nistor Date: Sat, 13 Jun 2015 19:37:40 +0300 Subject: [PATCH 77/96] Fix typos --- MFRC522.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MFRC522.h b/MFRC522.h index d2c00da..1f1c9a7 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -58,13 +58,13 @@ * MIFARE Ultralight (MF0ICU1): * Has 16 pages of 4 bytes = 64 bytes. * Pages 0 + 1 is used for the 7-byte UID. - * Page 2 contains the last chech digit for the UID, one byte manufacturer internal data, and the lock bytes (see http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) + * Page 2 contains the last check digit for the UID, one byte manufacturer internal data, and the lock bytes (see http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) * Page 3 is OTP, One Time Programmable bits. Once set to 1 they cannot revert to 0. * Pages 4-15 are read/write unless blocked by the lock bytes in page 2. * MIFARE Ultralight C (MF0ICU2): - * Has 48 pages of 4 bytes = 64 bytes. + * Has 48 pages of 4 bytes = 192 bytes. * Pages 0 + 1 is used for the 7-byte UID. - * Page 2 contains the last chech digit for the UID, one byte manufacturer internal data, and the lock bytes (see http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) + * Page 2 contains the last check digit for the UID, one byte manufacturer internal data, and the lock bytes (see http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) * Page 3 is OTP, One Time Programmable bits. Once set to 1 they cannot revert to 0. * Pages 4-39 are read/write unless blocked by the lock bytes in page 2. * Page 40 Lock bytes From 9a27fd7571a06add470e21644578c94611b6c8d1 Mon Sep 17 00:00:00 2001 From: Adrian Nistor Date: Sat, 13 Jun 2015 19:38:14 +0300 Subject: [PATCH 78/96] Allow the library to be used on STM32F1 platform --- library.json | 2 +- library.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library.json b/library.json index 96917e1..94e8453 100644 --- a/library.json +++ b/library.json @@ -9,5 +9,5 @@ }, "exclude": "doc", "frameworks": "arduino", - "platforms": "atmelavr" + "platforms": ["atmelavr", "ststm32"] } diff --git a/library.properties b/library.properties index 84137f6..9b26c35 100644 --- a/library.properties +++ b/library.properties @@ -7,4 +7,4 @@ sentence=Arduino RFID Library for MFRC522 (SPI) paragraph=Read/Write a RFID Card or Tag using the ISO/IEC 14443A/MIFARE interface. category=Communication url=https://github.com/miguelbalboa/rfid -architectures=avr +architectures=avr,STM32F1 From 68f0b68a5aae725e3ab5a00678b719ae3a9515ff Mon Sep 17 00:00:00 2001 From: Adrian Nistor Date: Sat, 13 Jun 2015 19:59:04 +0300 Subject: [PATCH 79/96] Some fixes for STM32F1 platform * replace char with int8_t because char does not seem to be signed on STM32 and leads to infinite loops. * move the pin handling out of constructor and into PCD_Init() function to avoid problems with digitalWrite() crashing due to unpredictable global variable initialisation order on STM32 (pin map arrays are not always setup before user's global objects are constructed). --- MFRC522.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index db466ab..717bab8 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -18,18 +18,8 @@ MFRC522::MFRC522( byte chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) ) { - // Set the chipSelectPin as digital output, do not select the slave yet _chipSelectPin = chipSelectPin; - pinMode(_chipSelectPin, OUTPUT); - digitalWrite(_chipSelectPin, HIGH); - - // Set the resetPowerDownPin as digital output, do not reset or power down. _resetPowerDownPin = resetPowerDownPin; - pinMode(_resetPowerDownPin, OUTPUT); - digitalWrite(_resetPowerDownPin, LOW); - - // Set SPI bus to work with MFRC522 chip. - setSPIConfig(); } // End constructor /** @@ -194,6 +184,16 @@ byte MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to tra * Initializes the MFRC522 chip. */ void MFRC522::PCD_Init() { + // Set the chipSelectPin as digital output, do not select the slave yet + pinMode(_chipSelectPin, OUTPUT); + digitalWrite(_chipSelectPin, HIGH); + + // Set the resetPowerDownPin as digital output, do not reset or power down. + pinMode(_resetPowerDownPin, OUTPUT); + + // Set SPI bus to work with MFRC522 chip. + setSPIConfig(); + if (digitalRead(_resetPowerDownPin) == LOW) { //The MFRC522 chip is in power down mode. digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74�s. Let us be generous: 50ms. @@ -545,7 +545,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp byte count; byte index; byte uidIndex; // The first index in uid->uidByte[] that is used in the current Cascade Level. - char currentLevelKnownBits; // The number of known UID bits in the current Cascade Level. + int8_t currentLevelKnownBits; // The number of known UID bits in the current Cascade Level. byte buffer[9]; // The SELECT/ANTICOLLISION commands uses a 7 byte standard frame + 2 bytes CRC_A byte bufferUsed; // The number of bytes used in the buffer, ie the number of bytes to transfer to the FIFO. byte rxAlign; // Used in BitFramingReg. Defines the bit position for the first bit received. @@ -1304,7 +1304,7 @@ void MFRC522::PICC_DumpMifareClassicToSerial( Uid *uid, ///< Pointer to Uid str // Dump sectors, highest address first. if (no_of_sectors) { Serial.println(F("Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits")); - for (char i = no_of_sectors - 1; i >= 0; i--) { + for (int8_t i = no_of_sectors - 1; i >= 0; i--) { PICC_DumpMifareClassicSectorToSerial(uid, key, i); } } @@ -1359,7 +1359,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U byte buffer[18]; byte blockAddr; isSectorTrailer = true; - for (char blockOffset = no_of_blocks - 1; blockOffset >= 0; blockOffset--) { + for (int8_t blockOffset = no_of_blocks - 1; blockOffset >= 0; blockOffset--) { blockAddr = firstBlock + blockOffset; // Sector number - only on first line if (isSectorTrailer) { From e071335e4b4c2c2a1a7686590f58bd4c3cf25f32 Mon Sep 17 00:00:00 2001 From: AllToTheX Date: Sun, 16 Aug 2015 02:10:46 +0200 Subject: [PATCH 80/96] Add return to MIFARE_UnbrickUidSector() So the code can't reach end of non-void function --- MFRC522.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/MFRC522.cpp b/MFRC522.cpp index bb1acbe..df1433f 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1722,6 +1722,7 @@ bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { } return false; } + return true; } ///////////////////////////////////////////////////////////////////////////////////// From a5efda7ab31fe9db3b84e5ee27c370cefd8b4bfd Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Fri, 4 Sep 2015 10:46:59 +0200 Subject: [PATCH 81/96] readme wrong pin at mega; fix #114 --- README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index 48af024..3aa6397 100644 --- a/README.rst +++ b/README.rst @@ -28,11 +28,11 @@ The following table shows the typical pin layout used: +-----------+----------+-------------+---------+---------+---------------+-----------+--------+ | SPI SS | SDA [3]_ | 10 [2]_ | 53 [2]_ | D10 | 10 | 10 | 10 | +-----------+----------+-------------+---------+---------+---------------+-----------+--------+ -| SPI MOSI | MOSI | 11 / ICSP-4 | 52 | D11 | ICSP-4 | 16 | 11 | +| SPI MOSI | MOSI | 11 / ICSP-4 | 51 | D11 | ICSP-4 | 16 | 11 | +-----------+----------+-------------+---------+---------+---------------+-----------+--------+ -| SPI MISO | MISO | 12 / ICSP-1 | 51 | D12 | ICSP-1 | 14 | 12 | +| SPI MISO | MISO | 12 / ICSP-1 | 50 | D12 | ICSP-1 | 14 | 12 | +-----------+----------+-------------+---------+---------+---------------+-----------+--------+ -| SPI SCK | SCK | 13 / ICSP-3 | 50 | D13 | ICSP-3 | 15 | 13 | +| SPI SCK | SCK | 13 / ICSP-3 | 52 | D13 | ICSP-3 | 15 | 13 | +-----------+----------+-------------+---------+---------+---------------+-----------+--------+ .. [1] Configurable, typically defined as RST_PIN in sketch/program. From 7e9a17db4969e87e898d309143893cedc4b5268b Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Fri, 4 Sep 2015 11:32:43 +0200 Subject: [PATCH 82/96] upd library version for arduino lib manager --- library.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.properties b/library.properties index 9b26c35..d223ed8 100644 --- a/library.properties +++ b/library.properties @@ -1,6 +1,6 @@ name=MFRC522 -#date as version -version=20150405 +#date as version - no leading zero +version=2015.9.4 author=GithubCommunity maintainer=miguelbalboa sentence=Arduino RFID Library for MFRC522 (SPI) From da578441885b37cfa4361f4079857dc0383663d9 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Fri, 4 Sep 2015 12:54:23 +0200 Subject: [PATCH 83/96] upd firmware_check example --- examples/firmware_check/firmware_check.ino | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/examples/firmware_check/firmware_check.ino b/examples/firmware_check/firmware_check.ino index b774ffd..b923074 100644 --- a/examples/firmware_check/firmware_check.ino +++ b/examples/firmware_check/firmware_check.ino @@ -1,4 +1,6 @@ /* + * ---------------------------------------------------------------------------- + * Example sketch/program to test your firmware. * ---------------------------------------------------------------------------- * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid * for further details and other examples. @@ -7,8 +9,6 @@ * documented in MFRC522.cpp. Please read it. * * Released into the public domain. - * ---------------------------------------------------------------------------- - * Example sketch/program showing how to test your firmware. * * Typical pin layout used: * ----------------------------------------------------------------------------------------- @@ -21,6 +21,8 @@ * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + * @author Rotzbua */ #include @@ -40,7 +42,7 @@ void setup() { Serial.println(F("*****************************")); Serial.println(F("MFRC522 Digital self test")); Serial.println(F("*****************************")); - ShowReaderDetails(); // Show details of PCD - MFRC522 Card Reader details + ShowReaderVersion(); // Show version of PCD - MFRC522 Card Reader Serial.println(F("Performing test...")); bool result = mfrc522.PCD_PerformSelfTest(); Serial.println(F("-----------------------------")); @@ -48,7 +50,7 @@ void setup() { if (result) Serial.println(F("OK")); else - Serial.println(F("defect or unknown")); + Serial.println(F("DEFECT or UNKNOWN")); Serial.println(); } @@ -57,12 +59,14 @@ void loop() {} // nothing to do /** * Helper to print MFRC522 module info */ -void ShowReaderDetails() { +void ShowReaderVersion() { // Get the MFRC522 firmware version byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); Serial.print(F("Firmware Version: 0x")); Serial.print(v, HEX); - if (v == 0x90) + if (v == 0x88) + Serial.print(F(" = (clone)")); + else if (v == 0x90) Serial.print(F(" = v0.0")); else if (v == 0x91) Serial.print(F(" = v1.0")); From 4d5ebedc9e19038ae3b5f6859df5df32df791f0b Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Thu, 17 Sep 2015 20:55:21 +0200 Subject: [PATCH 84/96] fix tiny typo in readme --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 3aa6397..d284f6f 100644 --- a/README.rst +++ b/README.rst @@ -114,7 +114,7 @@ Troubleshooting * **My tag/card doesn't work.** #. Distance between antenna and token too huge (>1cm). - #. You got wrong PICC. Is it really 13.56MGhz? Is it really a Mifare Type A? + #. You got wrong PICC. Is it really 13.56 MHz? Is it really a Mifare Type A? #. NFC tokens are not supported. Some may work. #. Animal marker are not supported. They use other frequency. #. Hardware corrupted, most products are from china and sometimes the quality is really low. Contact your seller. From 65aff9c1a653cb3125475fca635bfc471c2a7064 Mon Sep 17 00:00:00 2001 From: Alistair MacDonald Date: Mon, 2 Nov 2015 15:45:27 +0000 Subject: [PATCH 85/96] Corrected labeling and swapped GND and RST pins in Fritzing schematic. --- doc/fritzing/RFID-RC522-v2.fzpz | Bin 16939 -> 17796 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/fritzing/RFID-RC522-v2.fzpz b/doc/fritzing/RFID-RC522-v2.fzpz index a0393148c06f95c373975920750655e85a290933..1866b0430f792906adbf0512ccd42205679de524 100644 GIT binary patch literal 17796 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 BpS%D7 literal 16939 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 Date: Tue, 1 Dec 2015 16:37:02 +0300 Subject: [PATCH 86/96] Added clearing 7 bit in sak PICC_GetType --- MFRC522.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 770a6f2..9c10969 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1175,7 +1175,10 @@ byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select if (sak & 0x04) { // UID not complete return PICC_TYPE_NOT_COMPLETE; } - + //http://www.nxp.com/documents/application_note/AN10833.pdf + //3.2 Coding of Select Acknowledge (SAK) + //ignore 7-bit + sak&=0x7F; switch (sak) { case 0x09: return PICC_TYPE_MIFARE_MINI; break; case 0x08: return PICC_TYPE_MIFARE_1K; break; From ca66cbefd82c8dfecb4dacf2ec68a7edc9ea8f83 Mon Sep 17 00:00:00 2001 From: mayatforest Date: Tue, 1 Dec 2015 22:02:01 +0400 Subject: [PATCH 87/96] Use 1-8 bit number notation --- MFRC522.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 9c10969..2d9f571 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1177,7 +1177,7 @@ byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select } //http://www.nxp.com/documents/application_note/AN10833.pdf //3.2 Coding of Select Acknowledge (SAK) - //ignore 7-bit + //ignore 8-bit sak&=0x7F; switch (sak) { case 0x09: return PICC_TYPE_MIFARE_MINI; break; From dd3bd76f5d3bbe6c19fa5ef0166cf0886bca8079 Mon Sep 17 00:00:00 2001 From: liviu Date: Tue, 1 Dec 2015 21:25:01 +0100 Subject: [PATCH 88/96] New constructor and PCD_Init() method to allow defining arrays of readers. --- MFRC522.cpp | 100 ++++++--- MFRC522.h | 194 +++++++++--------- .../ReadUidMultiReader/ReadUidMultiReader.ino | 90 ++++++++ 3 files changed, 261 insertions(+), 123 deletions(-) create mode 100644 examples/ReadUidMultiReader/ReadUidMultiReader.ino diff --git a/MFRC522.cpp b/MFRC522.cpp index 770a6f2..aea006f 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -10,6 +10,12 @@ ///////////////////////////////////////////////////////////////////////////////////// // Functions for setting up the Arduino ///////////////////////////////////////////////////////////////////////////////////// +/** + * Constructor. + */ +MFRC522::MFRC522() { + +} // End constructor /** * Constructor. @@ -39,11 +45,11 @@ void MFRC522::setSPIConfig() { * Writes a byte to the specified register in the MFRC522 chip. * The interface is described in the datasheet section 8.1.2. */ -void MFRC522::PCD_WriteRegister( byte reg, ///< The register to write to. One of the PCD_Register enums. - byte value ///< The value to write. - ) { +void MFRC522::PCD_WriteRegister(byte reg, ///< The register to write to. One of the PCD_Register enums. + byte value ///< The value to write. + ) { digitalWrite(_chipSelectPin, LOW); // Select slave - SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. + SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. SPI.transfer(value); digitalWrite(_chipSelectPin, HIGH); // Release slave again } // End PCD_WriteRegister() @@ -52,10 +58,10 @@ void MFRC522::PCD_WriteRegister( byte reg, ///< The register to write to. One o * Writes a number of bytes to the specified register in the MFRC522 chip. * The interface is described in the datasheet section 8.1.2. */ -void MFRC522::PCD_WriteRegister( byte reg, ///< The register to write to. One of the PCD_Register enums. - byte count, ///< The number of bytes to write to the register - byte *values ///< The values to write. Byte array. - ) { +void MFRC522::PCD_WriteRegister(byte reg, ///< The register to write to. One of the PCD_Register enums. + byte count, ///< The number of bytes to write to the register + byte *values ///< The values to write. Byte array. + ) { digitalWrite(_chipSelectPin, LOW); // Select slave SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. for (byte index = 0; index < count; index++) { @@ -216,6 +222,46 @@ void MFRC522::PCD_Init() { PCD_AntennaOn(); // Enable the antenna driver pins TX1 and TX2 (they were disabled by the reset) } // End PCD_Init() +/** + * Initializes the MFRC522 chip. + */ +void MFRC522::PCD_Init(byte chipSelectPin, byte resetPowerDownPin) { + _chipSelectPin = chipSelectPin; + _resetPowerDownPin = resetPowerDownPin; + + // Set the chipSelectPin as digital output, do not select the slave yet + pinMode(_chipSelectPin, OUTPUT); + digitalWrite(_chipSelectPin, HIGH); + + // Set the resetPowerDownPin as digital output, do not reset or power down. + pinMode(_resetPowerDownPin, OUTPUT); + + // Set SPI bus to work with MFRC522 chip. + setSPIConfig(); + + if (digitalRead(_resetPowerDownPin) == LOW) { //The MFRC522 chip is in power down mode. + digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. + // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74�s. Let us be generous: 50ms. + delay(50); + } + else { // Perform a soft reset + PCD_Reset(); + } + + // When communicating with a PICC we need a timeout if something goes wrong. + // f_timer = 13.56 MHz / (2*TPreScaler+1) where TPreScaler = [TPrescaler_Hi:TPrescaler_Lo]. + // TPrescaler_Hi are the four low bits in TModeReg. TPrescaler_Lo is TPrescalerReg. + PCD_WriteRegister(TModeReg, 0x80); // TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds + PCD_WriteRegister(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25�s. + PCD_WriteRegister(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. + PCD_WriteRegister(TReloadRegL, 0xE8); + + PCD_WriteRegister(TxASKReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting + PCD_WriteRegister(ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) + PCD_AntennaOn(); // Enable the antenna driver pins TX1 and TX2 (they were disabled by the reset) +} // End PCD_Init() + + /** * Performs a soft reset on the MFRC522 chip and waits for it to be ready again. */ @@ -360,14 +406,14 @@ bool MFRC522::PCD_PerformSelfTest() { * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO. - byte sendLen, ///< Number of bytes to transfer to the FIFO. - byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. - byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. - byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL. - byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. - bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. - ) { +byte MFRC522::PCD_TransceiveData(byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { byte waitIRq = 0x30; // RxIRq and IdleIRq return PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC); } // End PCD_TransceiveData() @@ -379,15 +425,15 @@ byte MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to t * @return STATUS_OK on success, STATUS_??? otherwise. */ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execute. One of the PCD_Command enums. - byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. - byte *sendData, ///< Pointer to the data to transfer to the FIFO. - byte sendLen, ///< Number of bytes to transfer to the FIFO. - byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. - byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. - byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. - byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. - bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. - ) { + byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. + byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { byte n, _validBits; unsigned int i; @@ -478,8 +524,8 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut * @return STATUS_OK on success, STATUS_??? otherwise. */ byte MFRC522::PICC_RequestA(byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in - byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. - ) { + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { return PICC_REQA_or_WUPA(PICC_CMD_REQA, bufferATQA, bufferSize); } // End PICC_RequestA() diff --git a/MFRC522.h b/MFRC522.h index 8a07bf1..a427381 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -138,105 +138,105 @@ public: enum PCD_Register { // Page 0: Command and status // 0x00 // reserved for future use - CommandReg = 0x01 << 1, // starts and stops command execution - ComIEnReg = 0x02 << 1, // enable and disable interrupt request control bits - DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits - ComIrqReg = 0x04 << 1, // interrupt request bits - DivIrqReg = 0x05 << 1, // interrupt request bits - ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed - Status1Reg = 0x07 << 1, // communication status bits - Status2Reg = 0x08 << 1, // receiver and transmitter status bits - FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer - FIFOLevelReg = 0x0A << 1, // number of bytes stored in the FIFO buffer - WaterLevelReg = 0x0B << 1, // level for FIFO underflow and overflow warning - ControlReg = 0x0C << 1, // miscellaneous control registers - BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames - CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface - // 0x0F // reserved for future use + CommandReg = 0x01 << 1, // starts and stops command execution + ComIEnReg = 0x02 << 1, // enable and disable interrupt request control bits + DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits + ComIrqReg = 0x04 << 1, // interrupt request bits + DivIrqReg = 0x05 << 1, // interrupt request bits + ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed + Status1Reg = 0x07 << 1, // communication status bits + Status2Reg = 0x08 << 1, // receiver and transmitter status bits + FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer + FIFOLevelReg = 0x0A << 1, // number of bytes stored in the FIFO buffer + WaterLevelReg = 0x0B << 1, // level for FIFO underflow and overflow warning + ControlReg = 0x0C << 1, // miscellaneous control registers + BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames + CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface + // 0x0F // reserved for future use // Page 1: Command - // 0x10 // reserved for future use - ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving - TxModeReg = 0x12 << 1, // defines transmission data rate and framing - RxModeReg = 0x13 << 1, // defines reception data rate and framing - TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2 - TxASKReg = 0x15 << 1, // controls the setting of the transmission modulation - TxSelReg = 0x16 << 1, // selects the internal sources for the antenna driver - RxSelReg = 0x17 << 1, // selects internal receiver settings - RxThresholdReg = 0x18 << 1, // selects thresholds for the bit decoder - DemodReg = 0x19 << 1, // defines demodulator settings - // 0x1A // reserved for future use - // 0x1B // reserved for future use - MfTxReg = 0x1C << 1, // controls some MIFARE communication transmit parameters - MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters - // 0x1E // reserved for future use - SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface + // 0x10 // reserved for future use + ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving + TxModeReg = 0x12 << 1, // defines transmission data rate and framing + RxModeReg = 0x13 << 1, // defines reception data rate and framing + TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2 + TxASKReg = 0x15 << 1, // controls the setting of the transmission modulation + TxSelReg = 0x16 << 1, // selects the internal sources for the antenna driver + RxSelReg = 0x17 << 1, // selects internal receiver settings + RxThresholdReg = 0x18 << 1, // selects thresholds for the bit decoder + DemodReg = 0x19 << 1, // defines demodulator settings + // 0x1A // reserved for future use + // 0x1B // reserved for future use + MfTxReg = 0x1C << 1, // controls some MIFARE communication transmit parameters + MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters + // 0x1E // reserved for future use + SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface // Page 2: Configuration // 0x20 // reserved for future use - CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation - CRCResultRegL = 0x22 << 1, - // 0x23 // reserved for future use - ModWidthReg = 0x24 << 1, // controls the ModWidth setting? - // 0x25 // reserved for future use - RFCfgReg = 0x26 << 1, // configures the receiver gain - GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation - CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation - ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation - TModeReg = 0x2A << 1, // defines settings for the internal timer - TPrescalerReg = 0x2B << 1, // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg. - TReloadRegH = 0x2C << 1, // defines the 16-bit timer reload value - TReloadRegL = 0x2D << 1, - TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value - TCounterValueRegL = 0x2F << 1, + CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation + CRCResultRegL = 0x22 << 1, + // 0x23 // reserved for future use + ModWidthReg = 0x24 << 1, // controls the ModWidth setting? + // 0x25 // reserved for future use + RFCfgReg = 0x26 << 1, // configures the receiver gain + GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation + CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation + ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation + TModeReg = 0x2A << 1, // defines settings for the internal timer + TPrescalerReg = 0x2B << 1, // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg. + TReloadRegH = 0x2C << 1, // defines the 16-bit timer reload value + TReloadRegL = 0x2D << 1, + TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value + TCounterValueRegL = 0x2F << 1, // Page 3: Test Registers - // 0x30 // reserved for future use - TestSel1Reg = 0x31 << 1, // general test signal configuration - TestSel2Reg = 0x32 << 1, // general test signal configuration - TestPinEnReg = 0x33 << 1, // enables pin output driver on pins D1 to D7 - TestPinValueReg = 0x34 << 1, // defines the values for D1 to D7 when it is used as an I/O bus - TestBusReg = 0x35 << 1, // shows the status of the internal test bus - AutoTestReg = 0x36 << 1, // controls the digital self test - VersionReg = 0x37 << 1, // shows the software version - AnalogTestReg = 0x38 << 1, // controls the pins AUX1 and AUX2 - TestDAC1Reg = 0x39 << 1, // defines the test value for TestDAC1 - TestDAC2Reg = 0x3A << 1, // defines the test value for TestDAC2 - TestADCReg = 0x3B << 1 // shows the value of ADC I and Q channels - // 0x3C // reserved for production tests - // 0x3D // reserved for production tests - // 0x3E // reserved for production tests - // 0x3F // reserved for production tests + // 0x30 // reserved for future use + TestSel1Reg = 0x31 << 1, // general test signal configuration + TestSel2Reg = 0x32 << 1, // general test signal configuration + TestPinEnReg = 0x33 << 1, // enables pin output driver on pins D1 to D7 + TestPinValueReg = 0x34 << 1, // defines the values for D1 to D7 when it is used as an I/O bus + TestBusReg = 0x35 << 1, // shows the status of the internal test bus + AutoTestReg = 0x36 << 1, // controls the digital self test + VersionReg = 0x37 << 1, // shows the software version + AnalogTestReg = 0x38 << 1, // controls the pins AUX1 and AUX2 + TestDAC1Reg = 0x39 << 1, // defines the test value for TestDAC1 + TestDAC2Reg = 0x3A << 1, // defines the test value for TestDAC2 + TestADCReg = 0x3B << 1 // shows the value of ADC I and Q channels + // 0x3C // reserved for production tests + // 0x3D // reserved for production tests + // 0x3E // reserved for production tests + // 0x3F // reserved for production tests }; // MFRC522 commands. Described in chapter 10 of the datasheet. enum PCD_Command { - PCD_Idle = 0x00, // no action, cancels current command execution - PCD_Mem = 0x01, // stores 25 bytes into the internal buffer + PCD_Idle = 0x00, // no action, cancels current command execution + PCD_Mem = 0x01, // stores 25 bytes into the internal buffer PCD_GenerateRandomID = 0x02, // generates a 10-byte random ID number - PCD_CalcCRC = 0x03, // activates the CRC coprocessor or performs a self test - PCD_Transmit = 0x04, // transmits data from the FIFO buffer - PCD_NoCmdChange = 0x07, // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit - PCD_Receive = 0x08, // activates the receiver circuits - PCD_Transceive = 0x0C, // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission - PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader - PCD_SoftReset = 0x0F // resets the MFRC522 + PCD_CalcCRC = 0x03, // activates the CRC coprocessor or performs a self test + PCD_Transmit = 0x04, // transmits data from the FIFO buffer + PCD_NoCmdChange = 0x07, // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit + PCD_Receive = 0x08, // activates the receiver circuits + PCD_Transceive = 0x0C, // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission + PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader + PCD_SoftReset = 0x0F // resets the MFRC522 }; // MFRC522 RxGain[2:0] masks, defines the receiver's signal voltage gain factor (on the PCD). // Described in 9.3.3.6 / table 98 of the datasheet at http://www.nxp.com/documents/data_sheet/MFRC522.pdf enum PCD_RxGain { - RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum - RxGain_23dB = 0x01 << 4, // 001b - 23 dB - RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b - RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b - RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default - RxGain_38dB = 0x05 << 4, // 101b - 38 dB - RxGain_43dB = 0x06 << 4, // 110b - 43 dB - RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum - RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB - RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB - RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB + RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum + RxGain_23dB = 0x01 << 4, // 001b - 23 dB + RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b + RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b + RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default + RxGain_38dB = 0x05 << 4, // 101b - 38 dB + RxGain_43dB = 0x06 << 4, // 110b - 43 dB + RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum + RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB + RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB + RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB }; // Commands sent to the PICC. @@ -244,7 +244,7 @@ public: // The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4) PICC_CMD_REQA = 0x26, // REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. PICC_CMD_WUPA = 0x52, // Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. - PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. + PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1 PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2 PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3 @@ -252,14 +252,14 @@ public: // The commands used for MIFARE Classic (from http://www.nxp.com/documents/data_sheet/MF1S503x.pdf, Section 9) // Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector. // The read/write commands can also be used for MIFARE Ultralight. - PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A - PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B + PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A + PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B PICC_CMD_MF_READ = 0x30, // Reads one 16 byte block from the authenticated sector of the PICC. Also used for MIFARE Ultralight. PICC_CMD_MF_WRITE = 0xA0, // Writes one 16 byte block to the authenticated sector of the PICC. Called "COMPATIBILITY WRITE" for MIFARE Ultralight. - PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register. - PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register. PICC_CMD_MF_RESTORE = 0xC2, // Reads the contents of a block into the internal data register. - PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block. + PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block. // The commands used for MIFARE Ultralight (from http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf, Section 8.6) // The PICC_CMD_MF_READ and PICC_CMD_MF_WRITE can also be used for MIFARE Ultralight. PICC_CMD_UL_WRITE = 0xA2 // Writes one 4 byte page to the PICC. @@ -267,32 +267,32 @@ public: // MIFARE constants that does not fit anywhere else enum MIFARE_Misc { - MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. - MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. + MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. + MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. }; // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more. enum PICC_Type { PICC_TYPE_UNKNOWN = 0, - PICC_TYPE_ISO_14443_4 = 1, // PICC compliant with ISO/IEC 14443-4 + PICC_TYPE_ISO_14443_4 = 1, // PICC compliant with ISO/IEC 14443-4 PICC_TYPE_ISO_18092 = 2, // PICC compliant with ISO/IEC 18092 (NFC) - PICC_TYPE_MIFARE_MINI = 3, // MIFARE Classic protocol, 320 bytes + PICC_TYPE_MIFARE_MINI = 3, // MIFARE Classic protocol, 320 bytes PICC_TYPE_MIFARE_1K = 4, // MIFARE Classic protocol, 1KB PICC_TYPE_MIFARE_4K = 5, // MIFARE Classic protocol, 4KB PICC_TYPE_MIFARE_UL = 6, // MIFARE Ultralight or Ultralight C - PICC_TYPE_MIFARE_PLUS = 7, // MIFARE Plus + PICC_TYPE_MIFARE_PLUS = 7, // MIFARE Plus PICC_TYPE_TNP3XXX = 8, // Only mentioned in NXP AN 10833 MIFARE Type Identification Procedure - PICC_TYPE_NOT_COMPLETE = 255 // SAK indicates UID is not complete. + PICC_TYPE_NOT_COMPLETE = 255 // SAK indicates UID is not complete. }; // Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more. enum StatusCode { - STATUS_OK = 1, // Success + STATUS_OK = 1, // Success STATUS_ERROR = 2, // Error in communication STATUS_COLLISION = 3, // Collission detected STATUS_TIMEOUT = 4, // Timeout in communication. STATUS_NO_ROOM = 5, // A buffer is not big enough. - STATUS_INTERNAL_ERROR = 6, // Internal error in the code. Should not happen ;-) + STATUS_INTERNAL_ERROR = 6, // Internal error in the code. Should not happen ;-) STATUS_INVALID = 7, // Invalid argument. STATUS_CRC_WRONG = 8, // The CRC_A does not match STATUS_MIFARE_NACK = 9 // A MIFARE PICC responded with NAK. @@ -319,6 +319,7 @@ public: ///////////////////////////////////////////////////////////////////////////////////// // Functions for setting up the Arduino ///////////////////////////////////////////////////////////////////////////////////// + MFRC522(); MFRC522(byte chipSelectPin, byte resetPowerDownPin); void setSPIConfig(); @@ -338,6 +339,7 @@ public: // Functions for manipulating the MFRC522 ///////////////////////////////////////////////////////////////////////////////////// void PCD_Init(); + void PCD_Init(byte, byte); void PCD_Reset(); void PCD_AntennaOn(); void PCD_AntennaOff(); diff --git a/examples/ReadUidMultiReader/ReadUidMultiReader.ino b/examples/ReadUidMultiReader/ReadUidMultiReader.ino new file mode 100644 index 0000000..a6ba6c8 --- /dev/null +++ b/examples/ReadUidMultiReader/ReadUidMultiReader.ino @@ -0,0 +1,90 @@ +/** + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * This sample shows how to read and write data blocks on a MIFARE Classic PICC + * (= card/tag). + * + * Typical pin layout used: + * ----------------------------------------------------------------------------------------- + * MFRC522 Arduino Arduino Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 Leonardo/Micro Pro Micro + * Signal Pin Pin Pin Pin Pin Pin + * ----------------------------------------------------------------------------------------- + * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST + * SPI SS 1 SDA(SS) 5 53 D10 10 10 + * SPI SS 2 SDA(SS) 2 53 D10 10 10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 + * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 + * SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15 + * + */ + +#include +#include + +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_1_PIN 5 // Configurable, see typical pin layout above +#define SS_2_PIN 2 // Configurable, see typical pin layout above + +#define NR_OF_READERS 2 + +byte ssPins[] = {SS_1_PIN, SS_2_PIN}; + +MFRC522 mfrc522[NR_OF_READERS]; // Create MFRC522 instance. + +MFRC522::MIFARE_Key key; + +/** + * Initialize. + */ +void setup() { + Serial.begin(115200); // Initialize serial communications with the PC + while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) + + SPI.begin(); // Init SPI bus + + for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) { + mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card + } +} + +/** + * Main loop. + */ +void loop() { + + for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) { + // Look for new cards + if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) { + + // Show some details of the PICC (that is: the tag/card) + Serial.print(F("Card UID:")); + dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size); + Serial.println(); + Serial.print(F("PICC type: ")); + byte piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak); + Serial.println(mfrc522[reader].PICC_GetTypeName(piccType)); + + // Halt PICC + mfrc522[reader].PICC_HaltA(); + // Stop encryption on PCD + mfrc522[reader].PCD_StopCrypto1(); + } //if (mfrc522[reader].PICC_IsNewC + } //for(uint8_t reader +} + +/** + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} From 118a03cde0fdce02611981518f7db76507a07e29 Mon Sep 17 00:00:00 2001 From: liviu Date: Sat, 5 Dec 2015 10:50:34 +0100 Subject: [PATCH 89/96] Better implementation of the PCD_Init() method. Thanks to Rotzbua to point this out. --- MFRC522.cpp | 98 ++++----- MFRC522.h | 196 +++++++++--------- .../ReadUidMultiReader/ReadUidMultiReader.ino | 20 +- 3 files changed, 146 insertions(+), 168 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index aea006f..01adb66 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -14,7 +14,6 @@ * Constructor. */ MFRC522::MFRC522() { - } // End constructor /** @@ -45,11 +44,11 @@ void MFRC522::setSPIConfig() { * Writes a byte to the specified register in the MFRC522 chip. * The interface is described in the datasheet section 8.1.2. */ -void MFRC522::PCD_WriteRegister(byte reg, ///< The register to write to. One of the PCD_Register enums. - byte value ///< The value to write. - ) { +void MFRC522::PCD_WriteRegister( byte reg, ///< The register to write to. One of the PCD_Register enums. + byte value ///< The value to write. + ) { digitalWrite(_chipSelectPin, LOW); // Select slave - SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. + SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. SPI.transfer(value); digitalWrite(_chipSelectPin, HIGH); // Release slave again } // End PCD_WriteRegister() @@ -58,10 +57,10 @@ void MFRC522::PCD_WriteRegister(byte reg, ///< The register to write to. One of * Writes a number of bytes to the specified register in the MFRC522 chip. * The interface is described in the datasheet section 8.1.2. */ -void MFRC522::PCD_WriteRegister(byte reg, ///< The register to write to. One of the PCD_Register enums. - byte count, ///< The number of bytes to write to the register - byte *values ///< The values to write. Byte array. - ) { +void MFRC522::PCD_WriteRegister( byte reg, ///< The register to write to. One of the PCD_Register enums. + byte count, ///< The number of bytes to write to the register + byte *values ///< The values to write. Byte array. + ) { digitalWrite(_chipSelectPin, LOW); // Select slave SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. for (byte index = 0; index < count; index++) { @@ -225,43 +224,15 @@ void MFRC522::PCD_Init() { /** * Initializes the MFRC522 chip. */ -void MFRC522::PCD_Init(byte chipSelectPin, byte resetPowerDownPin) { +void MFRC522::PCD_Init( byte chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) + byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + ) { _chipSelectPin = chipSelectPin; - _resetPowerDownPin = resetPowerDownPin; - + _resetPowerDownPin = resetPowerDownPin; // Set the chipSelectPin as digital output, do not select the slave yet - pinMode(_chipSelectPin, OUTPUT); - digitalWrite(_chipSelectPin, HIGH); - - // Set the resetPowerDownPin as digital output, do not reset or power down. - pinMode(_resetPowerDownPin, OUTPUT); - - // Set SPI bus to work with MFRC522 chip. - setSPIConfig(); - - if (digitalRead(_resetPowerDownPin) == LOW) { //The MFRC522 chip is in power down mode. - digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. - // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74�s. Let us be generous: 50ms. - delay(50); - } - else { // Perform a soft reset - PCD_Reset(); - } - - // When communicating with a PICC we need a timeout if something goes wrong. - // f_timer = 13.56 MHz / (2*TPreScaler+1) where TPreScaler = [TPrescaler_Hi:TPrescaler_Lo]. - // TPrescaler_Hi are the four low bits in TModeReg. TPrescaler_Lo is TPrescalerReg. - PCD_WriteRegister(TModeReg, 0x80); // TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds - PCD_WriteRegister(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25�s. - PCD_WriteRegister(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. - PCD_WriteRegister(TReloadRegL, 0xE8); - - PCD_WriteRegister(TxASKReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting - PCD_WriteRegister(ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) - PCD_AntennaOn(); // Enable the antenna driver pins TX1 and TX2 (they were disabled by the reset) + PCD_Init(); } // End PCD_Init() - /** * Performs a soft reset on the MFRC522 chip and waits for it to be ready again. */ @@ -406,14 +377,14 @@ bool MFRC522::PCD_PerformSelfTest() { * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PCD_TransceiveData(byte *sendData, ///< Pointer to the data to transfer to the FIFO. - byte sendLen, ///< Number of bytes to transfer to the FIFO. - byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. - byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. - byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL. - byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. - bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. - ) { +byte MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { byte waitIRq = 0x30; // RxIRq and IdleIRq return PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC); } // End PCD_TransceiveData() @@ -425,15 +396,15 @@ byte MFRC522::PCD_TransceiveData(byte *sendData, ///< Pointer to the data to tr * @return STATUS_OK on success, STATUS_??? otherwise. */ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execute. One of the PCD_Command enums. - byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. - byte *sendData, ///< Pointer to the data to transfer to the FIFO. - byte sendLen, ///< Number of bytes to transfer to the FIFO. - byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. - byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. - byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. - byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. - bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. - ) { + byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. + byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { byte n, _validBits; unsigned int i; @@ -524,8 +495,8 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut * @return STATUS_OK on success, STATUS_??? otherwise. */ byte MFRC522::PICC_RequestA(byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in - byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. - ) { + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { return PICC_REQA_or_WUPA(PICC_CMD_REQA, bufferATQA, bufferSize); } // End PICC_RequestA() @@ -1221,7 +1192,10 @@ byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select if (sak & 0x04) { // UID not complete return PICC_TYPE_NOT_COMPLETE; } - + //http://www.nxp.com/documents/application_note/AN10833.pdf + //3.2 Coding of Select Acknowledge (SAK) + //ignore 8-bit + sak&=0x7F; switch (sak) { case 0x09: return PICC_TYPE_MIFARE_MINI; break; case 0x08: return PICC_TYPE_MIFARE_1K; break; diff --git a/MFRC522.h b/MFRC522.h index a427381..00a0dd6 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -138,105 +138,105 @@ public: enum PCD_Register { // Page 0: Command and status // 0x00 // reserved for future use - CommandReg = 0x01 << 1, // starts and stops command execution - ComIEnReg = 0x02 << 1, // enable and disable interrupt request control bits - DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits - ComIrqReg = 0x04 << 1, // interrupt request bits - DivIrqReg = 0x05 << 1, // interrupt request bits - ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed - Status1Reg = 0x07 << 1, // communication status bits - Status2Reg = 0x08 << 1, // receiver and transmitter status bits - FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer - FIFOLevelReg = 0x0A << 1, // number of bytes stored in the FIFO buffer - WaterLevelReg = 0x0B << 1, // level for FIFO underflow and overflow warning - ControlReg = 0x0C << 1, // miscellaneous control registers - BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames - CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface - // 0x0F // reserved for future use + CommandReg = 0x01 << 1, // starts and stops command execution + ComIEnReg = 0x02 << 1, // enable and disable interrupt request control bits + DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits + ComIrqReg = 0x04 << 1, // interrupt request bits + DivIrqReg = 0x05 << 1, // interrupt request bits + ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed + Status1Reg = 0x07 << 1, // communication status bits + Status2Reg = 0x08 << 1, // receiver and transmitter status bits + FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer + FIFOLevelReg = 0x0A << 1, // number of bytes stored in the FIFO buffer + WaterLevelReg = 0x0B << 1, // level for FIFO underflow and overflow warning + ControlReg = 0x0C << 1, // miscellaneous control registers + BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames + CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface + // 0x0F // reserved for future use // Page 1: Command - // 0x10 // reserved for future use - ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving - TxModeReg = 0x12 << 1, // defines transmission data rate and framing - RxModeReg = 0x13 << 1, // defines reception data rate and framing - TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2 - TxASKReg = 0x15 << 1, // controls the setting of the transmission modulation - TxSelReg = 0x16 << 1, // selects the internal sources for the antenna driver - RxSelReg = 0x17 << 1, // selects internal receiver settings - RxThresholdReg = 0x18 << 1, // selects thresholds for the bit decoder - DemodReg = 0x19 << 1, // defines demodulator settings - // 0x1A // reserved for future use - // 0x1B // reserved for future use - MfTxReg = 0x1C << 1, // controls some MIFARE communication transmit parameters - MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters - // 0x1E // reserved for future use - SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface + // 0x10 // reserved for future use + ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving + TxModeReg = 0x12 << 1, // defines transmission data rate and framing + RxModeReg = 0x13 << 1, // defines reception data rate and framing + TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2 + TxASKReg = 0x15 << 1, // controls the setting of the transmission modulation + TxSelReg = 0x16 << 1, // selects the internal sources for the antenna driver + RxSelReg = 0x17 << 1, // selects internal receiver settings + RxThresholdReg = 0x18 << 1, // selects thresholds for the bit decoder + DemodReg = 0x19 << 1, // defines demodulator settings + // 0x1A // reserved for future use + // 0x1B // reserved for future use + MfTxReg = 0x1C << 1, // controls some MIFARE communication transmit parameters + MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters + // 0x1E // reserved for future use + SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface // Page 2: Configuration // 0x20 // reserved for future use - CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation - CRCResultRegL = 0x22 << 1, - // 0x23 // reserved for future use - ModWidthReg = 0x24 << 1, // controls the ModWidth setting? - // 0x25 // reserved for future use - RFCfgReg = 0x26 << 1, // configures the receiver gain - GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation - CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation - ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation - TModeReg = 0x2A << 1, // defines settings for the internal timer - TPrescalerReg = 0x2B << 1, // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg. - TReloadRegH = 0x2C << 1, // defines the 16-bit timer reload value - TReloadRegL = 0x2D << 1, - TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value - TCounterValueRegL = 0x2F << 1, + CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation + CRCResultRegL = 0x22 << 1, + // 0x23 // reserved for future use + ModWidthReg = 0x24 << 1, // controls the ModWidth setting? + // 0x25 // reserved for future use + RFCfgReg = 0x26 << 1, // configures the receiver gain + GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation + CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation + ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation + TModeReg = 0x2A << 1, // defines settings for the internal timer + TPrescalerReg = 0x2B << 1, // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg. + TReloadRegH = 0x2C << 1, // defines the 16-bit timer reload value + TReloadRegL = 0x2D << 1, + TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value + TCounterValueRegL = 0x2F << 1, // Page 3: Test Registers - // 0x30 // reserved for future use - TestSel1Reg = 0x31 << 1, // general test signal configuration - TestSel2Reg = 0x32 << 1, // general test signal configuration - TestPinEnReg = 0x33 << 1, // enables pin output driver on pins D1 to D7 - TestPinValueReg = 0x34 << 1, // defines the values for D1 to D7 when it is used as an I/O bus - TestBusReg = 0x35 << 1, // shows the status of the internal test bus - AutoTestReg = 0x36 << 1, // controls the digital self test - VersionReg = 0x37 << 1, // shows the software version - AnalogTestReg = 0x38 << 1, // controls the pins AUX1 and AUX2 - TestDAC1Reg = 0x39 << 1, // defines the test value for TestDAC1 - TestDAC2Reg = 0x3A << 1, // defines the test value for TestDAC2 - TestADCReg = 0x3B << 1 // shows the value of ADC I and Q channels - // 0x3C // reserved for production tests - // 0x3D // reserved for production tests - // 0x3E // reserved for production tests - // 0x3F // reserved for production tests + // 0x30 // reserved for future use + TestSel1Reg = 0x31 << 1, // general test signal configuration + TestSel2Reg = 0x32 << 1, // general test signal configuration + TestPinEnReg = 0x33 << 1, // enables pin output driver on pins D1 to D7 + TestPinValueReg = 0x34 << 1, // defines the values for D1 to D7 when it is used as an I/O bus + TestBusReg = 0x35 << 1, // shows the status of the internal test bus + AutoTestReg = 0x36 << 1, // controls the digital self test + VersionReg = 0x37 << 1, // shows the software version + AnalogTestReg = 0x38 << 1, // controls the pins AUX1 and AUX2 + TestDAC1Reg = 0x39 << 1, // defines the test value for TestDAC1 + TestDAC2Reg = 0x3A << 1, // defines the test value for TestDAC2 + TestADCReg = 0x3B << 1 // shows the value of ADC I and Q channels + // 0x3C // reserved for production tests + // 0x3D // reserved for production tests + // 0x3E // reserved for production tests + // 0x3F // reserved for production tests }; // MFRC522 commands. Described in chapter 10 of the datasheet. enum PCD_Command { - PCD_Idle = 0x00, // no action, cancels current command execution - PCD_Mem = 0x01, // stores 25 bytes into the internal buffer + PCD_Idle = 0x00, // no action, cancels current command execution + PCD_Mem = 0x01, // stores 25 bytes into the internal buffer PCD_GenerateRandomID = 0x02, // generates a 10-byte random ID number - PCD_CalcCRC = 0x03, // activates the CRC coprocessor or performs a self test - PCD_Transmit = 0x04, // transmits data from the FIFO buffer - PCD_NoCmdChange = 0x07, // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit - PCD_Receive = 0x08, // activates the receiver circuits - PCD_Transceive = 0x0C, // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission - PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader - PCD_SoftReset = 0x0F // resets the MFRC522 + PCD_CalcCRC = 0x03, // activates the CRC coprocessor or performs a self test + PCD_Transmit = 0x04, // transmits data from the FIFO buffer + PCD_NoCmdChange = 0x07, // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit + PCD_Receive = 0x08, // activates the receiver circuits + PCD_Transceive = 0x0C, // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission + PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader + PCD_SoftReset = 0x0F // resets the MFRC522 }; // MFRC522 RxGain[2:0] masks, defines the receiver's signal voltage gain factor (on the PCD). // Described in 9.3.3.6 / table 98 of the datasheet at http://www.nxp.com/documents/data_sheet/MFRC522.pdf enum PCD_RxGain { - RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum - RxGain_23dB = 0x01 << 4, // 001b - 23 dB - RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b - RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b - RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default - RxGain_38dB = 0x05 << 4, // 101b - 38 dB - RxGain_43dB = 0x06 << 4, // 110b - 43 dB - RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum - RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB - RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB - RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB + RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum + RxGain_23dB = 0x01 << 4, // 001b - 23 dB + RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b + RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b + RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default + RxGain_38dB = 0x05 << 4, // 101b - 38 dB + RxGain_43dB = 0x06 << 4, // 110b - 43 dB + RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum + RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB + RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB + RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB }; // Commands sent to the PICC. @@ -244,7 +244,7 @@ public: // The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4) PICC_CMD_REQA = 0x26, // REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. PICC_CMD_WUPA = 0x52, // Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. - PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. + PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1 PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2 PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3 @@ -252,14 +252,14 @@ public: // The commands used for MIFARE Classic (from http://www.nxp.com/documents/data_sheet/MF1S503x.pdf, Section 9) // Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector. // The read/write commands can also be used for MIFARE Ultralight. - PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A - PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B + PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A + PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B PICC_CMD_MF_READ = 0x30, // Reads one 16 byte block from the authenticated sector of the PICC. Also used for MIFARE Ultralight. PICC_CMD_MF_WRITE = 0xA0, // Writes one 16 byte block to the authenticated sector of the PICC. Called "COMPATIBILITY WRITE" for MIFARE Ultralight. - PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register. - PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register. PICC_CMD_MF_RESTORE = 0xC2, // Reads the contents of a block into the internal data register. - PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block. + PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block. // The commands used for MIFARE Ultralight (from http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf, Section 8.6) // The PICC_CMD_MF_READ and PICC_CMD_MF_WRITE can also be used for MIFARE Ultralight. PICC_CMD_UL_WRITE = 0xA2 // Writes one 4 byte page to the PICC. @@ -267,32 +267,32 @@ public: // MIFARE constants that does not fit anywhere else enum MIFARE_Misc { - MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. - MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. + MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. + MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. }; // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more. enum PICC_Type { PICC_TYPE_UNKNOWN = 0, - PICC_TYPE_ISO_14443_4 = 1, // PICC compliant with ISO/IEC 14443-4 + PICC_TYPE_ISO_14443_4 = 1, // PICC compliant with ISO/IEC 14443-4 PICC_TYPE_ISO_18092 = 2, // PICC compliant with ISO/IEC 18092 (NFC) - PICC_TYPE_MIFARE_MINI = 3, // MIFARE Classic protocol, 320 bytes + PICC_TYPE_MIFARE_MINI = 3, // MIFARE Classic protocol, 320 bytes PICC_TYPE_MIFARE_1K = 4, // MIFARE Classic protocol, 1KB PICC_TYPE_MIFARE_4K = 5, // MIFARE Classic protocol, 4KB PICC_TYPE_MIFARE_UL = 6, // MIFARE Ultralight or Ultralight C - PICC_TYPE_MIFARE_PLUS = 7, // MIFARE Plus + PICC_TYPE_MIFARE_PLUS = 7, // MIFARE Plus PICC_TYPE_TNP3XXX = 8, // Only mentioned in NXP AN 10833 MIFARE Type Identification Procedure - PICC_TYPE_NOT_COMPLETE = 255 // SAK indicates UID is not complete. + PICC_TYPE_NOT_COMPLETE = 255 // SAK indicates UID is not complete. }; // Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more. enum StatusCode { - STATUS_OK = 1, // Success + STATUS_OK = 1, // Success STATUS_ERROR = 2, // Error in communication STATUS_COLLISION = 3, // Collission detected STATUS_TIMEOUT = 4, // Timeout in communication. STATUS_NO_ROOM = 5, // A buffer is not big enough. - STATUS_INTERNAL_ERROR = 6, // Internal error in the code. Should not happen ;-) + STATUS_INTERNAL_ERROR = 6, // Internal error in the code. Should not happen ;-) STATUS_INVALID = 7, // Invalid argument. STATUS_CRC_WRONG = 8, // The CRC_A does not match STATUS_MIFARE_NACK = 9 // A MIFARE PICC responded with NAK. @@ -319,7 +319,7 @@ public: ///////////////////////////////////////////////////////////////////////////////////// // Functions for setting up the Arduino ///////////////////////////////////////////////////////////////////////////////////// - MFRC522(); + MFRC522(); MFRC522(byte chipSelectPin, byte resetPowerDownPin); void setSPIConfig(); @@ -339,7 +339,7 @@ public: // Functions for manipulating the MFRC522 ///////////////////////////////////////////////////////////////////////////////////// void PCD_Init(); - void PCD_Init(byte, byte); + void PCD_Init(byte chipSelectPin, byte resetPowerDownPin); void PCD_Reset(); void PCD_AntennaOn(); void PCD_AntennaOff(); diff --git a/examples/ReadUidMultiReader/ReadUidMultiReader.ino b/examples/ReadUidMultiReader/ReadUidMultiReader.ino index a6ba6c8..1c40be1 100644 --- a/examples/ReadUidMultiReader/ReadUidMultiReader.ino +++ b/examples/ReadUidMultiReader/ReadUidMultiReader.ino @@ -10,6 +10,9 @@ * This sample shows how to read and write data blocks on a MIFARE Classic PICC * (= card/tag). * + * BEWARE: Data will be written to the PICC, in sector #1 (blocks #4 to #7). + * + * * Typical pin layout used: * ----------------------------------------------------------------------------------------- * MFRC522 Arduino Arduino Arduino Arduino Arduino @@ -17,7 +20,7 @@ * Signal Pin Pin Pin Pin Pin Pin * ----------------------------------------------------------------------------------------- * RST/Reset RST 9 5 D9 RESET/ICSP-5 RST - * SPI SS 1 SDA(SS) 5 53 D10 10 10 + * SPI SS 1 SDA(SS) 10 53 D10 10 10 * SPI SS 2 SDA(SS) 2 53 D10 10 10 * SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16 * SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14 @@ -28,9 +31,9 @@ #include #include -#define RST_PIN 9 // Configurable, see typical pin layout above +#define RST_PIN 10 // Configurable, see typical pin layout above #define SS_1_PIN 5 // Configurable, see typical pin layout above -#define SS_2_PIN 2 // Configurable, see typical pin layout above +#define SS_2_PIN 3 // Configurable, see typical pin layout above #define NR_OF_READERS 2 @@ -38,12 +41,11 @@ byte ssPins[] = {SS_1_PIN, SS_2_PIN}; MFRC522 mfrc522[NR_OF_READERS]; // Create MFRC522 instance. -MFRC522::MIFARE_Key key; - /** * Initialize. */ void setup() { + Serial.begin(115200); // Initialize serial communications with the PC while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) @@ -59,12 +61,14 @@ void setup() { */ void loop() { - for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) { + for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) { // Look for new cards - if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) { + if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) { + Serial.print(F("Reader: ")); + Serial.print(reader); // Show some details of the PICC (that is: the tag/card) - Serial.print(F("Card UID:")); + Serial.print(F(" Card UID:")); dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size); Serial.println(); Serial.print(F("PICC type: ")); From 2a1794a0a5f11bda5e0a18f2ae14ce2fbd151a54 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sat, 5 Dec 2015 20:14:10 +0100 Subject: [PATCH 90/96] use type instead of byte --- MFRC522.cpp | 84 ++++++++++++++++++++++++++--------------------------- MFRC522.h | 44 ++++++++++++++-------------- 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 01adb66..e1030b3 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -150,7 +150,7 @@ void MFRC522::PCD_ClearRegisterBitMask( byte reg, ///< The register to update. O * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to transfer to the FIFO for CRC calculation. +MFRC522::StatusCode MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to transfer to the FIFO for CRC calculation. byte length, ///< In: The number of bytes to transfer. byte *result ///< Out: Pointer to result buffer. Result is written to result[0..1], low byte first. ) { @@ -377,7 +377,7 @@ bool MFRC522::PCD_PerformSelfTest() { * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO. +MFRC522::StatusCode MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO. byte sendLen, ///< Number of bytes to transfer to the FIFO. byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. @@ -395,7 +395,7 @@ byte MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to t * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execute. One of the PCD_Command enums. +MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execute. One of the PCD_Command enums. byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. byte *sendData, ///< Pointer to the data to transfer to the FIFO. byte sendLen, ///< Number of bytes to transfer to the FIFO. @@ -476,9 +476,9 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut } // Verify CRC_A - do our own calculation and store the control in controlBuffer. byte controlBuffer[2]; - n = PCD_CalculateCRC(&backData[0], *backLen - 2, &controlBuffer[0]); - if (n != STATUS_OK) { - return n; + MFRC522::StatusCode status = PCD_CalculateCRC(&backData[0], *backLen - 2, &controlBuffer[0]); + if (status != STATUS_OK) { + return status; } if ((backData[*backLen - 2] != controlBuffer[0]) || (backData[*backLen - 1] != controlBuffer[1])) { return STATUS_CRC_WRONG; @@ -494,7 +494,7 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PICC_RequestA(byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in +MFRC522::StatusCode MFRC522::PICC_RequestA(byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. ) { return PICC_REQA_or_WUPA(PICC_CMD_REQA, bufferATQA, bufferSize); @@ -506,7 +506,7 @@ byte MFRC522::PICC_RequestA(byte *bufferATQA, ///< The buffer to store the ATQA * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in +MFRC522::StatusCode MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. ) { return PICC_REQA_or_WUPA(PICC_CMD_WUPA, bufferATQA, bufferSize); @@ -518,12 +518,12 @@ byte MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to store the ATQA * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC_CMD_REQA or PICC_CMD_WUPA +MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC_CMD_REQA or PICC_CMD_WUPA byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. ) { byte validBits; - byte status; + MFRC522::StatusCode status; if (bufferATQA == NULL || *bufferSize < 2) { // The ATQA response is 2 bytes long. return STATUS_NO_ROOM; @@ -557,14 +557,14 @@ byte MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally output, but can also be used to supply a known UID. +MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally output, but can also be used to supply a known UID. byte validBits ///< The number of known UID bits supplied in *uid. Normally 0. If set you must also supply uid->size. ) { bool uidComplete; bool selectDone; bool useCascadeTag; byte cascadeLevel = 1; - byte result; + MFRC522::StatusCode result; byte count; byte index; byte uidIndex; // The first index in uid->uidByte[] that is used in the current Cascade Level. @@ -698,8 +698,8 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp // Transmit the buffer and receive the response. result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign); if (result == STATUS_COLLISION) { // More than one PICC in the field => collision. - result = PCD_ReadRegister(CollReg); // CollReg[7..0] bits are: ValuesAfterColl reserved CollPosNotValid CollPos[4:0] - if (result & 0x20) { // CollPosNotValid + byte valueOfCollReg = PCD_ReadRegister(CollReg); // CollReg[7..0] bits are: ValuesAfterColl reserved CollPosNotValid CollPos[4:0] + if (valueOfCollReg & 0x20) { // CollPosNotValid return STATUS_COLLISION; // Without a valid collision position we cannot continue } byte collisionPos = result & 0x1F; // Values 0-31, 0 means bit 32. @@ -772,8 +772,8 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PICC_HaltA() { - byte result; +MFRC522::StatusCode MFRC522::PICC_HaltA() { + MFRC522::StatusCode result; byte buffer[4]; // Build command buffer @@ -817,7 +817,7 @@ byte MFRC522::PICC_HaltA() { * * @return STATUS_OK on success, STATUS_??? otherwise. Probably STATUS_TIMEOUT if you supply the wrong key. */ -byte MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AUTH_KEY_A or PICC_CMD_MF_AUTH_KEY_B +MFRC522::StatusCode MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AUTH_KEY_A or PICC_CMD_MF_AUTH_KEY_B byte blockAddr, ///< The block number. See numbering in the comments in the .h file. MIFARE_Key *key, ///< Pointer to the Crypteo1 key to use (6 bytes) Uid *uid ///< Pointer to Uid struct. The first 4 bytes of the UID is used. @@ -864,11 +864,11 @@ void MFRC522::PCD_StopCrypto1() { * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The first page to return data from. +MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The first page to return data from. byte *buffer, ///< The buffer to store the data in byte *bufferSize ///< Buffer size, at least 18 bytes. Also number of bytes returned if STATUS_OK. ) { - byte result; + MFRC522::StatusCode result; // Sanity check if (buffer == NULL || *bufferSize < 18) { @@ -899,11 +899,11 @@ byte MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0x * * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The page (2-15) to write to. +MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The page (2-15) to write to. byte *buffer, ///< The 16 bytes to write to the PICC byte bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written. ) { - byte result; + MFRC522::StatusCode result; // Sanity check if (buffer == NULL || bufferSize < 16) { @@ -934,11 +934,11 @@ byte MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0x * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to write to. +MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to write to. byte *buffer, ///< The 4 bytes to write to the PICC byte bufferSize ///< Buffer size, must be at least 4 bytes. Exactly 4 bytes are written. ) { - byte result; + MFRC522::StatusCode result; // Sanity check if (buffer == NULL || bufferSize < 4) { @@ -967,7 +967,7 @@ byte MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to writ * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0-0xff) number. +MFRC522::StatusCode MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0-0xff) number. long delta ///< This number is subtracted from the value of block blockAddr. ) { return MIFARE_TwoStepHelper(PICC_CMD_MF_DECREMENT, blockAddr, delta); @@ -981,7 +981,7 @@ byte MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0-0xff) number. * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0-0xff) number. +MFRC522::StatusCode MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0-0xff) number. long delta ///< This number is added to the value of block blockAddr. ) { return MIFARE_TwoStepHelper(PICC_CMD_MF_INCREMENT, blockAddr, delta); @@ -995,7 +995,7 @@ byte MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0-0xff) number. * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0xff) number. +MFRC522::StatusCode MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0xff) number. ) { // The datasheet describes Restore as a two step operation, but does not explain what data to transfer in step 2. // Doing only a single step does not work, so I chose to transfer 0L in step two. @@ -1007,11 +1007,11 @@ byte MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0xff) number. * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use +MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use byte blockAddr, ///< The block (0-0xff) number. long data ///< The data to transfer in step 2 ) { - byte result; + MFRC522::StatusCode result; byte cmdBuffer[2]; // We only need room for 2 bytes. // Step 1: Tell the PICC the command and block address @@ -1038,9 +1038,9 @@ byte MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. +MFRC522::StatusCode MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. ) { - byte result; + MFRC522::StatusCode result; byte cmdBuffer[2]; // We only need room for 2 bytes. // Tell the PICC we want to transfer the result into block blockAddr. @@ -1064,8 +1064,8 @@ byte MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. * @param[out] value Current value of the Value Block. * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_GetValue(byte blockAddr, long *value) { - byte status; +MFRC522::StatusCode MFRC522::MIFARE_GetValue(byte blockAddr, long *value) { + MFRC522::StatusCode status; byte buffer[18]; byte size = sizeof(buffer); @@ -1089,7 +1089,7 @@ byte MFRC522::MIFARE_GetValue(byte blockAddr, long *value) { * @param[in] value New value of the Value Block. * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::MIFARE_SetValue(byte blockAddr, long value) { +MFRC522::StatusCode MFRC522::MIFARE_SetValue(byte blockAddr, long value) { byte buffer[18]; // Translate the long into 4 bytes; repeated 2x in value block @@ -1120,11 +1120,11 @@ byte MFRC522::MIFARE_SetValue(byte blockAddr, long value) { * * @return STATUS_OK on success, STATUS_??? otherwise. */ -byte MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data to transfer to the FIFO. Do NOT include the CRC_A. +MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data to transfer to the FIFO. Do NOT include the CRC_A. byte sendLen, ///< Number of bytes in sendData. bool acceptTimeout ///< True => A timeout is also success ) { - byte result; + MFRC522::StatusCode result; byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. // Sanity check @@ -1166,7 +1166,7 @@ byte MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data t * * @return const __FlashStringHelper * */ -const __FlashStringHelper *MFRC522::GetStatusCodeName(byte code ///< One of the StatusCode enums. +const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code ///< One of the StatusCode enums. ) { switch (code) { case STATUS_OK: return F("Success."); break; @@ -1187,7 +1187,7 @@ const __FlashStringHelper *MFRC522::GetStatusCodeName(byte code ///< One of the * * @return PICC_Type */ -byte MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select(). +MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select(). ) { if (sak & 0x04) { // UID not complete return PICC_TYPE_NOT_COMPLETE; @@ -1347,7 +1347,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U MIFARE_Key *key, ///< Key A for the sector. byte sector ///< The sector to dump, 0..39. ) { - byte status; + MFRC522::StatusCode status; byte firstBlock; // Address of lowest address to dump actually last block dumped) byte no_of_blocks; // Number of blocks in sector bool isSectorTrailer; // Set to true while handling the "last" (ie highest address) in the sector. @@ -1491,7 +1491,7 @@ void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to U * Dumps memory contents of a MIFARE Ultralight PICC. */ void MFRC522::PICC_DumpMifareUltralightToSerial() { - byte status; + MFRC522::StatusCode status; byte byteCount; byte buffer[18]; byte i; @@ -1575,7 +1575,7 @@ bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { this will contain amount of valid response bits. */ byte response[32]; // Card's response is written here byte received; - byte status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 + MFRC522::StatusCode status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 if(status != STATUS_OK) { if(logErrors) { Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?")); @@ -1641,7 +1641,7 @@ bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) { // Authenticate for reading MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - byte status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + MFRC522::StatusCode status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); if (status != STATUS_OK) { if (status == STATUS_TIMEOUT) { @@ -1737,7 +1737,7 @@ bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Write modified block 0 back to card - byte status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + MFRC522::StatusCode status = MIFARE_Write((byte)0, block0_buffer, (byte)16); if (status != STATUS_OK) { if (logErrors) { Serial.print(F("MIFARE_Write() failed: ")); diff --git a/MFRC522.h b/MFRC522.h index 00a0dd6..b10f4c4 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -333,7 +333,7 @@ public: void setBitMask(unsigned char reg, unsigned char mask); void PCD_SetRegisterBitMask(byte reg, byte mask); void PCD_ClearRegisterBitMask(byte reg, byte mask); - byte PCD_CalculateCRC(byte *data, byte length, byte *result); + MFRC522::StatusCode PCD_CalculateCRC(byte *data, byte length, byte *result); ///////////////////////////////////////////////////////////////////////////////////// // Functions for manipulating the MFRC522 @@ -350,37 +350,37 @@ public: ///////////////////////////////////////////////////////////////////////////////////// // Functions for communicating with PICCs ///////////////////////////////////////////////////////////////////////////////////// - byte PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); - byte PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData = NULL, byte *backLen = NULL, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); - byte PICC_RequestA(byte *bufferATQA, byte *bufferSize); - byte PICC_WakeupA(byte *bufferATQA, byte *bufferSize); - byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); - byte PICC_Select(Uid *uid, byte validBits = 0); - byte PICC_HaltA(); + MFRC522::StatusCode PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); + MFRC522::StatusCode PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData = NULL, byte *backLen = NULL, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); + MFRC522::StatusCode PICC_RequestA(byte *bufferATQA, byte *bufferSize); + MFRC522::StatusCode PICC_WakeupA(byte *bufferATQA, byte *bufferSize); + MFRC522::StatusCode PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); + MFRC522::StatusCode PICC_Select(Uid *uid, byte validBits = 0); + MFRC522::StatusCode PICC_HaltA(); ///////////////////////////////////////////////////////////////////////////////////// // Functions for communicating with MIFARE PICCs ///////////////////////////////////////////////////////////////////////////////////// - byte PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid); + MFRC522::StatusCode PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid); void PCD_StopCrypto1(); - byte MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize); - byte MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize); - byte MIFARE_Decrement(byte blockAddr, long delta); - byte MIFARE_Increment(byte blockAddr, long delta); - byte MIFARE_Restore(byte blockAddr); - byte MIFARE_Transfer(byte blockAddr); - byte MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize); - byte MIFARE_GetValue(byte blockAddr, long *value); - byte MIFARE_SetValue(byte blockAddr, long value); + MFRC522::StatusCode MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize); + MFRC522::StatusCode MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize); + MFRC522::StatusCode MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize); + MFRC522::StatusCode MIFARE_Decrement(byte blockAddr, long delta); + MFRC522::StatusCode MIFARE_Increment(byte blockAddr, long delta); + MFRC522::StatusCode MIFARE_Restore(byte blockAddr); + MFRC522::StatusCode MIFARE_Transfer(byte blockAddr); + MFRC522::StatusCode MIFARE_GetValue(byte blockAddr, long *value); + MFRC522::StatusCode MIFARE_SetValue(byte blockAddr, long value); ///////////////////////////////////////////////////////////////////////////////////// // Support functions ///////////////////////////////////////////////////////////////////////////////////// - byte PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout = false); + MFRC522::StatusCode PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout = false); // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory //const char *GetStatusCodeName(byte code); - const __FlashStringHelper *GetStatusCodeName(byte code); - byte PICC_GetType(byte sak); + const __FlashStringHelper *GetStatusCodeName(MFRC522::StatusCode code); + MFRC522::PICC_Type PICC_GetType(byte sak); // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory //const char *PICC_GetTypeName(byte type); const __FlashStringHelper *PICC_GetTypeName(byte type); @@ -402,7 +402,7 @@ public: private: byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) - byte MIFARE_TwoStepHelper(byte command, byte blockAddr, long data); + MFRC522::StatusCode MIFARE_TwoStepHelper(byte command, byte blockAddr, long data); }; #endif From 5c502136b31d753ca745b0a64bb69754f8626c84 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sat, 5 Dec 2015 20:26:26 +0100 Subject: [PATCH 91/96] upd examples --- examples/MifareClassicValueBlock/MifareClassicValueBlock.ino | 4 ++-- examples/ReadAndWrite/ReadAndWrite.ino | 2 +- examples/rfid_default_keys/rfid_default_keys.ino | 2 +- .../rfid_write_personal_data/rfid_write_personal_data.ino | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino index b78f913..53b6e51 100644 --- a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -95,7 +95,7 @@ void loop() { byte valueBlockA = 5; byte valueBlockB = 6; byte trailerBlock = 7; - byte status; + MFRC522::StatusCode status; byte buffer[18]; byte size = sizeof(buffer); long value; @@ -278,7 +278,7 @@ void dump_byte_array(byte *buffer, byte bufferSize) { void formatValueBlock(byte blockAddr) { byte buffer[18]; byte size = sizeof(buffer); - byte status; + MFRC522::StatusCode status; Serial.print(F("Reading block ")); Serial.println(blockAddr); status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); diff --git a/examples/ReadAndWrite/ReadAndWrite.ino b/examples/ReadAndWrite/ReadAndWrite.ino index 950e441..5d9e896 100644 --- a/examples/ReadAndWrite/ReadAndWrite.ino +++ b/examples/ReadAndWrite/ReadAndWrite.ino @@ -99,7 +99,7 @@ void loop() { 0x0c, 0x0d, 0x0e, 0x0f // 13, 14, 15, 16 }; byte trailerBlock = 7; - byte status; + MFRC522::StatusCode status; byte buffer[18]; byte size = sizeof(buffer); diff --git a/examples/rfid_default_keys/rfid_default_keys.ino b/examples/rfid_default_keys/rfid_default_keys.ino index 4b5bfff..32fb6c5 100644 --- a/examples/rfid_default_keys/rfid_default_keys.ino +++ b/examples/rfid_default_keys/rfid_default_keys.ino @@ -80,7 +80,7 @@ boolean try_key(MFRC522::MIFARE_Key *key) boolean result = false; byte buffer[18]; byte block = 0; - byte status; + MFRC522::StatusCode status; // Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, key, &(mfrc522.uid)); diff --git a/examples/rfid_write_personal_data/rfid_write_personal_data.ino b/examples/rfid_write_personal_data/rfid_write_personal_data.ino index dda943a..ffbec07 100644 --- a/examples/rfid_write_personal_data/rfid_write_personal_data.ino +++ b/examples/rfid_write_personal_data/rfid_write_personal_data.ino @@ -58,7 +58,8 @@ void loop() { byte buffer[34]; byte block; - byte status, len; + MFRC522::StatusCode status; + byte len; Serial.setTimeout(20000L) ; // wait until 20 seconds for input from serial // Ask personal data: Family name From e1b9d443f7116daa9e8e72e2b7a3746da808b7d4 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sat, 5 Dec 2015 20:52:55 +0100 Subject: [PATCH 92/96] improve code style remove useless break; --- MFRC522.cpp | 53 ++++++++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index e1030b3..fa42de3 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1169,16 +1169,16 @@ MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointe const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code ///< One of the StatusCode enums. ) { switch (code) { - case STATUS_OK: return F("Success."); break; - case STATUS_ERROR: return F("Error in communication."); break; - case STATUS_COLLISION: return F("Collission detected."); break; - case STATUS_TIMEOUT: return F("Timeout in communication."); break; - case STATUS_NO_ROOM: return F("A buffer is not big enough."); break; - case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen."); break; - case STATUS_INVALID: return F("Invalid argument."); break; - case STATUS_CRC_WRONG: return F("The CRC_A does not match."); break; - case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK."); break; - default: return F("Unknown error"); break; + case STATUS_OK: return F("Success."); + case STATUS_ERROR: return F("Error in communication."); + case STATUS_COLLISION: return F("Collission detected."); + case STATUS_TIMEOUT: return F("Timeout in communication."); + case STATUS_NO_ROOM: return F("A buffer is not big enough."); + case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen."); + case STATUS_INVALID: return F("Invalid argument."); + case STATUS_CRC_WRONG: return F("The CRC_A does not match."); + case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK."); + default: return F("Unknown error"); } } // End GetStatusCodeName() @@ -1197,14 +1197,13 @@ MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned fr //ignore 8-bit sak&=0x7F; switch (sak) { - case 0x09: return PICC_TYPE_MIFARE_MINI; break; - case 0x08: return PICC_TYPE_MIFARE_1K; break; - case 0x18: return PICC_TYPE_MIFARE_4K; break; - case 0x00: return PICC_TYPE_MIFARE_UL; break; + case 0x09: return PICC_TYPE_MIFARE_MINI; + case 0x08: return PICC_TYPE_MIFARE_1K; + case 0x18: return PICC_TYPE_MIFARE_4K; + case 0x00: return PICC_TYPE_MIFARE_UL; case 0x10: - case 0x11: return PICC_TYPE_MIFARE_PLUS; break; - case 0x01: return PICC_TYPE_TNP3XXX; break; - default: break; + case 0x11: return PICC_TYPE_MIFARE_PLUS; + case 0x01: return PICC_TYPE_TNP3XXX; } if (sak & 0x20) { @@ -1226,17 +1225,17 @@ MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned fr const __FlashStringHelper *MFRC522::PICC_GetTypeName(byte piccType ///< One of the PICC_Type enums. ) { switch (piccType) { - case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4"); break; - case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)");break; - case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes"); break; - case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB"); break; - case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB"); break; - case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C"); break; - case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus"); break; - case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX"); break; - case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete."); break; + case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4"); + case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)"); + case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes"); + case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB"); + case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB"); + case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C"); + case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus"); + case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX"); + case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete."); case PICC_TYPE_UNKNOWN: - default: return F("Unknown type"); break; + default: return F("Unknown type"); } } // End PICC_GetTypeName() From 36128c273b97d8d0c013fd5eb22cd065bb90f004 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sat, 5 Dec 2015 21:03:41 +0100 Subject: [PATCH 93/96] improve code style - realign arguments of functions --- MFRC522.cpp | 116 ++++++++++++++++++++++++++-------------------------- MFRC522.h | 2 +- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index fa42de3..76a7334 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -151,8 +151,8 @@ void MFRC522::PCD_ClearRegisterBitMask( byte reg, ///< The register to update. O * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to transfer to the FIFO for CRC calculation. - byte length, ///< In: The number of bytes to transfer. - byte *result ///< Out: Pointer to result buffer. Result is written to result[0..1], low byte first. + byte length, ///< In: The number of bytes to transfer. + byte *result ///< Out: Pointer to result buffer. Result is written to result[0..1], low byte first. ) { PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. PCD_WriteRegister(DivIrqReg, 0x04); // Clear the CRCIRq interrupt request bit @@ -192,13 +192,13 @@ void MFRC522::PCD_Init() { // Set the chipSelectPin as digital output, do not select the slave yet pinMode(_chipSelectPin, OUTPUT); digitalWrite(_chipSelectPin, HIGH); - + // Set the resetPowerDownPin as digital output, do not reset or power down. pinMode(_resetPowerDownPin, OUTPUT); - + // Set SPI bus to work with MFRC522 chip. setSPIConfig(); - + if (digitalRead(_resetPowerDownPin) == LOW) { //The MFRC522 chip is in power down mode. digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74�s. Let us be generous: 50ms. @@ -225,8 +225,8 @@ void MFRC522::PCD_Init() { * Initializes the MFRC522 chip. */ void MFRC522::PCD_Init( byte chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) - byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) - ) { + byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + ) { _chipSelectPin = chipSelectPin; _resetPowerDownPin = resetPowerDownPin; // Set the chipSelectPin as digital output, do not select the slave yet @@ -378,12 +378,12 @@ bool MFRC522::PCD_PerformSelfTest() { * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO. - byte sendLen, ///< Number of bytes to transfer to the FIFO. - byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. - byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. - byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL. - byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. - bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. ) { byte waitIRq = 0x30; // RxIRq and IdleIRq return PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC); @@ -396,14 +396,14 @@ MFRC522::StatusCode MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer t * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execute. One of the PCD_Command enums. - byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. - byte *sendData, ///< Pointer to the data to transfer to the FIFO. - byte sendLen, ///< Number of bytes to transfer to the FIFO. - byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. - byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. - byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. - byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. - bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. + byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. ) { byte n, _validBits; unsigned int i; @@ -494,9 +494,9 @@ MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The co * * @return STATUS_OK on success, STATUS_??? otherwise. */ -MFRC522::StatusCode MFRC522::PICC_RequestA(byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in - byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. - ) { +MFRC522::StatusCode MFRC522::PICC_RequestA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { return PICC_REQA_or_WUPA(PICC_CMD_REQA, bufferATQA, bufferSize); } // End PICC_RequestA() @@ -507,8 +507,8 @@ MFRC522::StatusCode MFRC522::PICC_RequestA(byte *bufferATQA, ///< The buffer to * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in - byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. - ) { + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { return PICC_REQA_or_WUPA(PICC_CMD_WUPA, bufferATQA, bufferSize); } // End PICC_WakeupA() @@ -519,9 +519,9 @@ MFRC522::StatusCode MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC_CMD_REQA or PICC_CMD_WUPA - byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in - byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. - ) { + byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { byte validBits; MFRC522::StatusCode status; @@ -558,8 +558,8 @@ MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally output, but can also be used to supply a known UID. - byte validBits ///< The number of known UID bits supplied in *uid. Normally 0. If set you must also supply uid->size. - ) { + byte validBits ///< The number of known UID bits supplied in *uid. Normally 0. If set you must also supply uid->size. + ) { bool uidComplete; bool selectDone; bool useCascadeTag; @@ -818,10 +818,10 @@ MFRC522::StatusCode MFRC522::PICC_HaltA() { * @return STATUS_OK on success, STATUS_??? otherwise. Probably STATUS_TIMEOUT if you supply the wrong key. */ MFRC522::StatusCode MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AUTH_KEY_A or PICC_CMD_MF_AUTH_KEY_B - byte blockAddr, ///< The block number. See numbering in the comments in the .h file. - MIFARE_Key *key, ///< Pointer to the Crypteo1 key to use (6 bytes) - Uid *uid ///< Pointer to Uid struct. The first 4 bytes of the UID is used. - ) { + byte blockAddr, ///< The block number. See numbering in the comments in the .h file. + MIFARE_Key *key, ///< Pointer to the Crypteo1 key to use (6 bytes) + Uid *uid ///< Pointer to Uid struct. The first 4 bytes of the UID is used. + ) { byte waitIRq = 0x10; // IdleIRq // Build command buffer @@ -865,9 +865,9 @@ void MFRC522::PCD_StopCrypto1() { * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The first page to return data from. - byte *buffer, ///< The buffer to store the data in - byte *bufferSize ///< Buffer size, at least 18 bytes. Also number of bytes returned if STATUS_OK. - ) { + byte *buffer, ///< The buffer to store the data in + byte *bufferSize ///< Buffer size, at least 18 bytes. Also number of bytes returned if STATUS_OK. + ) { MFRC522::StatusCode result; // Sanity check @@ -900,9 +900,9 @@ MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The page (2-15) to write to. - byte *buffer, ///< The 16 bytes to write to the PICC - byte bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written. - ) { + byte *buffer, ///< The 16 bytes to write to the PICC + byte bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written. + ) { MFRC522::StatusCode result; // Sanity check @@ -935,9 +935,9 @@ MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to write to. - byte *buffer, ///< The 4 bytes to write to the PICC - byte bufferSize ///< Buffer size, must be at least 4 bytes. Exactly 4 bytes are written. - ) { + byte *buffer, ///< The 4 bytes to write to the PICC + byte bufferSize ///< Buffer size, must be at least 4 bytes. Exactly 4 bytes are written. + ) { MFRC522::StatusCode result; // Sanity check @@ -968,8 +968,8 @@ MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0-0xff) number. - long delta ///< This number is subtracted from the value of block blockAddr. - ) { + long delta ///< This number is subtracted from the value of block blockAddr. + ) { return MIFARE_TwoStepHelper(PICC_CMD_MF_DECREMENT, blockAddr, delta); } // End MIFARE_Decrement() @@ -982,8 +982,8 @@ MFRC522::StatusCode MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0 * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0-0xff) number. - long delta ///< This number is added to the value of block blockAddr. - ) { + long delta ///< This number is added to the value of block blockAddr. + ) { return MIFARE_TwoStepHelper(PICC_CMD_MF_INCREMENT, blockAddr, delta); } // End MIFARE_Increment() @@ -996,7 +996,7 @@ MFRC522::StatusCode MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0 * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0xff) number. - ) { + ) { // The datasheet describes Restore as a two step operation, but does not explain what data to transfer in step 2. // Doing only a single step does not work, so I chose to transfer 0L in step two. return MIFARE_TwoStepHelper(PICC_CMD_MF_RESTORE, blockAddr, 0L); @@ -1008,9 +1008,9 @@ MFRC522::StatusCode MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0x * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use - byte blockAddr, ///< The block (0-0xff) number. - long data ///< The data to transfer in step 2 - ) { + byte blockAddr, ///< The block (0-0xff) number. + long data ///< The data to transfer in step 2 + ) { MFRC522::StatusCode result; byte cmdBuffer[2]; // We only need room for 2 bytes. @@ -1039,7 +1039,7 @@ MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The comman * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. - ) { + ) { MFRC522::StatusCode result; byte cmdBuffer[2]; // We only need room for 2 bytes. @@ -1121,9 +1121,9 @@ MFRC522::StatusCode MFRC522::MIFARE_SetValue(byte blockAddr, long value) { * @return STATUS_OK on success, STATUS_??? otherwise. */ MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data to transfer to the FIFO. Do NOT include the CRC_A. - byte sendLen, ///< Number of bytes in sendData. - bool acceptTimeout ///< True => A timeout is also success - ) { + byte sendLen, ///< Number of bytes in sendData. + bool acceptTimeout ///< True => A timeout is also success + ) { MFRC522::StatusCode result; byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. @@ -1188,7 +1188,7 @@ const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code / * @return PICC_Type */ MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select(). - ) { + ) { if (sak & 0x04) { // UID not complete return PICC_TYPE_NOT_COMPLETE; } @@ -1223,7 +1223,7 @@ MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned fr * @return const __FlashStringHelper * */ const __FlashStringHelper *MFRC522::PICC_GetTypeName(byte piccType ///< One of the PICC_Type enums. - ) { + ) { switch (piccType) { case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4"); case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)"); diff --git a/MFRC522.h b/MFRC522.h index b10f4c4..bbe1963 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -319,7 +319,7 @@ public: ///////////////////////////////////////////////////////////////////////////////////// // Functions for setting up the Arduino ///////////////////////////////////////////////////////////////////////////////////// - MFRC522(); + MFRC522(); MFRC522(byte chipSelectPin, byte resetPowerDownPin); void setSPIConfig(); From 00394472fe8755d61f4ab9b2f000d49fc6429151 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sat, 5 Dec 2015 21:17:44 +0100 Subject: [PATCH 94/96] improve code style include if in switch --- MFRC522.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 76a7334..ff3defa 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1189,14 +1189,13 @@ const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code / */ MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select(). ) { - if (sak & 0x04) { // UID not complete - return PICC_TYPE_NOT_COMPLETE; - } - //http://www.nxp.com/documents/application_note/AN10833.pdf - //3.2 Coding of Select Acknowledge (SAK) - //ignore 8-bit - sak&=0x7F; + // http://www.nxp.com/documents/application_note/AN10833.pdf + // 3.2 Coding of Select Acknowledge (SAK) + // ignore 8-bit (iso14443 starts with LSBit = bit 1) + // fixes wrong type for manufacturer Infineon (http://nfc-tools.org/index.php?title=ISO14443A) + sak &= 0x7F; switch (sak) { + case 0x04: return PICC_TYPE_NOT_COMPLETE; // UID not complete case 0x09: return PICC_TYPE_MIFARE_MINI; case 0x08: return PICC_TYPE_MIFARE_1K; case 0x18: return PICC_TYPE_MIFARE_4K; @@ -1204,17 +1203,10 @@ MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned fr case 0x10: case 0x11: return PICC_TYPE_MIFARE_PLUS; case 0x01: return PICC_TYPE_TNP3XXX; + case 0x20: return PICC_TYPE_ISO_14443_4; + case 0x40: return PICC_TYPE_ISO_18092; + default: return PICC_TYPE_UNKNOWN; } - - if (sak & 0x20) { - return PICC_TYPE_ISO_14443_4; - } - - if (sak & 0x40) { - return PICC_TYPE_ISO_18092; - } - - return PICC_TYPE_UNKNOWN; } // End PICC_GetType() /** From 45bf05684ab2b35d7c53fe8dba238d4ce9030174 Mon Sep 17 00:00:00 2001 From: Rotzbua Date: Sat, 5 Dec 2015 21:37:47 +0100 Subject: [PATCH 95/96] upd changes.txt --- changes.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changes.txt b/changes.txt index 18c2617..0618674 100644 --- a/changes.txt +++ b/changes.txt @@ -1,3 +1,8 @@ +5 Dec 2015 +- recognize infineon cards correctly @mayatforest +- added multi reader support, see example @lmmeng +- functions return MFRC522::StatusCode instead of generic byte @rotzbua + 10 Nov 2014 - Updated the changelog. - Added makefile. From 60833a7f6a93d15a14ef320946d86439baab02c9 Mon Sep 17 00:00:00 2001 From: Mahdi Abdinejadi Date: Mon, 7 Dec 2015 19:10:55 +0100 Subject: [PATCH 96/96] Added (MFRC522::StatusCode) type cast to avoid compilation error --- examples/ReadAndWrite/ReadAndWrite.ino | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/ReadAndWrite/ReadAndWrite.ino b/examples/ReadAndWrite/ReadAndWrite.ino index 5d9e896..58400f6 100644 --- a/examples/ReadAndWrite/ReadAndWrite.ino +++ b/examples/ReadAndWrite/ReadAndWrite.ino @@ -105,7 +105,7 @@ void loop() { // Authenticate using key A Serial.println(F("Authenticating using key A...")); - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); + status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); @@ -120,7 +120,7 @@ void loop() { // Read data from the block Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); - status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); @@ -131,7 +131,7 @@ void loop() { // Authenticate using key B Serial.println(F("Authenticating again using key B...")); - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); + status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); @@ -142,7 +142,7 @@ void loop() { Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" ...")); dump_byte_array(dataBlock, 16); Serial.println(); - status = mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); + status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); @@ -152,7 +152,7 @@ void loop() { // Read data from the block (again, should now be what we have written) Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" ...")); - status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status));

L)bX`c* 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�JFX^XJcFg@H-lH^dmskTW%; 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 literal 0 HcmV?d00001 diff --git a/examples/rfid_default_keys/rfid_default_keys.ino b/examples/rfid_default_keys/rfid_default_keys.ino new file mode 100644 index 0000000..114e9bf --- /dev/null +++ b/examples/rfid_default_keys/rfid_default_keys.ino @@ -0,0 +1,119 @@ +/* Try the most used default keys in + * https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys + * to dump block 0 of a MIFARE RFID card using a RFID-RC522 reader + * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. + ----------------------------------------------------------------------------- + * Pin layout should be as follows: + * Signal Pin Pin Pin + * Arduino Uno Arduino Mega MFRC522 board + * ------------------------------------------------------------ + * Reset 9 5 RST + * SPI SS 10 53 SDA + * SPI MOSI 11 52 MOSI + * SPI MISO 12 51 MISO + * SPI SCK 13 50 SCK + * + * Hardware required: + * Arduino + * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC + * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203. + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +#define SS_PIN 10 //Arduino Uno +#define RST_PIN 9 +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println("Try the most used default keys to print block 0 of a MIFARE PICC "); +} + + +void try_key(MFRC522::MIFARE_Key *key) +{ + // try with the supplied key + byte buffer[18]; + byte block = 0; + byte status; + //Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + // Serial.print("PCD_Authenticate() failed: "); + // Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Read block + byte byteCount = sizeof(buffer); + status = mfrc522.MIFARE_Read(block, buffer, &byteCount); + if (status != MFRC522::STATUS_OK) { + // Serial.print("MIFARE_Read() failed: "); + // Serial.println(mfrc522.GetStatusCodeName(status)); + } + else // Dump data + { + Serial.print("Success: key "); + for (byte i = 0; i < 6; i++) Serial.print((*key).keyByte[i], HEX); + Serial.print(" Block 0 : "); + for (byte index = 0; index < 16; index++) { + Serial.print(buffer[index] < 0x10 ? " 0" : " "); + Serial.print(buffer[index], HEX); + if ((index % 4) == 3) Serial.print(" "); + } + } + Serial.println(" "); + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + +} + +void loop() { + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + MFRC522::MIFARE_Key k; + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) return; + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) return; + + Serial.print("Card UID:"); //Dump UID + for (byte i = 0; i < mfrc522.uid.size; i++) { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.print(" PICC type: "); // Dump PICC type + byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + // Trying FFFFFFFFFFFF + for (byte i = 0; i < 6; i++) k.keyByte[i] = 0xFF; + try_key(&k); + // Trying A0A1A2A3A4A5 + k.keyByte[0] = 0xA0; k.keyByte[1] = 0xA1; k.keyByte[2] = 0xA2; k.keyByte[3] = 0xA3; k.keyByte[4] = 0xA4; k.keyByte[5] = 0xA5; + try_key(&k); + // Trying B0B1B2B3B4B5 + k.keyByte[0] = 0xB0; k.keyByte[1] = 0xB1; k.keyByte[2] = 0xB2; k.keyByte[3] = 0xB3; k.keyByte[4] = 0xB4; k.keyByte[5] = 0xB5; + try_key(&k); + // Trying 000000000000 + k.keyByte[0] = 0x00; k.keyByte[1] = 0x00; k.keyByte[2] = 0x00; k.keyByte[3] = 0x00; k.keyByte[4] = 0x00; k.keyByte[5] = 0x00; + try_key(&k); + // Trying 4d3a99c351dd + k.keyByte[0] = 0x04d; k.keyByte[1] = 0x3a; k.keyByte[2] = 0x99; k.keyByte[3] = 0xc3; k.keyByte[4] = 0x51; k.keyByte[5] = 0xdd; + try_key(&k); + // Trying 1a982c7e459a + k.keyByte[0] = 0x1a; k.keyByte[1] = 0x98; k.keyByte[2] = 0x2c; k.keyByte[3] = 0x7e; k.keyByte[4] = 0x45; k.keyByte[5] = 0x9a; + try_key(&k); + // Trying d3f7d3f7d3f7 + k.keyByte[0] = 0xd3; k.keyByte[1] = 0xf7; k.keyByte[2] = 0xd3; k.keyByte[3] = 0xf7; k.keyByte[4] = 0xd3; k.keyByte[5] = 0xf7; + try_key(&k); + // Trying aabbccddeeff + k.keyByte[0] = 0xaa; k.keyByte[1] = 0xbb; k.keyByte[2] = 0xcc; k.keyByte[3] = 0xdd; k.keyByte[4] = 0xee; k.keyByte[5] = 0xff; + try_key(&k); +} + diff --git a/examples/rfid_dump_block0/rfid_dump_block0.ino b/examples/rfid_dump_block0/rfid_dump_block0.ino new file mode 100644 index 0000000..02ee875 --- /dev/null +++ b/examples/rfid_dump_block0/rfid_dump_block0.ino @@ -0,0 +1,87 @@ +/* + * Dump block 0 of a MIFARE RFID card using a RFID-RC522 reader + * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. + ----------------------------------------------------------------------------- + * Pin layout should be as follows: + * Signal Pin Pin Pin + * Arduino Uno Arduino Mega MFRC522 board + * ------------------------------------------------------------ + * Reset 9 5 RST + * SPI SS 10 53 SDA + * SPI MOSI 11 52 MOSI + * SPI MISO 12 51 MISO + * SPI SCK 13 50 SCK + * + * Hardware required: + * Arduino + * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC + * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203. + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +#define SS_PIN 10 //Arduino Uno +#define RST_PIN 9 +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println("Print block 0 of a MIFARE PICC "); +} + +void loop() { + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + MFRC522::MIFARE_Key key; + for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; + + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) { + return; + } + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) return; + + Serial.print("Card UID:"); //Dump UID + for (byte i = 0; i < mfrc522.uid.size; i++) { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.print(" PICC type: "); // Dump PICC type + byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + byte buffer[18]; + byte block = 0; + byte status; + //Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Read block + byte byteCount = sizeof(buffer); + status = mfrc522.MIFARE_Read(block, buffer, &byteCount); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + else // Dump data + for (byte index = 0; index < 16; index++) { + Serial.print(buffer[index] < 0x10 ? " 0" : " "); + Serial.print(buffer[index], HEX); + if ((index % 4) == 3) Serial.print(" "); + } + Serial.println(" "); + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + +} diff --git a/examples/rfid_write_personal_data/rfid_write_personal_data.ino b/examples/rfid_write_personal_data/rfid_write_personal_data.ino new file mode 100644 index 0000000..7ef2fe8 --- /dev/null +++ b/examples/rfid_write_personal_data/rfid_write_personal_data.ino @@ -0,0 +1,151 @@ +/* + * Write personal data of a MIFARE RFID card using a RFID-RC522 reader + * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. + ----------------------------------------------------------------------------- + * Pin layout should be as follows: + * Signal Pin Pin Pin + * Arduino Uno Arduino Mega MFRC522 board + * ------------------------------------------------------------ + * Reset 9 5 RST + * SPI SS 10 53 SDA + * SPI MOSI 11 52 MOSI + * SPI MISO 12 51 MISO + * SPI SCK 13 50 SCK + * + * Hardware required: + * Arduino + * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC + * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203. + * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + */ + +#include +#include + +#define SS_PIN 10 //Arduino Uno +#define RST_PIN 9 +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +void setup() { + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println("Write personal data on a MIFARE PICC "); +} + +void loop() { + + // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + MFRC522::MIFARE_Key key; + for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; + + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) { + return; + } + + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) return; + + Serial.print("Card UID:"); //Dump UID + for (byte i = 0; i < mfrc522.uid.size; i++) { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.print(" PICC type: "); // Dump PICC type + byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + byte buffer[34]; + byte block; + byte status, len; + + Serial.setTimeout(20000L) ; // wait until 20 seconds for input from serial + // Ask personal data: Family name + Serial.println("Type Family name, ending with #"); + len=Serial.readBytesUntil('#', (char *) buffer, 30) ; // read family name from serial + for (byte i = len; i < 30; i++) buffer[i] = '\s'; // pad with spaces + + block = 1; + //Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write block + status = mfrc522.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println("MIFARE_Write() success: "); + + block = 2; + //Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write block + status = mfrc522.MIFARE_Write(block, &buffer[16], 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println("MIFARE_Write() success: "); + + // Ask personal data: First name + Serial.println("Type First name, ending with #"); + len=Serial.readBytesUntil('#', (char *) buffer, 20) ; // read first name from serial + for (byte i = len; i < 20; i++) buffer[i] = '\s'; // pad with spaces + + block = 4; + //Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write block + status = mfrc522.MIFARE_Write(block, buffer, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println("MIFARE_Write() success: "); + + block = 5; + //Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // Write block + status = mfrc522.MIFARE_Write(block, &buffer[16], 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + else Serial.println("MIFARE_Write() success: "); + + + Serial.println(" "); + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + +} From da11b84da69867134180c3068ef006bd80c642eb Mon Sep 17 00:00:00 2001 From: capurso Date: Wed, 16 Jul 2014 19:20:17 +0200 Subject: [PATCH 03/96] Tested documentation with Microsoft word and LibreOffice --- doc/rfidmifare.doc | Bin 414208 -> 438272 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/rfidmifare.doc b/doc/rfidmifare.doc index b4cba20382526986599909bb450a637960307304..495ff8982c2c910b0da2fdec002a056399b9050e 100644 GIT binary patch delta 73035 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 Date: Thu, 17 Jul 2014 15:05:19 +0200 Subject: [PATCH 04/96] Added title to manual --- doc/rfidmifare.doc | Bin 438272 -> 406016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/rfidmifare.doc b/doc/rfidmifare.doc index 495ff8982c2c910b0da2fdec002a056399b9050e..48fee92205d7156f5f2112018842fb558d78d8be 100644 GIT binary patch delta 12043 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 From 9db48240e98e11a45907be0fdb7a4125bee9b348 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Thu, 2 Oct 2014 11:20:16 +0300 Subject: [PATCH 05/96] PlatformIO-based manifest file Web: http://platformio.ikravets.com/#!/lib/show/Arduino-MFRC522 Docs: http://docs.platformio.ikravets.com/en/latest/librarymanager/index.html --- library.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 library.json diff --git a/library.json b/library.json new file mode 100644 index 0000000..9b74a18 --- /dev/null +++ b/library.json @@ -0,0 +1,10 @@ +{ + "name": "Arduino-MFRC522", + "keywords": "rfid, spi", + "description": "Read a card using a MFRC522 reader on your SPI interface on your Arduino", + "repository": + { + "type": "git", + "url": "https://github.com/miguelbalboa/rfid.git" + } +} From 18117d000103dc154a6e6874850b2ea5ad8e2f9d Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Thu, 23 Oct 2014 22:21:55 +0300 Subject: [PATCH 06/96] Avoid trademark issues with library name Added frameworks and platforms fields Updated Library Registry: http://platformio.ikravets.com/#!/lib/show/63/MFRC522 --- library.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/library.json b/library.json index 9b74a18..aecca56 100644 --- a/library.json +++ b/library.json @@ -1,10 +1,12 @@ { - "name": "Arduino-MFRC522", + "name": "MFRC522", "keywords": "rfid, spi", - "description": "Read a card using a MFRC522 reader on your SPI interface on your Arduino", + "description": "Read a card using a MFRC522 reader on your SPI interface", "repository": { "type": "git", "url": "https://github.com/miguelbalboa/rfid.git" - } + }, + "frameworks": "arduino", + "platforms": "atmelavr" } From d0ddd3df0231c064bd89dd2df711759337d5a5c7 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Thu, 23 Oct 2014 22:37:17 +0300 Subject: [PATCH 07/96] Exclude "doc" dir --- library.json | 1 + 1 file changed, 1 insertion(+) diff --git a/library.json b/library.json index aecca56..96917e1 100644 --- a/library.json +++ b/library.json @@ -7,6 +7,7 @@ "type": "git", "url": "https://github.com/miguelbalboa/rfid.git" }, + "exclude": "doc", "frameworks": "arduino", "platforms": "atmelavr" } From 300e7b185d1107144a7d10ebdb7bfc03e718cb68 Mon Sep 17 00:00:00 2001 From: mdxs Date: Fri, 7 Nov 2014 16:14:02 +0100 Subject: [PATCH 08/96] Added makefile to help package --- Makefile | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1c737e0 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +# Makefile for MFRC522 library +# + +all: package + +help: + @echo "Please use \`make ' where is one of" + @echo " clean to clean the project (e.g. remove process files)" + @echo " package to package the library (into a zip file)" + +clean: + rm ./MFRC522.zip + @echo + @echo "Clean finished." + +package: + zip -o ./MFRC522.zip ./MFRC522.h ./MFRC522.cpp From a9360d602210838461eee1c54d4f427c3adc0a65 Mon Sep 17 00:00:00 2001 From: mdxs Date: Mon, 10 Nov 2014 09:15:23 +0100 Subject: [PATCH 09/96] Fixed various typos and whitespace layout issues (no code should have changed by this commit) --- MFRC522.cpp | 76 ++++++++++++++++++++++++++--------------------------- MFRC522.h | 12 ++++----- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 5e09b29..b089f8a 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -1,6 +1,6 @@ /* * MFRC522.cpp - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. -* _Please_ see the comments in MFRC522.h - they give useful hints and background. +* NOTE: Please also check the comments in MFRC522.h - they provide useful hints and background information. * Released into the public domain. */ @@ -53,7 +53,7 @@ void MFRC522::PCD_WriteRegister( byte reg, ///< The register to write to. One o byte value ///< The value to write. ) { digitalWrite(_chipSelectPin, LOW); // Select slave - SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. + SPI.transfer(reg & 0x7E); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. SPI.transfer(value); digitalWrite(_chipSelectPin, HIGH); // Release slave again } // End PCD_WriteRegister() @@ -107,7 +107,7 @@ void MFRC522::PCD_ReadRegister( byte reg, ///< The register to read from. One o count--; // One read is performed outside of the loop SPI.transfer(address); // Tell MFRC522 which address we want to read while (index < count) { - if (index == 0 && rxAlign) { // Only update bit positions rxAlign..7 in values[0] + if (index == 0 && rxAlign) { // Only update bit positions rxAlign..7 in values[0] // Create bit mask for bit positions rxAlign..7 byte mask = 0; for (byte i = rxAlign; i <= 7; i++) { @@ -159,17 +159,17 @@ byte MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to tra byte length, ///< In: The number of bytes to transfer. byte *result ///< Out: Pointer to result buffer. Result is written to result[0..1], low byte first. ) { - PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. - PCD_WriteRegister(DivIrqReg, 0x04); // Clear the CRCIRq interrupt request bit + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. + PCD_WriteRegister(DivIrqReg, 0x04); // Clear the CRCIRq interrupt request bit PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization - PCD_WriteRegister(FIFODataReg, length, data); // Write data to the FIFO + PCD_WriteRegister(FIFODataReg, length, data); // Write data to the FIFO PCD_WriteRegister(CommandReg, PCD_CalcCRC); // Start the calculation // Wait for the CRC calculation to complete. Each iteration of the while-loop takes 17.73�s. word i = 5000; byte n; while (1) { - n = PCD_ReadRegister(DivIrqReg); // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved + n = PCD_ReadRegister(DivIrqReg); // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved if (n & 0x04) { // CRCIRq bit set - calculation done break; } @@ -177,7 +177,7 @@ byte MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to tra return STATUS_TIMEOUT; } } - PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. // Transfer the result from the registers to the result buffer result[0] = PCD_ReadRegister(CRCResultRegL); @@ -194,8 +194,8 @@ byte MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to tra * Initializes the MFRC522 chip. */ void MFRC522::PCD_Init() { - if (digitalRead(_resetPowerDownPin) == LOW) { //The MFRC522 chip is in power down mode. - digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. + if (digitalRead(_resetPowerDownPin) == LOW) { //The MFRC522 chip is in power down mode. + digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74�s. Let us be generous: 50ms. delay(50); } @@ -206,10 +206,10 @@ void MFRC522::PCD_Init() { // When communicating with a PICC we need a timeout if something goes wrong. // f_timer = 13.56 MHz / (2*TPreScaler+1) where TPreScaler = [TPrescaler_Hi:TPrescaler_Lo]. // TPrescaler_Hi are the four low bits in TModeReg. TPrescaler_Lo is TPrescalerReg. - PCD_WriteRegister(TModeReg, 0x80); // TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds - PCD_WriteRegister(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25�s. - PCD_WriteRegister(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. - PCD_WriteRegister(TReloadRegL, 0xE8); + PCD_WriteRegister(TModeReg, 0x80); // TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds + PCD_WriteRegister(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25�s. + PCD_WriteRegister(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. + PCD_WriteRegister(TReloadRegL, 0xE8); PCD_WriteRegister(TxASKReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting PCD_WriteRegister(ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) @@ -233,7 +233,7 @@ void MFRC522::PCD_Reset() { /** * Turns the antenna on by enabling pins TX1 and TX2. - * After a reset these pins disabled. + * After a reset these pins are disabled. */ void MFRC522::PCD_AntennaOn() { byte value = PCD_ReadRegister(TxControlReg); @@ -265,7 +265,7 @@ byte MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to t } // End PCD_TransceiveData() /** - * Transfers data to the MFRC522 FIFO, executes a commend, waits for completion and transfers data back from the FIFO. + * Transfers data to the MFRC522 FIFO, executes a command, waits for completion and transfers data back from the FIFO. * CRC validation can only be done if backData and backLen are specified. * * @return STATUS_OK on success, STATUS_??? otherwise. @@ -289,11 +289,11 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. PCD_WriteRegister(ComIrqReg, 0x7F); // Clear all seven interrupt request bits - PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization + PCD_SetRegisterBitMask(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization PCD_WriteRegister(FIFODataReg, sendLen, sendData); // Write sendData to the FIFO PCD_WriteRegister(BitFramingReg, bitFraming); // Bit adjustments - PCD_WriteRegister(CommandReg, command); // Execute the command - if (command == PCD_Transceive) { + PCD_WriteRegister(CommandReg, command); // Execute the command + if (command == PCD_Transceive) { PCD_SetRegisterBitMask(BitFramingReg, 0x80); // StartSend=1, transmission of data starts } @@ -302,7 +302,7 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut // Each iteration of the do-while-loop takes 17.86�s. i = 2000; while (1) { - n = PCD_ReadRegister(ComIrqReg); // ComIrqReg[7..0] bits are: Set1 TxIRq RxIRq IdleIRq HiAlertIRq LoAlertIRq ErrIRq TimerIRq + n = PCD_ReadRegister(ComIrqReg); // ComIrqReg[7..0] bits are: Set1 TxIRq RxIRq IdleIRq HiAlertIRq LoAlertIRq ErrIRq TimerIRq if (n & waitIRq) { // One of the interrupts that signal success has been set. break; } @@ -315,27 +315,27 @@ byte MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execut } // Stop now if any errors except collisions were detected. - byte errorRegValue = PCD_ReadRegister(ErrorReg); // ErrorReg[7..0] bits are: WrErr TempErr reserved BufferOvfl CollErr CRCErr ParityErr ProtocolErr + byte errorRegValue = PCD_ReadRegister(ErrorReg); // ErrorReg[7..0] bits are: WrErr TempErr reserved BufferOvfl CollErr CRCErr ParityErr ProtocolErr if (errorRegValue & 0x13) { // BufferOvfl ParityErr ProtocolErr return STATUS_ERROR; } // If the caller wants data back, get it from the MFRC522. if (backData && backLen) { - n = PCD_ReadRegister(FIFOLevelReg); // Number of bytes in the FIFO + n = PCD_ReadRegister(FIFOLevelReg); // Number of bytes in the FIFO if (n > *backLen) { return STATUS_NO_ROOM; } - *backLen = n; // Number of bytes returned - PCD_ReadRegister(FIFODataReg, n, backData, rxAlign); // Get received data from FIFO - _validBits = PCD_ReadRegister(ControlReg) & 0x07; // RxLastBits[2:0] indicates the number of valid bits in the last received byte. If this value is 000b, the whole byte is valid. + *backLen = n; // Number of bytes returned + PCD_ReadRegister(FIFODataReg, n, backData, rxAlign); // Get received data from FIFO + _validBits = PCD_ReadRegister(ControlReg) & 0x07; // RxLastBits[2:0] indicates the number of valid bits in the last received byte. If this value is 000b, the whole byte is valid. if (validBits) { *validBits = _validBits; } } // Tell about collisions - if (errorRegValue & 0x08) { // CollErr + if (errorRegValue & 0x08) { // CollErr return STATUS_COLLISION; } @@ -403,8 +403,8 @@ byte MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC if (bufferATQA == NULL || *bufferSize < 2) { // The ATQA response is 2 bytes long. return STATUS_NO_ROOM; } - PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. - validBits = 7; // For REQA and WUPA we need the short frame format - transmit only 7 bits of the last (and only) byte. TxLastBits = BitFramingReg[2..0] + PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + validBits = 7; // For REQA and WUPA we need the short frame format - transmit only 7 bits of the last (and only) byte. TxLastBits = BitFramingReg[2..0] status = PCD_TransceiveData(&command, 1, bufferATQA, bufferSize, &validBits); if (status != STATUS_OK) { return status; @@ -452,13 +452,13 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp byte responseLength; // Description of buffer structure: - // Byte 0: SEL Indicates the Cascade Level: PICC_CMD_SEL_CL1, PICC_CMD_SEL_CL2 or PICC_CMD_SEL_CL3 - // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits. - // Byte 2: UID-data or CT See explanation below. CT means Cascade Tag. - // Byte 3: UID-data - // Byte 4: UID-data - // Byte 5: UID-data - // Byte 6: BCC Block Check Character - XOR of bytes 2-5 + // Byte 0: SEL Indicates the Cascade Level: PICC_CMD_SEL_CL1, PICC_CMD_SEL_CL2 or PICC_CMD_SEL_CL3 + // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits. + // Byte 2: UID-data or CT See explanation below. CT means Cascade Tag. + // Byte 3: UID-data + // Byte 4: UID-data + // Byte 5: UID-data + // Byte 6: BCC Block Check Character - XOR of bytes 2-5 // Byte 7: CRC_A // Byte 8: CRC_A // The BCC and CRC_A is only transmitted if we know all the UID bits of the current Cascade Level. @@ -479,7 +479,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp } // Prepare MFRC522 - PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. // Repeat Cascade Level loop until we have a complete UID. uidComplete = false; @@ -541,7 +541,7 @@ byte MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally outp if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT. //Serial.print("SELECT: currentLevelKnownBits="); Serial.println(currentLevelKnownBits, DEC); buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes - // Calulate BCC - Block Check Character + // Calculate BCC - Block Check Character buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5]; // Calculate CRC_A result = PCD_CalculateCRC(buffer, 7, &buffer[7]); @@ -720,7 +720,7 @@ byte MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AUTH_KEY_A or PIC */ void MFRC522::PCD_StopCrypto1() { // Clear MFCrypto1On bit - PCD_ClearRegisterBitMask(Status2Reg, 0x08); // Status2Reg[7..0] bits are: TempSensClear I2CForceHS reserved reserved MFCrypto1On ModemState[2:0] + PCD_ClearRegisterBitMask(Status2Reg, 0x08); // Status2Reg[7..0] bits are: TempSensClear I2CForceHS reserved reserved MFCrypto1On ModemState[2:0] } // End PCD_StopCrypto1() /** diff --git a/MFRC522.h b/MFRC522.h index dde1234..3ebcf58 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -100,7 +100,7 @@ public: CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface // 0x0F // reserved for future use - // Page 1:Command + // Page 1: Command // 0x10 // reserved for future use ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving TxModeReg = 0x12 << 1, // defines transmission data rate and framing @@ -119,7 +119,7 @@ public: SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface // Page 2: Configuration - // 0x20 // reserved for future use + // 0x20 // reserved for future use CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation CRCResultRegL = 0x22 << 1, // 0x23 // reserved for future use @@ -136,7 +136,7 @@ public: TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value TCounterValueRegL = 0x2F << 1, - // Page 3:Test Registers + // Page 3: Test Registers // 0x30 // reserved for future use TestSel1Reg = 0x31 << 1, // general test signal configuration TestSel2Reg = 0x32 << 1, // general test signal configuration @@ -155,7 +155,7 @@ public: // 0x3F // reserved for production tests }; - // MFRC522 comands. Described in chapter 10 of the datasheet. + // MFRC522 commands. Described in chapter 10 of the datasheet. enum PCD_Command { PCD_Idle = 0x00, // no action, cancels current command execution PCD_Mem = 0x01, // stores 25 bytes into the internal buffer @@ -279,7 +279,7 @@ public: byte PICC_RequestA(byte *bufferATQA, byte *bufferSize); byte PICC_WakeupA(byte *bufferATQA, byte *bufferSize); - byte PICC_REQA_or_WUPA( byte command, byte *bufferATQA, byte *bufferSize); + byte PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); byte PICC_Select(Uid *uid, byte validBits = 0); byte PICC_HaltA(); @@ -318,7 +318,7 @@ public: private: byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) - byte MIFARE_TwoStepHelper(byte command, byte blockAddr, long data); + byte MIFARE_TwoStepHelper(byte command, byte blockAddr, long data); }; #endif From c7662631850e32cbfb9e34c10ee970eed122df11 Mon Sep 17 00:00:00 2001 From: mdxs Date: Mon, 10 Nov 2014 11:08:09 +0100 Subject: [PATCH 10/96] Updated the changelog --- changes.txt | 59 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/changes.txt b/changes.txt index cefa4a7..18c2617 100644 --- a/changes.txt +++ b/changes.txt @@ -1,9 +1,52 @@ -Renamed library from RFID to MFRC522 (RFID seemed to generic). -Register names changed to comply with datasheet. -Global defines moved into class. -All constants, functions and parameters are now commented in English. -Code refactored, most function names have changed. -Now supports ISO-14443-3 anti collission and 4/7/10 byte UIDs (cascade levels). -Added functions for MIFARE Classic Decrement/Increment/Restore/Transfer and MIFARE Ultralight Write. -New examples written. +10 Nov 2014 +- Updated the changelog. +- Added makefile. +24 Oct 2014 +- Added PlatformIO-based manifest file. + +17 Jul 2014 +- Written documentation for the library. +- Added rfid_default_keys example. + +11 Jun 2014 +- Updated example: ReadAndWrite. + +14 Apr 2014 +- Updated examples: DumpInfo, MifareClassicValueBlock, and ReadAndWrite. + +12 Feb 2014 +- Fixed resetPowerDownPin initial state. + +29 Jan 2014 +- Fixed chipSelectPin initial state. + +30 Nov 2013 +- Examples put in their own folders. +- Updated the keywords.txt file. + +12 Nov 2013 +- Updated examples: DumpInfo, MifareClassicValueBlock, and ReadAndWrite. + +20 Oct 2013 +- All constants, functions and parameters are now commented in English. +- Code refactored, most function names have changed. +- Support ISO-14443-3 anti collission and 4/7/10 byte UIDs (cascade levels). +- Added functions for MIFARE Classic Decrement/Increment/Restore/Transfer + and MIFARE Ultralight Write. +- New examples written. + +19 Oct 2013 +- Renamed library from RFID to MFRC522 (RFID seemed to generic). +- Register names changed to comply with datasheet. +- Global defines moved into class. + +24 Sep 2013 +- Turn off encryption when tag is halted. + +27 Jan 2013 +- Added README and small TODO list. +- Added example to show Serial on LCD display. + +09 Sep 2012 +- Initial commit to GitHub. From df023ed5086077a42fc243eea3d44262b692d512 Mon Sep 17 00:00:00 2001 From: mdxs Date: Mon, 10 Nov 2014 13:31:43 +0100 Subject: [PATCH 11/96] Removed TODO.md file --- TODO.md | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 TODO.md diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 5e936bf..0000000 --- a/TODO.md +++ /dev/null @@ -1,6 +0,0 @@ -TODO: - -Create Examples: -- Read more stuff than the serial number -- Write to a card -- Do some ethernet stuff (with an ethernet module) From 1ee8cbd7fdc556ec832eeec8e4329c2cfd0d89bf Mon Sep 17 00:00:00 2001 From: mdxs Date: Mon, 10 Nov 2014 13:58:09 +0100 Subject: [PATCH 12/96] Adding AntennaOff and get/set of AntennaGain --- MFRC522.cpp | 30 ++++++++++++++++++++++++++++++ MFRC522.h | 19 +++++++++++++++++++ keywords.txt | 16 +++++++++++++++- 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index 5e09b29..aada67a 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -242,6 +242,36 @@ void MFRC522::PCD_AntennaOn() { } } // End PCD_AntennaOn() +/** + * Turns the antenna off by disabling pins TX1 and TX2. + */ +void MFRC522::PCD_AntennaOff() { + PCD_ClearRegisterBitMask(RFCfgReg, 0x03); +} // End PCD_AntennaOff() + +/** + * Get the current MFRC522 Receiver Gain (RxGain[2:0]) value. + * See 9.3.3.6 / table 98 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * NOTE: Return value scrubbed with (0x07<<4)=01110000b as RCFfgReg may use reserved bits. + * + * @return Value of the RxGain, scrubbed to the 3 bits used. + */ +byte MFRC522::PCD_GetAntennaGain() { + return PCD_ReadRegister(RFCfgReg) & (0x07<<4); +} // End PCD_GetAntennaGain() + +/** + * Set the MFRC522 Receiver Gain (RxGain) to value specified by given mask. + * See 9.3.3.6 / table 98 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * NOTE: Given mask is scrubbed with (0x07<<4)=01110000b as RCFfgReg may use reserved bits. + */ +void MFRC522::PCD_SetAntennaGain(byte mask) { + if (PCD_GetAntennaGain() != mask) { // only bother if there is a change + PCD_ClearRegisterBitMask(RFCfgReg, (0x07<<4)); // clear needed to allow 000 pattern + PCD_SetRegisterBitMask(RFCfgReg, mask & (0x07<<4)); // only set RxGain[2:0] bits + } +} // End PCD_SetAntennaGain() + ///////////////////////////////////////////////////////////////////////////////////// // Functions for communicating with PICCs ///////////////////////////////////////////////////////////////////////////////////// diff --git a/MFRC522.h b/MFRC522.h index dde1234..e530a3f 100644 --- a/MFRC522.h +++ b/MFRC522.h @@ -169,6 +169,22 @@ public: PCD_SoftReset = 0x0F // resets the MFRC522 }; + // MFRC522 RxGain[2:0] masks, defines the receiver's signal voltage gain factor (on the PCD). + // Described in 9.3.3.6 / table 98 of the datasheet at http://www.nxp.com/documents/data_sheet/MFRC522.pdf + enum PCD_RxGain { + RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum + RxGain_23dB = 0x01 << 4, // 001b - 23 dB + RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b + RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b + RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default + RxGain_38dB = 0x05 << 4, // 101b - 38 dB + RxGain_43dB = 0x06 << 4, // 110b - 43 dB + RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum + RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB + RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB + RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB + }; + // Commands sent to the PICC. enum PICC_Command { // The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4) @@ -270,6 +286,9 @@ public: void PCD_Init(); void PCD_Reset(); void PCD_AntennaOn(); + void PCD_AntennaOff(); + byte PCD_GetAntennaGain(); + void PCD_SetAntennaGain(byte mask); ///////////////////////////////////////////////////////////////////////////////////// // Functions for communicating with PICCs diff --git a/keywords.txt b/keywords.txt index d67a600..891afb4 100644 --- a/keywords.txt +++ b/keywords.txt @@ -8,6 +8,7 @@ MFRC522 KEYWORD1 PCD_Register KEYWORD1 PCD_Command KEYWORD1 +PCD_RxGain KEYWORD1 PICC_Command KEYWORD1 MIFARE_Misc KEYWORD1 PICC_Type KEYWORD1 @@ -30,6 +31,9 @@ PCD_CalculateCRC KEYWORD2 PCD_Init KEYWORD2 PCD_Reset KEYWORD2 PCD_AntennaOn KEYWORD2 +PCD_AntennaOff KEYWORD2 +PCD_GetAntennaGain KEYWORD2 +PCD_SetAntennaGain KEYWORD2 PCD_TransceiveData KEYWORD2 PCD_CommunicateWithPICC KEYWORD2 PICC_RequestA KEYWORD2 @@ -120,6 +124,17 @@ PCD_Receive LITERAL1 PCD_Transceive LITERAL1 PCD_MFAuthent LITERAL1 PCD_SoftReset LITERAL1 +RxGain_18dB LITERAL1 +RxGain_23dB LITERAL1 +RxGain_18dB_2 LITERAL1 +RxGain_23dB_2 LITERAL1 +RxGain_33dB LITERAL1 +RxGain_38dB LITERAL1 +RxGain_43dB LITERAL1 +RxGain_48dB LITERAL1 +RxGain_min LITERAL1 +RxGain_avg LITERAL1 +RxGain_max LITERAL1 PICC_CMD_REQA LITERAL1 PICC_CMD_WUPA LITERAL1 PICC_CMD_CT LITERAL1 @@ -158,4 +173,3 @@ STATUS_INVALID LITERAL1 STATUS_CRC_WRONG LITERAL1 STATUS_MIFARE_NACK LITERAL1 FIFO_SIZE LITERAL1 - From 879a6d8c9322e0901a15c62c5ae27ae8a040e603 Mon Sep 17 00:00:00 2001 From: mdxs Date: Tue, 11 Nov 2014 01:58:51 +0100 Subject: [PATCH 13/96] Updated README file --- README.md | 20 ---------- README.rst | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 20 deletions(-) delete mode 100644 README.md create mode 100644 README.rst diff --git a/README.md b/README.md deleted file mode 100644 index e21e533..0000000 --- a/README.md +++ /dev/null @@ -1,20 +0,0 @@ -rfid -==== - -Arduino RFID Library for MFRC522 - -Read a card using a mfrc522 reader on your SPI interface on your Arduino -* Pin layout should be as follows (on Arduino Uno): -* MOSI: Pin 11 / ICSP-4 -* MISO: Pin 12 / ICSP-1 -* SCK : Pin 13 / ISCP-3 -* SS : Pin 10 (Configurable) -* RST : Pin 9 (Configurable) -* - -* Pin layout should be as follows (on Arduino Mega): -* MOSI: Pin 51 / ICSP-4 -* MISO: Pin 50 / ICSP-1 -* SCK : Pin 52 / ISCP-3 -* SS : Pin 53 (Configurable) -* RST : Pin 5 (Configurable) diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..2c0ea2f --- /dev/null +++ b/README.rst @@ -0,0 +1,105 @@ +MFRC522 +======= + +Arduino library for MFRC522 and other RFID RC522 based modules. + +Read and write different types of Radio-Frequency IDentification (RFID) cards +on your Arduino using a RC522 based reader connected via the Serial Peripheral +Interface (SPI) interface. + + +.. _pin layout: + +Pin Layout +---------- + +The following table shows the typical pin layout used: + ++-----------+---------+-----------------------------+ +| | PCD | Arduino | +| +---------+---------+---------+---------+ +| | MFRC522 | Uno | Mega | Nano v3 | ++-----------+---------+---------+---------+---------+ +| Signal | Pin | Pin | Pin | Pin | ++===========+=========+=========+=========+=========+ +| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | ++-----------+---------+---------+---------+---------+ +| SPI SS | SDA | 10 [2]_ | 53 [2]_ | D10 | ++-----------+---------+---------+---------+---------+ +| SPI MOSI | MOSI | 11 | 52 | D11 | ++-----------+---------+---------+---------+---------+ +| SPI MISO | MISO | 12 | 51 | D12 | ++-----------+---------+---------+---------+---------+ +| SPI SCK | SCK | 13 | 50 | D13 | ++-----------+---------+---------+---------+---------+ + +.. [1] Configurable, typically defined as RST_PIN in Sketch. +.. [2] Configurable, typically defined as SS_PIN in Sketch. + + +Hardware +-------- + +There are three hardware components involved: + +1. **Micro Controller**: + +* An `Arduino`_ or compatible executing the Sketch using this library. + +* Prices vary from USD 7 for clones, to USD 75 for "starter kits" (which + might be a good choice if this is your first exposure to Arduino; + check if such kit already includes the Arduino, Reader, and some Tags). + +2. **Proximity Coupling Device (PCD)**: + +* The PCD is the actual RFID **Reader** based on `NXP MFRC522`_ Contactless + Reader Integrated Circuit). + +* Readers can be found on `eBay`_ for around USD 5: search for *"rc522"*. + +* You can also find them at several web stores, they are often included in + *"starter kits"*; so check your favourite electronics provider as well. + +3. **Proximity Integrated Circuit Card (PICC)**: + +* The PICC is the RFID **Card** or **Tag** using the `ISO/IEC 14443A`_ + interface, for example Mifare or NTAG203. + +* One or two might be included with the Reader or *"starter kit"* already. + + +Protocols +--------- + +1. The micro controller and the reader use SPI for communication. + +* The protocol is described in the `NXP MFRC522`_ datasheet. + +* See the `Pin Layout`_ section for details on connecting the pins. + +2. The reader and the tags communicate using a 13.56 MHz electromagnetic field. + +* The protocol is defined in ISO/IEC 14443-3:2011 Part 3. + + * Details are found in chapter 6 *"Type A – Initialization and anticollision"*. + + * See http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf for a free version + of the final draft (which might be outdated in some areas). + + +History +------- + +The MFRC522 library was first created in Jan 2012 by Miguel Balboa (from +http://circuitito.com) based on code by Dr. Leong (from http://B2CQSHOP.com) +for *"Arduino RFID module Kit 13.56 Mhz with Tags SPI W and R By COOQRobot"*. + +It was translated into English and rewritten/refactored in the fall of 2013 +by Søren Thing Andersen (from http://access.thing.dk). + + +.. _arduino: http://arduino.cc/ +.. _ebay: http://www.ebay.com/ +.. _iso/iec 14443a: http://en.wikipedia.org/wiki/ISO/IEC_14443 +.. _iso/iec 14443-3\:2011 part 3: +.. _nxp mfrc522: http://www.nxp.com/documents/data_sheet/MFRC522.pdf \ No newline at end of file From 8bf02300b3fdc0cf0e6f2b77e8b58ad8ae963056 Mon Sep 17 00:00:00 2001 From: mdxs Date: Tue, 11 Nov 2014 06:23:07 +0100 Subject: [PATCH 14/96] Updated the DumpInfo example --- examples/DumpInfo/DumpInfo.ino | 93 ++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 31 deletions(-) diff --git a/examples/DumpInfo/DumpInfo.ino b/examples/DumpInfo/DumpInfo.ino index ed4fc1d..b0909a8 100644 --- a/examples/DumpInfo/DumpInfo.ino +++ b/examples/DumpInfo/DumpInfo.ino @@ -1,44 +1,57 @@ /* - * MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. - * The library file MFRC522.h has a wealth of useful info. Please read it. - * The functions are documented in MFRC522.cpp. - * - * Based on code Dr.Leong ( WWW.B2CQSHOP.COM ) - * Created by Miguel Balboa (circuitito.com), Jan, 2012. - * Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.) + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * * Released into the public domain. - * - * Sample program showing how to read data from a PICC using a MFRC522 reader on the Arduino SPI interface. - *----------------------------------------------------------------------------- empty_skull - * Aggiunti pin per arduino Mega - * add pin configuration for arduino mega - * http://mac86project.altervista.org/ - ----------------------------------------------------------------------------- Nicola Coppola - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board + * ---------------------------------------------------------------------------- + * Example sketch/program showing how to read data from a PICC (that is: a RFID + * Tag or Card) using a MFRC522 based RFID Reader on the Arduino SPI interface. + * + * When the Arduino and the MFRC522 module are connected (see the pin layout + * below), load this sketch into Arduino IDE then verify/compile and upload it. + * To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). + * When you present a PICC (that is: a RFID Tag or Card) at reading distance + * of the MFRC522 Reader/PCD, the output will show the ID, type and any data + * blocks it can read. Note that you may see some "Timeout in communication" + * messages when removing the PICC from reading distance to early. + * + * If your reader supports it, this sketch/program will read all the PICCs + * presented (that is: multiple tag reading). So if you stack* two or more + * PICCs on top of each other and present them to the reader, it will first + * output all details of the first and then the next PICC. Note that this + * may take some time as all data blocks are dumped, so keep the PICCs at + * reading distance until complete. + * + * Typical pin layout used: * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 51 MOSI - * SPI MISO 12 50 MISO - * SPI SCK 13 52 SCK - * - * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + * MFRC522 Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 + * Signal Pin Pin Pin Pin + * ------------------------------------------------------------ + * RST/Reset RST 9 5 D9 + * SPI SS SDA 10 53 D10 + * SPI MOSI MOSI 11 51 D11 + * SPI MISO MISO 12 50 D12 + * SPI SCK SCK 13 52 D13 */ #include #include -#define SS_PIN 10 -#define RST_PIN 9 -MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. +#define RST_PIN 9 // +#define SS_PIN 10 // + +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance void setup() { - Serial.begin(9600); // Initialize serial communications with the PC + Serial.begin(9600); // Initialize serial communications with the PC SPI.begin(); // Init SPI bus - mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Scan PICC to see UID and type..."); + mfrc522.PCD_Init(); // Init MFRC522 + ShowReaderDetails(); // Show details of PCD - MFRC522 Card Reader details + Serial.println("Scan PICC to see UID, type, and data blocks..."); } void loop() { @@ -52,6 +65,24 @@ void loop() { return; } - // Dump debug info about the card. PICC_HaltA() is automatically called. + // Dump debug info about the card; PICC_HaltA() is automatically called mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); } + +void ShowReaderDetails() { + // Get the MFRC522 software version + byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg); + Serial.print("MFRC522 Software Version: 0x"); + Serial.print(v, HEX); + if (v == 0x91) + Serial.print(" = v1.0"); + else if (v == 0x92) + Serial.print(" = v2.0"); + else + Serial.print(" (unknown)"); + Serial.println(""); + // When 0x00 or 0xFF is returned, communication probably failed + if ((v == 0x00) || (v == 0xFF)) { + Serial.println("WARNING: Communication failure, is the MFRC522 properly connected?"); + } +} \ No newline at end of file From 38355d58023f08c1222413e0f7a4936eb09eeb79 Mon Sep 17 00:00:00 2001 From: mdxs Date: Tue, 11 Nov 2014 08:01:33 +0100 Subject: [PATCH 15/96] Adding a RFID-RC522 part for Fritzing --- doc/fritzing/RFID-RC522-v2.fzpz | Bin 0 -> 16939 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/fritzing/RFID-RC522-v2.fzpz diff --git a/doc/fritzing/RFID-RC522-v2.fzpz b/doc/fritzing/RFID-RC522-v2.fzpz new file mode 100644 index 0000000000000000000000000000000000000000..a0393148c06f95c373975920750655e85a290933 GIT binary patch literal 16939 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 Date: Tue, 11 Nov 2014 08:02:58 +0100 Subject: [PATCH 16/96] Adding basic Fritzing for Uno with RC522 --- doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.fzz | Bin 0 -> 23140 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.fzz diff --git a/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.fzz b/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.fzz new file mode 100644 index 0000000000000000000000000000000000000000..7c98c49de0616fabec5be6a9cf75ddb4f23c187f GIT binary patch literal 23140 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%0DH4pBH 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 N{JIGj)c*eaKLF^J1kC^d literal 0 HcmV?d00001 From 9badf084d7b81f93afa176468c564dbb1f4b8978 Mon Sep 17 00:00:00 2001 From: mdxs Date: Tue, 11 Nov 2014 12:11:40 +0100 Subject: [PATCH 17/96] Fixed typo in comment --- MFRC522.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MFRC522.cpp b/MFRC522.cpp index bd271fa..87a242b 100644 --- a/MFRC522.cpp +++ b/MFRC522.cpp @@ -798,7 +798,7 @@ byte MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0x * * For MIFARE Classic the sector containing the block must be authenticated before calling this function. * - * For MIFARE Ultralight the opretaion is called "COMPATIBILITY WRITE". + * For MIFARE Ultralight the operation is called "COMPATIBILITY WRITE". * Even though 16 bytes are transferred to the Ultralight PICC, only the least significant 4 bytes (bytes 0 to 3) * are written to the specified address. It is recommended to set the remaining bytes 04h to 0Fh to all logic 0. * * From 623d04744aa74d2a81292e81ce81b4803e45ecf3 Mon Sep 17 00:00:00 2001 From: mdxs Date: Wed, 12 Nov 2014 00:50:54 +0100 Subject: [PATCH 18/96] Updated comments and pin layout --- examples/DumpInfo/DumpInfo.ino | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/DumpInfo/DumpInfo.ino b/examples/DumpInfo/DumpInfo.ino index b0909a8..ca1e83f 100644 --- a/examples/DumpInfo/DumpInfo.ino +++ b/examples/DumpInfo/DumpInfo.ino @@ -14,12 +14,12 @@ * below), load this sketch into Arduino IDE then verify/compile and upload it. * To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). * When you present a PICC (that is: a RFID Tag or Card) at reading distance - * of the MFRC522 Reader/PCD, the output will show the ID, type and any data - * blocks it can read. Note that you may see some "Timeout in communication" - * messages when removing the PICC from reading distance to early. + * of the MFRC522 Reader/PCD, the serial output will show the ID/UID, type and + * any data blocks it can read. Note: you may see "Timeout in communication" + * messages when removing the PICC from reading distance too early. * * If your reader supports it, this sketch/program will read all the PICCs - * presented (that is: multiple tag reading). So if you stack* two or more + * presented (that is: multiple tag reading). So if you stack two or more * PICCs on top of each other and present them to the reader, it will first * output all details of the first and then the next PICC. Note that this * may take some time as all data blocks are dumped, so keep the PICCs at @@ -27,15 +27,15 @@ * * Typical pin layout used: * ------------------------------------------------------------ - * MFRC522 Arduino Arduino Arduino - * Reader/PCD Uno Mega Nano v3 - * Signal Pin Pin Pin Pin + * MFRC522 Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 + * Signal Pin Pin Pin Pin * ------------------------------------------------------------ - * RST/Reset RST 9 5 D9 - * SPI SS SDA 10 53 D10 - * SPI MOSI MOSI 11 51 D11 - * SPI MISO MISO 12 50 D12 - * SPI SCK SCK 13 52 D13 + * RST/Reset RST 9 5 D9 + * SPI SS SDA(SS) 10 53 D10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 + * SPI MISO MISO 12 / ICSP-1 50 D12 + * SPI SCK SCK 13 / ICSP-3 52 D13 */ #include From ec25a81cf1f0525129a054985b254a138af16a12 Mon Sep 17 00:00:00 2001 From: mdxs Date: Wed, 12 Nov 2014 00:58:58 +0100 Subject: [PATCH 19/96] Updated pin layout: incl ICSP pins for Uno and note on SDA/SS for PCD --- README.rst | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/README.rst b/README.rst index 2c0ea2f..7adc76c 100644 --- a/README.rst +++ b/README.rst @@ -15,26 +15,27 @@ Pin Layout The following table shows the typical pin layout used: -+-----------+---------+-----------------------------+ -| | PCD | Arduino | -| +---------+---------+---------+---------+ -| | MFRC522 | Uno | Mega | Nano v3 | -+-----------+---------+---------+---------+---------+ -| Signal | Pin | Pin | Pin | Pin | -+===========+=========+=========+=========+=========+ -| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | -+-----------+---------+---------+---------+---------+ -| SPI SS | SDA | 10 [2]_ | 53 [2]_ | D10 | -+-----------+---------+---------+---------+---------+ -| SPI MOSI | MOSI | 11 | 52 | D11 | -+-----------+---------+---------+---------+---------+ -| SPI MISO | MISO | 12 | 51 | D12 | -+-----------+---------+---------+---------+---------+ -| SPI SCK | SCK | 13 | 50 | D13 | -+-----------+---------+---------+---------+---------+ ++-----------+----------+---------------------------------+ +| | PCD | Arduino | +| +----------+-------------+---------+---------+ +| | MFRC522 | Uno | Mega | Nano v3 | ++-----------+----------+-------------+---------+---------+ +| Signal | Pin | Pin | Pin | Pin | ++===========+==========+=============+=========+=========+ +| RST/Reset | RST | 9 [1]_ | 5 [1]_ | D9 | ++-----------+----------+-------------+---------+---------+ +| SPI SS | SDA [3]_ | 10 [2]_ | 53 [2]_ | D10 | ++-----------+----------+-------------+---------+---------+ +| SPI MOSI | MOSI | 11 / ICSP-4 | 52 | D11 | ++-----------+----------+-------------+---------+---------+ +| SPI MISO | MISO | 12 / ICSP-1 | 51 | D12 | ++-----------+----------+-------------+---------+---------+ +| SPI SCK | SCK | 13 / ICSP-3 | 50 | D13 | ++-----------+----------+-------------+---------+---------+ -.. [1] Configurable, typically defined as RST_PIN in Sketch. -.. [2] Configurable, typically defined as SS_PIN in Sketch. +.. [1] Configurable, typically defined as RST_PIN in sketch/program. +.. [2] Configurable, typically defined as SS_PIN in sketch/program. +.. [3] The SDA pin might be labeled SS on some/older MFRC522 boards. Hardware From 8bbc999612eb4ec9471cf53e7e0bde2eabcce4a9 Mon Sep 17 00:00:00 2001 From: mdxs Date: Thu, 13 Nov 2014 13:10:04 +0100 Subject: [PATCH 20/96] Refactored and commented Default Keys example --- .../rfid_default_keys/rfid_default_keys.ino | 237 ++++++++++-------- 1 file changed, 134 insertions(+), 103 deletions(-) diff --git a/examples/rfid_default_keys/rfid_default_keys.ino b/examples/rfid_default_keys/rfid_default_keys.ino index 114e9bf..11d3f7c 100644 --- a/examples/rfid_default_keys/rfid_default_keys.ino +++ b/examples/rfid_default_keys/rfid_default_keys.ino @@ -1,119 +1,150 @@ -/* Try the most used default keys in - * https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys - * to dump block 0 of a MIFARE RFID card using a RFID-RC522 reader - * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. - ----------------------------------------------------------------------------- - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board +/* + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. + * + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * Example sketch/program which will try the most used default keys listed in + * https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys to dump the + * block 0 of a MIFARE RFID card using a RFID-RC522 reader. + * + * Typical pin layout used: * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 52 MOSI - * SPI MISO 12 51 MISO - * SPI SCK 13 50 SCK - * - * Hardware required: - * Arduino - * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC - * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203. - * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + * MFRC522 Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 + * Signal Pin Pin Pin Pin + * ------------------------------------------------------------ + * RST/Reset RST 9 5 D9 + * SPI SS SDA(SS) 10 53 D10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 + * SPI MISO MISO 12 / ICSP-1 50 D12 + * SPI SCK SCK 13 / ICSP-3 52 D13 */ #include #include -#define SS_PIN 10 //Arduino Uno -#define RST_PIN 9 -MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +// Number of known default keys (hard-coded) +// NOTE: Synchronize the NR_KNOWN_KEYS define with the defaultKeys[] array +#define NR_KNOWN_KEYS 8 +// Known keys, see: https://code.google.com/p/mfcuk/wiki/MifareClassicDefaultKeys +byte knownKeys[NR_KNOWN_KEYS][MFRC522::MF_KEY_SIZE] = { + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, // FF FF FF FF FF FF = factory default + {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5}, // A0 A1 A2 A3 A4 A5 + {0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5}, // B0 B1 B2 B3 B4 B5 + {0x4d, 0x3a, 0x99, 0xc3, 0x51, 0xdd}, // 4D 3A 99 C3 51 DD + {0x1a, 0x98, 0x2c, 0x7e, 0x45, 0x9a}, // 1A 98 2C 7E 45 9A + {0xd3, 0xf7, 0xd3, 0xf7, 0xd3, 0xf7}, // D3 F7 D3 F7 D3 F7 + {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}, // AA BB CC DD EE FF + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // 00 00 00 00 00 00 +}; + +/* + * Initialize. + */ void setup() { - Serial.begin(9600); // Initialize serial communications with the PC - SPI.begin(); // Init SPI bus - mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Try the most used default keys to print block 0 of a MIFARE PICC "); + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + Serial.println("Try the most used default keys to print block 0 of a MIFARE PICC."); } +/* + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} -void try_key(MFRC522::MIFARE_Key *key) +/* + * Try using the PICC (the tag/card) with the given key to access block 0. + * On success, it will show the key details, and dump the block data on Serial. + * + * @return true when the given key worked, false otherwise. + */ +boolean try_key(MFRC522::MIFARE_Key *key) { - // try with the supplied key - byte buffer[18]; - byte block = 0; - byte status; - //Serial.println("Authenticating using key A..."); - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, key, &(mfrc522.uid)); - if (status != MFRC522::STATUS_OK) { - // Serial.print("PCD_Authenticate() failed: "); - // Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - - // Read block - byte byteCount = sizeof(buffer); - status = mfrc522.MIFARE_Read(block, buffer, &byteCount); - if (status != MFRC522::STATUS_OK) { - // Serial.print("MIFARE_Read() failed: "); - // Serial.println(mfrc522.GetStatusCodeName(status)); - } - else // Dump data - { - Serial.print("Success: key "); - for (byte i = 0; i < 6; i++) Serial.print((*key).keyByte[i], HEX); - Serial.print(" Block 0 : "); - for (byte index = 0; index < 16; index++) { - Serial.print(buffer[index] < 0x10 ? " 0" : " "); - Serial.print(buffer[index], HEX); - if ((index % 4) == 3) Serial.print(" "); - } - } - Serial.println(" "); - mfrc522.PICC_HaltA(); // Halt PICC - mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD - + boolean result = false; + byte buffer[18]; + byte block = 0; + byte status; + + // Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + // Serial.print("PCD_Authenticate() failed: "); + // Serial.println(mfrc522.GetStatusCodeName(status)); + return false; + } + + // Read block + byte byteCount = sizeof(buffer); + status = mfrc522.MIFARE_Read(block, buffer, &byteCount); + if (status != MFRC522::STATUS_OK) { + // Serial.print("MIFARE_Read() failed: "); + // Serial.println(mfrc522.GetStatusCodeName(status)); + } + else { + // Successful read + result = true; + Serial.print("Success with key:"); + dump_byte_array((*key).keyByte, MFRC522::MF_KEY_SIZE); + Serial.println(); + // Dump block data + Serial.print("Block "); Serial.print(block); Serial.print(":"); + dump_byte_array(buffer, 16); + Serial.println(); + } + Serial.println(); + + mfrc522.PICC_HaltA(); // Halt PICC + mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD + return result; } +/* + * Main loop. + */ void loop() { - // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. - MFRC522::MIFARE_Key k; - // Look for new cards - if ( ! mfrc522.PICC_IsNewCardPresent()) return; - - // Select one of the cards - if ( ! mfrc522.PICC_ReadCardSerial()) return; - - Serial.print("Card UID:"); //Dump UID - for (byte i = 0; i < mfrc522.uid.size; i++) { - Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); - Serial.print(mfrc522.uid.uidByte[i], HEX); - } - Serial.print(" PICC type: "); // Dump PICC type - byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); - Serial.println(mfrc522.PICC_GetTypeName(piccType)); - - // Trying FFFFFFFFFFFF - for (byte i = 0; i < 6; i++) k.keyByte[i] = 0xFF; - try_key(&k); - // Trying A0A1A2A3A4A5 - k.keyByte[0] = 0xA0; k.keyByte[1] = 0xA1; k.keyByte[2] = 0xA2; k.keyByte[3] = 0xA3; k.keyByte[4] = 0xA4; k.keyByte[5] = 0xA5; - try_key(&k); - // Trying B0B1B2B3B4B5 - k.keyByte[0] = 0xB0; k.keyByte[1] = 0xB1; k.keyByte[2] = 0xB2; k.keyByte[3] = 0xB3; k.keyByte[4] = 0xB4; k.keyByte[5] = 0xB5; - try_key(&k); - // Trying 000000000000 - k.keyByte[0] = 0x00; k.keyByte[1] = 0x00; k.keyByte[2] = 0x00; k.keyByte[3] = 0x00; k.keyByte[4] = 0x00; k.keyByte[5] = 0x00; - try_key(&k); - // Trying 4d3a99c351dd - k.keyByte[0] = 0x04d; k.keyByte[1] = 0x3a; k.keyByte[2] = 0x99; k.keyByte[3] = 0xc3; k.keyByte[4] = 0x51; k.keyByte[5] = 0xdd; - try_key(&k); - // Trying 1a982c7e459a - k.keyByte[0] = 0x1a; k.keyByte[1] = 0x98; k.keyByte[2] = 0x2c; k.keyByte[3] = 0x7e; k.keyByte[4] = 0x45; k.keyByte[5] = 0x9a; - try_key(&k); - // Trying d3f7d3f7d3f7 - k.keyByte[0] = 0xd3; k.keyByte[1] = 0xf7; k.keyByte[2] = 0xd3; k.keyByte[3] = 0xf7; k.keyByte[4] = 0xd3; k.keyByte[5] = 0xf7; - try_key(&k); - // Trying aabbccddeeff - k.keyByte[0] = 0xaa; k.keyByte[1] = 0xbb; k.keyByte[2] = 0xcc; k.keyByte[3] = 0xdd; k.keyByte[4] = 0xee; k.keyByte[5] = 0xff; - try_key(&k); -} + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; + + // Show some details of the PICC (that is: the tag/card) + Serial.print("Card UID:"); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print("PICC type: "); + byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); + + // Try the known default keys + MFRC522::MIFARE_Key key; + for (byte k = 0; k < NR_KNOWN_KEYS; k++) { + // Copy the known key into the MIFARE_Key structure + for (byte i = 0; i < MFRC522::MF_KEY_SIZE; i++) { + key.keyByte[i] = knownKeys[k][i]; + } + // Try the key + if (try_key(&key)) { + // Found and reported on the key and block, + // no need to try other keys for this PICC + break; + } + } +} From 0d8d9a4f860a196f6760c8363d6023bdad79bb9c Mon Sep 17 00:00:00 2001 From: mdxs Date: Fri, 14 Nov 2014 07:01:58 +0100 Subject: [PATCH 21/96] Updated the Mifare Classic Value Block example --- .../MifareClassicValueBlock.ino | 514 ++++++++++++------ 1 file changed, 334 insertions(+), 180 deletions(-) diff --git a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino index 36244a6..1558e51 100644 --- a/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino +++ b/examples/MifareClassicValueBlock/MifareClassicValueBlock.ino @@ -1,202 +1,356 @@ /* - * MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. - * The library file MFRC522.h has a wealth of useful info. Please read it. - * The functions are documented in MFRC522.cpp. - * - * Based on code Dr.Leong ( WWW.B2CQSHOP.COM ) - * Created by Miguel Balboa (circuitito.com), Jan, 2012. - * Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.) - * Released into the public domain. - * - * This sample shows how to setup a block on a MIFARE Classic PICC to be in "Value Block" mode. - * In Value Block mode the operations Increment/Decrement/Restore and Transfer can be used. + * ---------------------------------------------------------------------------- + * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid + * for further details and other examples. * - ----------------------------------------------------------------------------- empty_skull - * Aggiunti pin per arduino Mega - * add pin configuration for arduino mega - * http://mac86project.altervista.org/ - ----------------------------------------------------------------------------- Nicola Coppola - * Pin layout should be as follows: - * Signal Pin Pin Pin - * Arduino Uno Arduino Mega MFRC522 board + * NOTE: The library file MFRC522.h has a lot of useful info. Please read it. + * + * Released into the public domain. + * ---------------------------------------------------------------------------- + * This sample shows how to setup blocks on a MIFARE Classic PICC (= card/tag) + * to be in "Value Block" mode: in this mode the operations Increment/Decrement, + * Restore and Transfer can be used. + * + * BEWARE: Data will be written to the PICC, in sector #1 (blocks #4 to #7). + * + * + * Typical pin layout used: * ------------------------------------------------------------ - * Reset 9 5 RST - * SPI SS 10 53 SDA - * SPI MOSI 11 51 MOSI - * SPI MISO 12 50 MISO - * SPI SCK 13 52 SCK - * - * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com. + * MFRC522 Arduino Arduino Arduino + * Reader/PCD Uno Mega Nano v3 + * Signal Pin Pin Pin Pin + * ------------------------------------------------------------ + * RST/Reset RST 9 5 D9 + * SPI SS SDA(SS) 10 53 D10 + * SPI MOSI MOSI 11 / ICSP-4 51 D11 + * SPI MISO MISO 12 / ICSP-1 50 D12 + * SPI SCK SCK 13 / ICSP-3 52 D13 */ #include #include -#define SS_PIN 10 -#define RST_PIN 9 -MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. +#define RST_PIN 9 // Configurable, see typical pin layout above +#define SS_PIN 10 // Configurable, see typical pin layout above +MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. + +MFRC522::MIFARE_Key key; + +/* + * Initialize. + */ void setup() { - Serial.begin(9600); // Initialize serial communications with the PC - SPI.begin(); // Init SPI bus - mfrc522.PCD_Init(); // Init MFRC522 card - Serial.println("Scan a MIFARE Classic PICC to demonstrate Value Blocks."); + Serial.begin(9600); // Initialize serial communications with the PC + SPI.begin(); // Init SPI bus + mfrc522.PCD_Init(); // Init MFRC522 card + + // Prepare the key (used both as key A and as key B) + // using FFFFFFFFFFFFh which is the default at chip delivery from the factory + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + + Serial.println("Scan a MIFARE Classic PICC to demonstrate Value Block mode."); + Serial.print("Using key (for A and B):"); + dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); + Serial.println(); + + Serial.println("BEWARE: Data will be written to the PICC, in sector #1"); } +/* + * Main loop. + */ void loop() { - // Look for new cards - if ( ! mfrc522.PICC_IsNewCardPresent()) { - return; - } + // Look for new cards + if ( ! mfrc522.PICC_IsNewCardPresent()) + return; - // Select one of the cards - if ( ! mfrc522.PICC_ReadCardSerial()) { - return; - } - // Now a card is selected. The UID and SAK is in mfrc522.uid. - - // Dump UID - Serial.print("Card UID:"); - for (byte i = 0; i < mfrc522.uid.size; i++) { - Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); - Serial.print(mfrc522.uid.uidByte[i], HEX); - } - Serial.println(); + // Select one of the cards + if ( ! mfrc522.PICC_ReadCardSerial()) + return; - // Dump PICC type - byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); - Serial.print("PICC type: "); - Serial.println(mfrc522.PICC_GetTypeName(piccType)); - if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI - && piccType != MFRC522::PICC_TYPE_MIFARE_1K - && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { - Serial.println("This sample only works with MIFARE Classic cards."); - return; - } + // Show some details of the PICC (that is: the tag/card) + Serial.print("Card UID:"); + dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); + Serial.println(); + Serial.print("PICC type: "); + byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); + Serial.println(mfrc522.PICC_GetTypeName(piccType)); - // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. - MFRC522::MIFARE_Key key; - for (byte i = 0; i < 6; i++) { - key.keyByte[i] = 0xFF; - } + // Check for compatibility + if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI + && piccType != MFRC522::PICC_TYPE_MIFARE_1K + && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { + Serial.println("This sample only works with MIFARE Classic cards."); + return; + } - // In this sample we use the second sector (ie block 4-7). - byte sector = 1; - byte valueBlockA = 5; - byte valueBlockB = 6; - byte trailerBlock = 7; - - // Authenticate using key A. - Serial.println("Authenticating using key A..."); - byte status; - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); - if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - - // We need a sector trailer that defines blocks 5 and 6 as Value Blocks and enables key B. - byte trailerBuffer[] = { 255,255,255,255,255,255, 0,0,0, 0, 255,255,255,255,255,255}; // Keep default keys. - // g1=6 => Set block 5 as value block. Must use Key B towrite & increment, A or B can be used for derement. - // g2=6 => Same thing for block 6. - // g3=3 => Key B must be used to modify the Sector Trailer. Key B becomes valid. - mfrc522.MIFARE_SetAccessBits(&trailerBuffer[6], 0, 6, 6, 3); - - // Now we read the sector trailer and see if it is like we want it to be. - Serial.println("Reading sector trailer..."); - byte buffer[18]; - byte size = sizeof(buffer); - status = mfrc522.MIFARE_Read(trailerBlock, buffer, &size); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - if ( buffer[6] != trailerBuffer[6] - && buffer[7] != trailerBuffer[7] - && buffer[8] != trailerBuffer[8]) { - Serial.println("Writing new sector trailer..."); - status = mfrc522.MIFARE_Write(trailerBlock, trailerBuffer, 16); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - } - - // Authenticate using key B. - Serial.println("Authenticating again using key B..."); - status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); - if (status != MFRC522::STATUS_OK) { - Serial.print("PCD_Authenticate() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - - // Value blocks has a 32 bit signed value stored three times and an 8 bit address stored 4 times. - // Make sure blocks valueBlockA and valueBlockB has that format. - formatBlock(valueBlockA); - formatBlock(valueBlockB); + // In this sample we use the second sector, + // that is: sector #1, covering block #4 up to and including block #7 + byte sector = 1; + byte valueBlockA = 5; + byte valueBlockB = 6; + byte trailerBlock = 7; + byte status; + byte buffer[18]; + byte size = sizeof(buffer); + long value; - // Add 1 to the value of valueBlockA and store the result in valueBlockA. - Serial.print("Adding 1 to value of block "); Serial.println(valueBlockA); - status = mfrc522.MIFARE_Increment(valueBlockA, 1); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Increment() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - status = mfrc522.MIFARE_Transfer(valueBlockA); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Transfer() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } - - // Dump the result - mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); - - // Halt PICC - mfrc522.PICC_HaltA(); + // Authenticate using key A + Serial.println("Authenticating using key A..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } - // Stop encryption on PCD - mfrc522.PCD_StopCrypto1(); + // Show the whole sector as it currently is + Serial.println("Current data in sector:"); + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // We need a sector trailer that defines blocks 5 and 6 as Value Blocks and enables key B + // The last block in a sector (block #3 for Mifare Classic 1K) is the Sector Trailer. + // See http://www.nxp.com/documents/data_sheet/MF1S503x.pdf sections 8.6 and 8.7: + // Bytes 0-5: Key A + // Bytes 6-8: Access Bits + // Bytes 9: User data + // Bytes 10-15: Key B (or user data) + byte trailerBuffer[] = { + 255, 255, 255, 255, 255, 255, // Keep default key A + 0, 0, 0, + 0, + 255, 255, 255, 255, 255, 255}; // Keep default key B + // The access bits are stored in a peculiar fashion. + // There are four groups: + // g[0] Access bits for block 0 (for sectors 0-31) + // or blocks 0-4 (for sectors 32-39) + // g[1] Access bits for block 1 (for sectors 0-31) + // or blocks 5-9 (for sectors 32-39) + // g[2] Access bits for block 2 (for sectors 0-31) + // or blocks 10-14 (for sectors 32-39) + // g[3] Access bits for the Sector Trailer: block 3 (for sectors 0-31) + // or block 15 (for sectors 32-39) + // Each group has access bits [C1 C2 C3], in this code C1 is MSB and C3 is LSB. + // Determine the bit pattern needed using MIFARE_SetAccessBits: + // g0=0 access bits for block 0 (of this sector) using [0 0 0] = 000b = 0 + // which means key A|B have r/w for block 0 of this sector + // which (in this example) translates to block #4 within sector #1; + // this is the transport configuration (at factory delivery). + // g1=6 access bits for block 1 (of this sector) using [1 1 0] = 110b = 6 + // which means block 1 (of this sector) is used as a value block, + // which (in this example) translates to block #5 within sector #1; + // where key A|B have r, key B has w, key B can increment, + // and key A|B can decrement, transfer, and restore. + // g2=6 same thing for block 2 (of this sector): set it to a value block; + // which (in this example) translates to block #6 within sector #1; + // g3=3 access bits for block 3 (of this sector): the Sector Trailer here; + // using [0 1 1] = 011b = 3 which means only key B has r/w access + // to the Sector Trailer (block 3 of this sector) from now on + // which (in this example) translates to block #7 within sector #1; + mfrc522.MIFARE_SetAccessBits(&trailerBuffer[6], 0, 6, 6, 3); + + // Read the sector trailer as it is currently stored on the PICC + Serial.println("Reading sector trailer..."); + status = mfrc522.MIFARE_Read(trailerBlock, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + // Check if it matches the desired access pattern already; + // because if it does, we don't need to write it again... + if ( buffer[6] != trailerBuffer[6] + && buffer[7] != trailerBuffer[7] + && buffer[8] != trailerBuffer[8]) { + // They don't match (yet), so write it to the PICC + Serial.println("Writing new sector trailer..."); + status = mfrc522.MIFARE_Write(trailerBlock, trailerBuffer, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + } + + // Authenticate using key B + Serial.println("Authenticating again using key B..."); + status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); + if (status != MFRC522::STATUS_OK) { + Serial.print("PCD_Authenticate() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + // A value block has a 32 bit signed value stored three times + // and an 8 bit address stored 4 times. Make sure that valueBlockA + // and valueBlockB have that format (note that it will only format + // the block when it doesn't comply to the expected format already). + formatValueBlock(valueBlockA); + formatValueBlock(valueBlockB); + + // Add 1 to the value of valueBlockA and store the result in valueBlockA. + Serial.print("Adding 1 to value of block "); Serial.println(valueBlockA); + status = mfrc522.MIFARE_Increment(valueBlockA, 1); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Increment() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + status = mfrc522.MIFARE_Transfer(valueBlockA); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Transfer() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + // Show the new value of valueBlockA + status = mifare_GetValue(valueBlockA, &value); + if (status != MFRC522::STATUS_OK) { + Serial.print("mifare_GetValue() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + Serial.print("New value of value of block "); Serial.print(valueBlockA); + Serial.print(" = "); Serial.println(value); + + // Decrement 10 from the value of valueBlockB and store the result in valueBlockB. + Serial.print("Subtracting 10 from value of block "); Serial.println(valueBlockB); + status = mfrc522.MIFARE_Decrement(valueBlockB, 10); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Decrement() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + status = mfrc522.MIFARE_Transfer(valueBlockB); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Transfer() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + // Show the new value of valueBlockB + status = mifare_GetValue(valueBlockB, &value); + if (status != MFRC522::STATUS_OK) { + Serial.print("mifare_GetValue() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + Serial.print("New value of value of block "); Serial.print(valueBlockB); + Serial.print(" = "); Serial.println(value); + // Check some boundary... + if (value <= -100) { + Serial.println("Below -100, so resetting it to 255 = 0xFF just for fun..."); + status = mifare_SetValue(valueBlockB, 255); + if (status != MFRC522::STATUS_OK) { + Serial.print("mifare_SetValue() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + } + + // Dump the sector data + mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); + Serial.println(); + + // Halt PICC + mfrc522.PICC_HaltA(); + // Stop encryption on PCD + mfrc522.PCD_StopCrypto1(); } -void formatBlock(byte blockAddr) { - Serial.print("Reading block "); Serial.println(blockAddr); - byte buffer[18]; - byte size = sizeof(buffer); - byte status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Read() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - return; - } +/* + * Helper routine to dump a byte array as hex values to Serial. + */ +void dump_byte_array(byte *buffer, byte bufferSize) { + for (byte i = 0; i < bufferSize; i++) { + Serial.print(buffer[i] < 0x10 ? " 0" : " "); + Serial.print(buffer[i], HEX); + } +} - if ( (buffer[0] == (byte)~buffer[4]) - && (buffer[1] == (byte)~buffer[5]) - && (buffer[2] == (byte)~buffer[6]) - && (buffer[3] == (byte)~buffer[7]) - - && (buffer[0] == buffer[8]) - && (buffer[1] == buffer[9]) - && (buffer[2] == buffer[10]) - && (buffer[3] == buffer[11]) - - && (buffer[12] == (byte)~buffer[13]) - && (buffer[12] == buffer[14]) - && (buffer[12] == (byte)~buffer[15])) { - Serial.println("Block has correct Block Value format."); - } - else { - Serial.println("Writing new value block..."); - byte valueBlock[] = { 0,0,0,0, 255,255,255,255, 0,0,0,0, blockAddr,~blockAddr,blockAddr,~blockAddr }; - status = mfrc522.MIFARE_Write(blockAddr, valueBlock, 16); - if (status != MFRC522::STATUS_OK) { - Serial.print("MIFARE_Write() failed: "); - Serial.println(mfrc522.GetStatusCodeName(status)); - } - } -} // End formatBlock() +/* + * Helper routine to read the current value from a Value Block. + */ +byte mifare_GetValue(byte blockAddr, long *value) { + byte status; + byte buffer[18]; + byte size = sizeof(buffer); + + status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status == MFRC522::STATUS_OK) { + *value = (long(buffer[3])<<24) | (long(buffer[2])<<16) | (long(buffer[1])<<8) | long(buffer[0]); + } + return status; +} + +/* + * Helper routine to write a value into a Value Block. + */ +byte mifare_SetValue(byte blockAddr, long value) { + byte buffer[18]; + + // Translate the long into 4 bytes; repeated 2x in value block + buffer[0] = buffer[ 8] = (value & 0xFF); + buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8; + buffer[2] = buffer[10] = (value & 0xFF0000) >> 16; + buffer[3] = buffer[11] = (value & 0xFF000000) >> 24; + // Inverse 4 bytes also found in value block + buffer[4] = ~buffer[0]; + buffer[5] = ~buffer[1]; + buffer[6] = ~buffer[2]; + buffer[7] = ~buffer[3]; + // Address 2x with inverse address 2x + buffer[12] = buffer[14] = blockAddr; + buffer[13] = buffer[15] = ~blockAddr; + + // Write the whole data block + return mfrc522.MIFARE_Write(blockAddr, buffer, 16); +} + +/* + * Ensure that a given block is formatted as a Value Block. + */ +void formatValueBlock(byte blockAddr) { + byte buffer[18]; + byte size = sizeof(buffer); + byte status; + + Serial.print("Reading block "); Serial.println(blockAddr); + status = mfrc522.MIFARE_Read(blockAddr, buffer, &size); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Read() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + return; + } + + if ( (buffer[0] == (byte)~buffer[4]) + && (buffer[1] == (byte)~buffer[5]) + && (buffer[2] == (byte)~buffer[6]) + && (buffer[3] == (byte)~buffer[7]) + + && (buffer[0] == buffer[8]) + && (buffer[1] == buffer[9]) + && (buffer[2] == buffer[10]) + && (buffer[3] == buffer[11]) + + && (buffer[12] == (byte)~buffer[13]) + && (buffer[12] == buffer[14]) + && (buffer[12] == (byte)~buffer[15])) { + Serial.println("Block has correct Value Block format."); + } + else { + Serial.println("Formatting as Value Block..."); + byte valueBlock[] = { + 0, 0, 0, 0, + 255, 255, 255, 255, + 0, 0, 0, 0, + blockAddr, ~blockAddr, blockAddr, ~blockAddr }; + status = mfrc522.MIFARE_Write(blockAddr, valueBlock, 16); + if (status != MFRC522::STATUS_OK) { + Serial.print("MIFARE_Write() failed: "); + Serial.println(mfrc522.GetStatusCodeName(status)); + } + } +} From 667a20fd22e35e441782d484fa7afdd913b2702c Mon Sep 17 00:00:00 2001 From: mdxs Date: Sat, 15 Nov 2014 00:03:33 +0100 Subject: [PATCH 22/96] Adding image for RFID-RC522 module --- doc/fritzing/RFID-RC522-v2.png | Bin 0 -> 30070 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/fritzing/RFID-RC522-v2.png diff --git a/doc/fritzing/RFID-RC522-v2.png b/doc/fritzing/RFID-RC522-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..4444909be37f567a01042e6a63ac963b51e6c05c GIT binary patch literal 30070 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 F{{ch{0 Date: Sat, 15 Nov 2014 00:04:29 +0100 Subject: [PATCH 23/96] Adding image for Uno with RFID-RC522 --- .../Arduino-Uno-r3-with-RFID-RC522.png | Bin 0 -> 289125 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.png diff --git a/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.png b/doc/fritzing/Arduino-Uno-r3-with-RFID-RC522.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5f59d9249ad73417121c035ef90600dac7ea7d GIT binary patch literal 289125 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