Presentation is loading. Please wait.

Presentation is loading. Please wait.

第十七章 RFID無線識別裝置 認識RFID RFID的類型 13.56MHz Mifare RFID-RC522模組介紹

Similar presentations


Presentation on theme: "第十七章 RFID無線識別裝置 認識RFID RFID的類型 13.56MHz Mifare RFID-RC522模組介紹"— Presentation transcript:

1

2 第十七章 RFID無線識別裝置 認識RFID RFID的類型 13.56MHz Mifare RFID-RC522模組介紹
操控Mifare模組的MFRC522程式庫 Mifare Classic 1KB的記憶體結構 認識C語言的結構(struct)

3 認識RFID RFID是記載唯一編號或其他資料的晶片,並且使用無線電傳輸資料的技術統稱,全名是無線射頻辨識(Radio Frequency IDentification)。 一套RFID系統由讀卡機(Reader)、電子標籤(Tag)和主控端(Host)三大部分組成。 參閱 17-3

4 RFID的類型(一) 底下是RFID系統的運作方式簡圖,電子標籤通常無內建電源(也稱為「無源」或「被動式」),標籤所需的電力來自讀寫器的電磁場。 底下是三種RFID標籤的封裝形式: 參閱 17-4

5 RFID的類型(二) 用電源系統區分,可分成兩種: 被動式標籤(Passive Tag):也稱為無源標籤,無需使用電池。
主動式標籤(Active Tag):也稱為有源標籤,內含電池,無線電傳送距離較長(33公尺以上)。 用記憶體類型區分,可分成三種: 唯讀:晶片製造廠在出廠時已寫入資料。 僅能寫入一次,可多次讀取(Write-once, read many,簡稱WORM):配合「可寫入」資料的讀卡機,用戶能自行寫入資料一次。 可重複讀取和寫入:可重複寫入資料,方便標籤回收再利用。停車場和捷運使用的晶片卡及悠遊卡,都屬於這一類。為了防止資料被任意竄改,這種晶片通常具有授權與加密處理功能。 市面上比較容易買到的RFID模組頻率是125KHz和13.56MHz。 參閱 17-5

6 125KHz RFID模組介紹 選購RFID模組時,需要留意底下幾項規格: 輸入電壓:5V或3.3V。
無線通訊頻率和協定:通常是125KHz或13.56MHz,彼此並不相容。 資料介面 參閱 17-7

7 13.56MHz Mifare RFID-RC522模組介紹
Mifare(讀音:my-fare)是NXP(恩智普)半導體公司推出的非接觸型IC卡,載波頻率13.56MHz。 Mifare卡內建EEPROM、具備「防衝突處理」機制。 停車場感應幣以及RFID模組套件包含的RFID實驗卡,都是“Mifare Classic”類型,其內部的EEPROM記憶體容量為1KB。 參閱 17-9

8 讀取Mifare RFID卡的 UID碼 Mifare屬於接近式,這種類型的卡片簡稱為PICC(Proximity IC Card,接近式IC卡),讀寫器則簡稱PCD(Proximity Coupling Device,接近型耦合器),每張Mifare卡片都有個唯一識別碼(unique identifier,簡稱UID)。 參閱 17-10

9 操控Mifare模組的MFRC522程式庫 本單元程式採用Miki Balboa開發的這個MFRC522程式庫來操控Mifare模組。
MFRC522物件.PCD_Init():初始化MFRC522讀卡機模組 MFRC522物件.PICC_IsNewCardPresent():是否感應到新的卡片 MFRC522物件.PICC_ReadCardSerial():讀取卡片的資料 MFRC522物件.PICC_GetType():取得卡片類型 MFRC522物件.PICC_GetTypeName():取得卡片類型名稱 UID(唯一識別碼)的長度和內容,可從底下兩個屬性值取得: MFRC522物件.uid.size:包含UID的長度 MFRC522物件.uid.uidByte:包含UID碼的陣列 參閱 17-11

10 讀取Mifare卡片的UID碼 讀取Mifare卡片的流程如下,讀寫器在操作卡片時,都會經過三次雙向認證,互相驗證使用的合法性,而且通訊過程中的所有數據都經過加密,以確保安全。 SAK代表select acknowledge(選擇應答),是由卡片發給讀寫器,對於選擇卡片命令的回應。Mifare Classic的SAK值為0x18。 參閱 17-12

11 讀取Mifare卡片的UID碼:程式片段
// 確認是否有新卡片 if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { byte *id = mfrc522.uid.uidByte; // 取得卡片的UID byte idSize = mfrc522.uid.size; // 取得UID的長度 22. Serial.print("PICC type: "); // 顯示卡片類型 // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型 MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); 27. Serial.print("UID Size: "); // 顯示卡片的UID長度值 Serial.println(idSize); 參閱 17-13 程式第20行宣告一個指向儲存UID值的指標變數(假設UID碼的長度為4): 第25行的“MFRC522::PICC_Type”代表引用在MFRC522類別(程式庫)裡面定義的PICC_Type這個資料類型,其中的雙冒號(::)是C++語言的範圍解析運算子(scope-resolution operator),用來表示“PICC_Type”定義在MFRC522程式庫裡面。如果不用雙冒號指出“PICC_Type”資料類型的來源,程式編譯器會產生未定義之類的錯誤。

12 Mifare RFID門禁系統實驗 本單元將說明紀錄以及比對RFID碼的程式,並且採用一個伺服馬達來模擬旋轉門鎖的動作。 參閱 17-15

13 認識C語言的結構(struct) 結構能儲存一組包含不同類型的資料,以製冰盒來比喻,陣列的冰塊都是相同樣式;結構的冰塊可以不同: 參閱
17-16 使用結構之前,要事先定義它所能儲存資料內容,相當於規劃容器的「藍圖」。

14 認識C語言的結構(二) 結構定義完畢後,就可以填入資料,這個步驟稱為「初始化結構資料」。 參閱 17-17
struct RFIDTag tags[] = { {{60,209,110,133}, "Arduino"}, // 請自行修改UID碼 {{212,211,192,97}, "Raspberry Pi"}, {{21,8,10,83}, "Espruino"} }; 參閱 17-17 存取結構裡的成員的語法如右,取出tag裡的name資料:

15 使用typedef指令自訂資料類型 typedef指令能將現有的資料類型改成自訂的名稱,通常用於簡化類型名稱。 參閱 17-18

16 Mifare Classic 1KB的記憶體結構(一)
記憶體空間被劃分成16個區段(sector),每個區段有4個區塊(block),區段0的區塊0包含卡片的唯一識別碼(UID,也稱為「製造商識別碼」,Manufacturer Code)。 參閱 17-22

17 Mifare Classic 1KB的記憶體結構(二)
控制區塊包含金鑰A和金鑰B兩組密碼(各6位元組),以及存取控制位元(4位元組,但僅使用前3位元組)。 參閱 17-23 金鑰B預設是可見的,金鑰A則因為安全考量,在掃描時,全部顯示成00。存取控制位元用於控制區段裡的每個區塊(區塊0到區塊3)是否能被存取、寫入或其他操作,並且決定要透過金鑰A或金鑰B來驗證。0xFF0780是控制區塊的「出廠預設值」,代表: 金鑰A不可見; 若通過金鑰A或金鑰B驗證,即可讀取或寫入該區段的區塊0~2。 若通過金鑰A驗證,可讀取或改寫存取該區段的存取控制位元和金鑰B,也能改寫金鑰A。

18 傾印Mifare卡片資料 執行Arduino主功能表的「檔案→範例→MFRC522→DumpInfo」,開啟DumpInfo(傾印卡片資料)範例程式。 參閱 17-24

19 讀取與寫入資料到Mifare卡片 本單元使用到的MFRC522程式物件的方法和屬性:
MFRC522物件.PCD_Authenticate():驗證金鑰,相當於比對輸入密碼和卡片裡的密碼,唯通過驗證才能存取卡片資料。 MFRC522物件.GetStatusCodeName():取得狀態碼的名稱 MFRC522物件.PICC_DumpMifareClassicSectorToSerial():在序列埠監控視窗顯示指定的區段內容 MFRC522物件.MIFARE_Read():讀取指定區塊的內容 MFRC522物件.MIFARE_Write():在指定區塊寫入資料 參閱 17-25

20 驗證金鑰 PCD_Authenticate()方法的語法如下,金鑰值和卡片的唯一識別碼,都必須透過位址引用(亦即,在參數前面加上&符號),而非直接傳入數值。 控制區塊以及資料區塊的編號值介於0~63。以讀、寫區段1的區塊1為例,此區段的控制區塊編號為7;區塊1的編號為5。 參閱 17-26

21 讀取區塊的方法 讀取區塊資料的核心敘述如下,請先設定一個儲存讀取值的陣列變數,雖然區塊資料的長度是16位元組,但是MFRC522程式庫規定至少需要準備18位元組大小的陣列來存放讀取值;讀取和寫入區塊資料的方法也會傳回狀態碼。 參閱 17-28


Download ppt "第十七章 RFID無線識別裝置 認識RFID RFID的類型 13.56MHz Mifare RFID-RC522模組介紹"

Similar presentations


Ads by Google