Arduino MFRC522讀卡并驗證
Arduino操作RC522模塊讀寫,由于RC522庫并不簡單,操作有那么一些繁瑣,Arduino IDE又無法看到注釋,新接觸也就不好上手。以前剛接觸RC522時,摸例程幾天,才讀取出來ic卡。
那時候想做一個手機nfc門禁,查資料發(fā)現(xiàn)RC522比較常用,就買了一個,到手什么也不懂,(沒有了解ic卡讀卡,寫卡流程)就直接接線開始搗鼓,結(jié)果搗鼓大半天,也沒懂怎么操作。
還是先看一下讀卡寫卡流程吧!
要讓RC522工作起來,必須的順序是:尋卡--->防沖撞--->選卡---->讀/寫卡
以M1卡片為例
M1卡分為16個扇區(qū),每個扇區(qū)為4塊,每塊16個字節(jié),以塊為存取單位。每個扇區(qū)的塊0、塊1、塊2為數(shù)據(jù)塊,可用于存儲數(shù)據(jù)。而每個扇區(qū)的塊3為控制塊,包括密碼keyA,存取控制,密碼keyB。存取控制的作用是控制對應(yīng)扇區(qū)記錄的讀寫權(quán)限與keyA和keyB的關(guān)系。

其中讀寫卡片中的數(shù)據(jù)步驟是:
------>選擇塊(16個扇區(qū),每個扇區(qū)對應(yīng)4個塊,就一共有64個塊)
------>驗證密鑰A或B(控制塊決定)
------>驗證成功后讀或?qū)懭霐?shù)據(jù)(如果寫入密鑰塊,那此扇區(qū)的密鑰就被改變,下次讀取時需要驗證新的密鑰,控制位不要輕易改變,負責(zé)此扇區(qū)可能成為死扇區(qū))

其實搞懂了也就感覺沒什么難度了。
好不容易搞懂了讀寫,數(shù)據(jù)可以打印出來了。但是光打印出來沒有用啊,得會比較。那時候Arduino剛玩不久,c一點都不會,代碼完全就是靠復(fù)制,粘貼,像比較數(shù)據(jù)這種,完全懵逼,不知道怎么操作。那怎么辦捏,翻帖子唄,到處翻,有關(guān)RC522的就進去瞄一眼,搜各種關(guān)鍵詞,但是結(jié)果都是怎么讀寫,學(xué)習(xí)例程,沒有關(guān)于怎么比較的帖子,最后bibi看視頻,有個up主給了我方法
其實也蠻簡單,就是for循環(huán)對比,比一個校驗值加一個,校驗值=16,就是比對成功。
可是就是這給代碼,我當時研究了半天,不懂buffer是什么,為什么跟它比較就可以了。
那時候buffer有一個注釋,叫緩沖區(qū),這個單詞的意思就是緩沖區(qū),當時很懵逼緩沖區(qū)是什么東西,不懂意思(菜的一批),但是也沒多管,能跑就行了嘛!管他怎么跑起來的。

大概就是這樣吧!非常形象,簡直了。后來明白了,就是一個數(shù)據(jù)緩存的地方,RC522讀取到的數(shù)據(jù),緩存到里面,然后要讀取數(shù)據(jù),就從里面讀出來。只不過是一個數(shù)組,那時候還只能看懂基本變量,看到一個數(shù)組就懵逼了(菜)。
那時候也看到許多帖子是用UID做比較的,當時想,做門禁嘛,安全最重要,就死磕這。
今天重新玩了一下RC522模塊,發(fā)現(xiàn)還有人問怎么比較數(shù)據(jù),那就放大招吧!
一個庫,直接把執(zhí)行操作填寫到回調(diào)函數(shù),不用管怎么讀寫,怎么驗證。
此庫采用UID+密鑰+扇區(qū)塊認證,三重驗證,安全妥妥的。

庫函數(shù)代碼:鏈接:https://pan.baidu.com/s/1g0s7FyoR5MeXF8uprNJsAA?提取碼:k59t