740 likes | 1.05k Views
第九章、儲值扣款系統開發. 本章教導 RFID Mifare 系統之開發,針對 MIFARE 卡片規格、資料讀取方式與資料寫入等方式進行介紹。因為各家讀取器廠商硬體的呼叫方式等不盡相同,因此在程式上使用者恐無法完全轉移,但是只要您使用的是標準的 MIFARE 卡片,裡面所介紹的觀念與架構都是相同的,您只要詢問硬體廠商是否有提供這樣的使用介面就可以。本章所使用的設備為 PROMAG PCR-310 。. 大 綱. 9-1 MIFARE 規格 9-2 MIFARE 讀寫資料 9-3 餐廳小額消費應用. 儲值扣款系統開發.
E N D
第九章、儲值扣款系統開發 本章教導RFID Mifare系統之開發,針對MIFARE卡片規格、資料讀取方式與資料寫入等方式進行介紹。因為各家讀取器廠商硬體的呼叫方式等不盡相同,因此在程式上使用者恐無法完全轉移,但是只要您使用的是標準的MIFARE卡片,裡面所介紹的觀念與架構都是相同的,您只要詢問硬體廠商是否有提供這樣的使用介面就可以。本章所使用的設備為PROMAG PCR-310。
大 綱 • 9-1 MIFARE 規格 • 9-2 MIFARE 讀寫資料 • 9-3 餐廳小額消費應用
儲值扣款系統開發 • RFID技術除了可以做到唯一辨識外,與條碼最重要的不同之處在於可以攜帶資訊,因此可以完成使用卡片(悠遊卡)坐捷運與購物消費等動作,這也是RFID應用市場上兵家未來爭奪的戰場之ㄧ • 本章針對RFID中標準的ISO 14443A卡片,或稱為MIFARE卡片的讀寫資料進行介紹
MIFARE 規格 • MIFARE最早是由飛利浦(Philips)公司所研發的電子標籤規格,後來被收錄變成ISO14443的標準。總共分成三種規格,分別是MIFARE 1、MIFARE UltraLight與MIFARE ProX,使用的是13.56 MHz,傳輸速度為106 K bit/sec,以下針對MIFARE 1進行介紹
MIFARE 規格 • MIFARE 1有可以分成S50與S70兩種,主要差異在記憶體大小,S50為1K Bytes(實際是1024 Bytes),S70為4K Bytes(實際是4096 Bytes),您可以依據不同應用選擇不同規格。這樣的記憶體區塊怎麼使用呢?全部一起?還是要劃分管理?怎麼劃分怎麼管理?飛利浦公司制定了一套規則來進行管理
MIFARE 規格 • 管理方式採用Sector與Block方式進行管理,其實就是表格式管理,表格有分列(row)與欄(row),也就是先把一個空白表格劃分出列後,再從列裡面去切割欄,如圖9-1所示
空白表格 分割出三列 每列分割出六欄 圖9-1、表格分割圖
MIFARE 規格 • 請把「空白表格」想像是MIFARE未分割前的全部記憶體區塊,現在開始進行劃分,如同表格先劃分列,但我們將其稱為「Sector」,最後對每個「Sector」再劃分出「Block」,這就完成了記憶體區塊的劃分管理作業。以S50為例,全部記憶體是1K Bytes,總共被劃分成16個Sector,每個Sector又劃分成4個Block,所以完成後的分割圖如圖9-2
MIFARE 規格 • 總共分成16個Sector,64個Block,每個Sector是64 Bytes,而每個Block為16 Bytes,同時將每個Block進行編號,從B0開始編號,一直到B63。其中B0被保留用來存放標籤的唯一辨識碼,這個辨識碼是出場時就指定,使用者無法更改
MIFARE 規格 • 當您要讀取某個Sector內的Block時,需要通過兩組認證的密碼,稱之為KEY A與KEY B,這兩組密碼存放在每個Sector的最後面一個Block,也就是B3、B7、B11…等位置 • 而讀卡機本身內部也會儲存有KEY A與KEY B,KEY A是主要的驗證值,KEY B則為選擇性,也就是可以設定只驗證KEY A或是KEY A/KEY B同時都驗證
MIFARE 規格 • 當讀卡機要讀取資料時,會先比對自己的KEY A/KEY B是否與要讀取的Block所屬Sector的KEY A/KEY B相同,如果不同是無法進行資料讀取與寫入作業,也確保了標籤內資料的安全性。但是B0內的卡號資料讀取是不需要經過KEY A/KEY B驗證的,這部份是開放讀取的,標籤出場時預設的KEY A/KEY B為FFFFFFFFFFFF
MIFARE 讀寫資料 • MIFARE標籤資料的讀寫流程如圖9-3所示,首先由讀取器向電子標籤發出讀取請求,卡片會回應「Ready」與型態,確定標籤沒有損壞,可以繼續進行下一步動作
對卡片提出讀取需求 判定卡片種類 讀取卡號 (Block 0) 選擇Sector 進行KEY A/KEY B認證 通過 未通過 選擇Block 讀取資料 寫入資料 圖9-3、MIFARE資料讀寫流程圖
MIFARE 讀寫資料 • 如果有需要讀取卡號,此時就可以進行卡號(位於Block 0)讀取作業;如果不需要卡號,則可以直接選擇您要讀取的Sector段落,接著進行KEY A/B的認證,通過認證才可以再選擇該Sector段落內的某個Block進行資料讀取與寫入作業
MIFARE 讀寫資料 • 用程式實作圖9-3的MIFARE資料讀寫流程 • 如圖9-4是系統啟動畫面,首先需要做的就是讓系統與硬體讀寫器連線,右下方有「偵測讀取器」按鈕,可以針對連接埠進行自動掃描。多數硬體廠商都有提供這部份的API介面供使用者開發系統使用,讀者只要呼叫該API介面就可以自動與硬體做連線
MIFARE 讀寫資料 • 如果電腦與讀取器連接正確,系統將可以順利偵測到該讀取器,並顯示出其連接位置,如圖9-5的視窗標題,目前連接位置在COM 13。同時就可以開始透過讀寫器對電子標籤送出「讀取需求」,或事先設定讀取器內的「KEY A/B」,如此才擁有可以對卡片內的Sector與Block做出讀取的權利
MIFARE 讀寫資料 • 如果讀取器與電子標籤內的Key A/B設定不符或是電子標籤損壞都可能造成讀取錯誤,如圖9-6所示,讀寫器對電子標籤發出讀取命令,但等不到電子標籤回應,畫面將出現「No Tag Error」,就無法進行下一個動作
MIFARE 讀寫資料 • 如果讀寫器的讀寫需求有得到電子標籤的正常回應,畫面將顯示電子標籤的種類,例如圖9-7的「MIFARE 1K」,代表的是目前正在讀取MIFARE S50規格的電子標籤。接著可以進行電子標籤辨識碼或是記憶體內資料的讀寫動作
MIFARE 讀寫資料 • 接著,可以在不需要Key A/B的狀況下讀取Sector 1/Block 0內的標籤識別碼,如圖9-8所示,讀取到的辨識碼共有八位,為「7D9C8176」。往下就可以針對標籤內記憶體的資料作讀寫的作業,所以要先選擇要讀取與寫入的位置,如圖9-2的規劃
MIFARE 讀寫資料 • 要讀取某個Sector內的資料,需要先經過該Sector最後一個Block內Key A/B與讀寫器內的Key A/B做比對認證,所以如圖9-9,我們針對Sector1做讀取,所以選擇Sector 1,並且只認證Key A
圖9-9、選擇讀取電子標籤內Sector 1內資料之畫面
MIFARE 讀寫資料 • 其次,我們在圖9-10中選擇「認證KEY A/B」,如果讀寫器內的Key A/B與Sector1 內Block 3(圖9-2中的編號為B7)的Key A/B相同,則會出現pass的字樣,代表現在可以讀取Sector1內的第一個(Block 0)至第三個Block(Block 2)內的資料
MIFARE 讀寫資料 • 圖9-11中我們選擇讀取Sector 1/Block 1內的資料,選擇完成Block後,按下「讀出資料」,就可以將裡面的資料讀取出來,如果沒有的話就是空的,這裡提供十六進制(Hex)與文字(Text)兩種格式
MIFARE 讀寫資料 • 相反於讀取,我們也可以將資料寫入,如圖9-12所示,在原本裡面沒有資料的Sector 1/ Block 1中寫入數值120,如果寫入成功,在寫入資料的流程上會出現ok字樣
MIFARE 讀寫資料 • 此時,再重新讀取Sector 1/ Block 1內的資料時,將出現上次寫入的數字120,如圖9-13所示,確認寫入動作成功
MIFARE 讀寫資料 • 針對「設定讀取器KEY A/B」按鈕,設計如圖9-14的畫面,使用者可以針對每個Sector設定自己需要的Key A/B進入到讀取器,當然這個部份需要與標籤內原先的設定要相同才可以讀取標籤資料。所有MIFARE電子標籤出場時的Sector Key A/B都是「FFFFFFFFFFF」
MIFARE 讀寫資料 • 此時,我們故意更改Sector 1內的Key A值,變成如圖9-15的新值,並且儲存到讀寫器內 • 接著,我們再一次遵循上面的步驟讀取Sector 1/ Block 1的值,可是當我們在進行「認證KEY A/B」時,會發現出現KEY ERROR字樣,問題就在於電子標籤內Sector 1的Key A與讀寫器內儲存的Sector 1 Key A不相同所導致
圖9-15、設定讀取器內讀取標籤Sector 1 Key A/B之畫面
餐廳小額消費應用 • 本節中我們使用MIFARE ISO 14443A卡片設計一個餐廳小額儲值扣款系統,我們將會員的基本資料如姓名、電話與金額分別寫入卡片內的Sector 1/Block 0、Sector 1/Block 1與Sector 1/Block 2內,未來讀者可以自行規劃您系統應用時卡片的資料儲存位置
餐廳小額消費應用 • 首先,使用本系統需要有帳號密碼,方便店長或是工讀生等人使用,同時也是基於安全考量,如圖9-17所示,需要輸入正確的帳號與密碼後才可以進入主系統
餐廳小額消費應用 • 如果帳號與密碼都正確,將進入到主系統畫面,如圖9-18所示,分成有會員資料、卡片加值、產品編輯、銷售紀錄與點餐扣款等五大部分 • 使用系統前,需要將系統與讀寫器連線,也就是要先驅動讀寫器,如圖9-19所示 • 成功驅動讀寫器的畫面如圖9-20所示,畫面上會出現讀寫器的型號與連接埠位置,此時就可以進行儲值、扣款與卡片資料維護等的作業
圖9-20、小額消費系統MIFARE讀寫器驅動成功畫面圖9-20、小額消費系統MIFARE讀寫器驅動成功畫面