2014年10月23日 星期四

{ HZ1050 } WIEGAND ( 韋根 ) 26 / 34 介紹

HZ-1050 125KHz RFID 讀卡器模組學習套件可至露天賣場訂購:
詳細的介紹,請上露天賣場。



在 HZ-1050 125KHz RFID 讀卡器模組 ( 文中簡稱 HZ1050 ) 上方,根據跳線帽對 Wiegand Code ( 文中稱韋根碼 ) 的設定,可以讓 HZ1050 由 D0 與 D1 兩根接腳輸出韋根 24 或韋根 34 格式的編碼:

D0 與 D1 一般時候為高準位 ( HIGH ),要輸出 bit 為 1 時,D1 拉低準位,D0 維持高準位;要輸出 bit 為 0 時,D0 拉低準位,D1 維持高準位。

所以要讀取韋根碼,使用接腳中斷的方式偵測負緣 ( 或稱為降緣,Falling Edge ) 觸發,可以很容易的達到這個目的。


在談論到韋根碼之前,先來說明一下 EM 卡 ( HZ1050 使用 EM4100 和 EM4001 的 RFID 卡,簡稱 EM 卡 )  上面的號碼與韋根碼之間的換算。


卡號與韋根碼的換算:

假設有一片EM 卡,前面 10 碼 0002262506 與後面 3+5 碼 034,34282,都是 10 進位。
EM 卡片型
用小算盤將前面 10 碼換算成 16 進位,可得到下面四個 Byte (位元組) 的 16 進制碼

2262506 = 0x002285EA

然後將計算出來的 16 進位的數字作如下計算,就可以得到卡片上 3 + 5 的號碼

0x22 = 034
85EA = 34282

再看一下套件中所附的鑰匙卡的號碼,一般都只標示出 10 位數字在上面,如下圖

同樣的,利用上面講的方式就可以算出 3 + 5 的號碼。

算這兩個號碼有什麼特別的意思 ? 首先,10 碼十位數換算成 4 個位元組的 16 進制碼,當使用 UART 方式接收來自 HZ1050 的 TXD 訊號時,輸出的號碼就是這四個位數,也就是會在 COM 埠看到輸出是

00 22 85 EA

這四個 16 進位值。因此要在程式中處理,必須先知道這四個值所代表的意思是什麼,才能接著下去處理;這與其他 RFID 讀取器模組接收 UART 資料的格式是不一樣的,所以請先了解 ,這輸出的格式會用在實際範例的說明中。


緊接著,再來了解一下韋根 26 與韋根 34 的格式。


韋根 26 / 34 ( Wiegand 26 / 34 ):

26 與 34 顧名思義簡單的說:就是輸出的 bit 數目。這些 bit 的組成,代表了 EM 卡 的 Facility Code 和 Card Cord。

看下圖每個字元 ( BIT ) 所代表的組別與意思:

F:代表 Facility Code
C:代表 Card Code
E:對於WIEGAND 26 來說,BIT 2 - 13 所有 1 的數目加起來必須是偶數,若不是 ! 則將 BIT 1 ( E )  設為 1,使得 1 的個數加起來為偶數,這就是這位元的用處;對於WIEGAND 34 來說,這位元就是 BIT 2 - 17 的偶同位補位位元。
O:反之,對於這一位元來說就是奇同位補位位元。對於 WIEGAND 26 來說,BIT 26 是 BIT 10 - 25 的奇數補位位元;對於 WIEGAND 34 來說,BIT 26 是 BIT 18 - 33 的奇數補位位元。


韋根 26 讀取時,若不使用 Facility Code,則 W26 的格式就變成

E eeee eeee eeee oooo oooo oooo O

空白只是為了位元辨識方便,不需要考慮!只需要考慮前後的奇偶同位元將其全部轉成卡號即可;若考慮到 Facility Code,則 W26 的格式就變成

E FFFF FFFF CCCC CCCC CCCC CCCC O

BIT 2 – 9 表示 Facility Code,BIT 10 – 25 表示 Card Code。

所以韋根 26 所能讀到的 10 碼數字最大就是:1677215 = 0x00FFFFFF


Wiegand 34 讀取時,若不使用 Facility Code,則 W34 的格式就變成

E eeee eeee eeee eeee oooo oooo oooo oooo O

空白只是為了位元辨識方便,不需要考慮!需要考慮前後的奇偶同位元,將其全部轉成卡號;若考慮到 Facility Code,則 W34 的格式就變成

 E FFFF FFFF FFFF CCCC CCCC CCCC CCCC CCCC O

BIT 2 – 13 表示 Facility Code,BIT 14 – 33 表示 Card Code。

所以韋根 26 所能讀到的 10 碼數字最大就是:4294967295 = 0xFFFFFFFF


在接下來的 Arduino 與 Raspberry Pi 的範例中,範例程式碼將不去考慮 Facility Code,而是直接將讀到的位元全部轉成 Card Code 來做處理;若考慮加入 Facility Code 來做比對,請利用所提供的原始碼做修改即可,轉換上不困難 !!!



<< 部落格 HZ-1050,125KHz RFID 讀卡器模組相關網頁連結 >>

沒有留言:

張貼留言