Wiegand(韋根)協(xié)議是由摩托羅拉公司定制的一種通訊協(xié)議,它適用于涉及門禁控制系統(tǒng)的讀卡器和卡片的許多特性。韋根數(shù)據(jù)輸出由兩條數(shù)據(jù)線DATA0和DATA1,和公共的信號(hào)地GND組成。在沒(méi)有數(shù)據(jù)輸出時(shí),DATA0和DATA1都保持高電平(典型為+5V電平),若輸出'0'時(shí),DATA0輸出低脈沖而DATA1保持為高電平,輸出'1'時(shí),DATA1輸出低脈沖而DATA0保持為高。典型的低脈沖寬度為50us,輸出每一bit之前的間隔為1ms(如下圖,實(shí)際的信號(hào)電平和時(shí)序由實(shí)際的韋根讀卡器決定)。

韋根協(xié)議包含很多種格式來(lái)傳輸串行數(shù)據(jù),英創(chuàng)公司工控主板支持最常用的韋根26 bit和韋根34 bit格式。
韋根26是已經(jīng)廣泛使用的工業(yè)標(biāo)準(zhǔn),一個(gè)“韋根包”有26位數(shù)據(jù),第1位為第1到第13位的偶檢驗(yàn),最后1位為第14到第26位的奇校驗(yàn)。中間24位為數(shù)據(jù)位。

韋根26格式定義
對(duì)于韋根34格式,即一個(gè)“韋根包”有34位數(shù)據(jù),第1位為第1到第17位的偶檢驗(yàn),最后1位為第18到第34位的奇校驗(yàn)。中間32位為數(shù)據(jù)位。
英創(chuàng)公司在WinCE內(nèi)核中添加了韋根協(xié)議解析的設(shè)備驅(qū)動(dòng)程序,應(yīng)用程序只需要打開(kāi)"WIG1:"設(shè)備,然后調(diào)用DeviceIoControl等待驅(qū)動(dòng)程序返回(調(diào)用DeviceIoControl,應(yīng)用程序會(huì)掛起,不會(huì)占用CPU資源),當(dāng)驅(qū)動(dòng)程序接收到韋根數(shù)據(jù)后,會(huì)自動(dòng)檢查奇偶校驗(yàn),然后由DeviceIoControl返回接收情況,可能返回的原因有:
#defineWG_DATA_VALID 0 // 接收到有效的韋根數(shù)據(jù)
#defineWG_PARITY_ERROR 1 // 奇偶校驗(yàn)錯(cuò)誤
#defineWG_TIMEOUT 2 // 接收數(shù)據(jù)超時(shí)
#defineWG_BIT_LENGTH_ERROR 3 // 不能識(shí)別的韋根格式
如果DeviceIoControl返回為0(WG_DATA_VALID),表示接收到有效的韋根數(shù)據(jù),應(yīng)用程序通過(guò)ReadFile函數(shù)從驅(qū)動(dòng)讀取數(shù)據(jù),如果讀回3個(gè)字節(jié),表示為韋根 26格式,如果讀回4字節(jié),表示韋根 34格式。ReadFile讀回的數(shù)據(jù)不包含韋根協(xié)議中的頭尾奇偶校驗(yàn)位,僅為有效的數(shù)據(jù)位。
如果ReadFile函數(shù)返回1個(gè)字節(jié),表示接收到韋根讀卡器按鍵信號(hào),驅(qū)動(dòng)程序目前支持4 bit(16個(gè)狀態(tài))的鍵盤信號(hào)檢測(cè)。
韋根信號(hào)需要正確連接到英創(chuàng)工控主板后,驅(qū)動(dòng)程序才能正常工作,英創(chuàng)各個(gè)主板連接韋根信號(hào)的定義如下:
|
ESM680x / ESM335x / ESM928x / EM335x |
EM9280 / EM9281 / EM9287 | ||
| 第一路韋根("WIG1:") | Wiegand_DATA0 | GPIO14 | GPIO26 |
| Wiegand_DATA1 | GPIO15 | GPIO27 | |
| 第一路韋根("WIG2:") | Wiegand_DATA0 | GPIO16 | |
| Wiegand_DATA1 | GPIO17 |
如前所述,韋根讀卡器通常輸出5V TTL電平,而英創(chuàng)工控主板的GPIO要求輸入電平不能超過(guò)3.3V,所以韋根讀卡器輸出的信號(hào)需要經(jīng)過(guò)轉(zhuǎn)換后才能與英創(chuàng)主板的GPIO相連。下圖是一個(gè)簡(jiǎn)單的5V轉(zhuǎn)3.3V的電平轉(zhuǎn)的電路。

下面是應(yīng)用程序讀取第一路韋根信號(hào)("WIG1:")的示例代碼:
#include"stdafx.h"
#include
#include
#include
#include"bsp_drivers.h"
#defineWG_DATA_VALID 0
#defineWG_PARITY_ERROR 1
#defineWG_TIMEOUT 2
#defineWG_BIT_LENGTH_ERROR 3
DWORDWaitWiegandEvent(HANDLE hIRQ, DWORD dwTimeout)
{
DWORD dwReturn = 0;
if(!DeviceIoControl(hIRQ, // file handle to the driver
IOCTL_WAIT_FOR_WIG, // I/O control code
&dwTimeout, // in buffer
sizeof(DWORD), // in buffer size
&dwReturn, // out buffer
sizeof(DWORD), // out buffer size
NULL, // pointer to number of bytes returned
NULL)) // ignored (=NULL)
{
dwReturn = WAIT_FAILED;
}
returndwReturn;
}
int_tmain(intargc, _TCHAR* argv[])
{
HANDLE hWIG;
DWORD dwReturn, dwNumberOfBytesRead, i;
BOOL bRet;
BYTE WIGData[4];
printf("Wiegand(26/34) Demo.\r\n");
hWIG = CreateFile(_T("WIG1:"),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_RANDOM_ACCESS,
NULL);
if(hWIG == INVALID_HANDLE_VALUE)
{
printf("Can not open WIG1:\r\n");
return-1;
}
while(TRUE)
{
dwReturn = WaitWiegandEvent(hWIG, INFINITE);
switch( dwReturn )
{
caseWG_DATA_VALID:
dwNumberOfBytesRead = 0;
bRet = ReadFile(hWIG, WIGData,sizeof(WIGData),
&dwNumberOfBytesRead, NULL);
if(bRet)
{
if(dwNumberOfBytesRead == 3 )
printf("WG26:0x");
elseif(dwNumberOfBytesRead == 4)
printf("WG34:0x");
elseif(dwNumberOfBytesRead == 1)
printf("Key:0x");
for( i = 0; i < dwNumberOfBytesRead; i++)
printf("%x", WIGData[i]);
printf("\r\n");
}
break;
caseWG_PARITY_ERROR:
printf("Parity checking error!\r\n");
break;
caseWG_TIMEOUT:
printf("Timeout!\r\n");
break;
caseWG_BIT_LENGTH_ERROR:
printf("Unsupported bit length!\r\n");
break;
default:;
}
}
CloseHandle(hWIG);
return0;
}
-
WINDOWS
+關(guān)注
關(guān)注
4文章
3702瀏覽量
94050 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6107瀏覽量
37076
發(fā)布評(píng)論請(qǐng)先 登錄
信創(chuàng)產(chǎn)業(yè)駛?cè)肟燔嚨溃瑖?guó)產(chǎn)工控主板成自主可控關(guān)鍵支撐
國(guó)產(chǎn)金融主板:賦能智慧金融,驅(qū)動(dòng)信創(chuàng)產(chǎn)業(yè)升級(jí)
國(guó)產(chǎn)芯筑基,飛騰主板賦能信創(chuàng)未來(lái)
龍芯加持,高效辦公:高能信創(chuàng)工控主板賦能信創(chuàng)未來(lái)#工控主板 #國(guó)產(chǎn)芯片 #國(guó)產(chǎn)主板 #龍芯主板
龍芯中科助力2025教育信息技術(shù)應(yīng)用創(chuàng)新大賽成功舉辦
3A6000四核龍芯工控主板,推動(dòng)信創(chuàng)與工控深度融合
工控主板的設(shè)計(jì)特性
新時(shí)代的硬核基石:龍芯工控主板助力信創(chuàng)產(chǎn)業(yè)新基建
工控主板的三大核心技術(shù)
智慧新核心,龍芯主板助力信創(chuàng)體系再升級(jí)
?工控主板和商業(yè)主板的區(qū)別是什么?
佛瑞亞如何通過(guò)信息技術(shù)推動(dòng)業(yè)務(wù)增長(zhǎng)
飛騰主板為信創(chuàng)產(chǎn)業(yè)發(fā)展提高硬實(shí)力
科普|信創(chuàng)是什么?一文讀懂“信息技術(shù)應(yīng)用創(chuàng)新”戰(zhàn)略
信創(chuàng)浪潮下,國(guó)產(chǎn)主板有什么新的發(fā)展機(jī)遇?
英創(chuàng)信息技術(shù)WinCE工控主板對(duì)韋根信號(hào)的支持
評(píng)論