0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)Linux工控主板對(duì)韋根信號(hào)的支持

英創(chuàng)信息技術(shù) ? 來(lái)源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-02-04 10:46 ? 次閱讀

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è)校準(zhǔn),一個(gè)“韋根包”有26位數(shù)據(jù),第1位為第1到第13位的偶校驗(yàn),最后1位為第14到第26位的奇校驗(yàn),中間24位為數(shù)據(jù)位。

對(duì)于韋根34格式,即一個(gè)“韋根包”有34位數(shù)據(jù),常見(jiàn)的格式為第1位為第1到第17位的偶校驗(yàn),最后1位為第18到第34位的奇校驗(yàn),中間32位為數(shù)據(jù)位。

英創(chuàng)公司為Linux工控主板提供了支持韋根協(xié)議的設(shè)備驅(qū)動(dòng)模塊,在命令行輸入insmod wiegand-gpio.ko即完成驅(qū)動(dòng)程序的加載。linux韋根驅(qū)動(dòng)支持應(yīng)用程序通過(guò)非阻塞的輪詢操作(select)和異步通知的方式讀取韋根數(shù)據(jù),這里我們建議使用非阻塞輪詢方式。以非阻塞方式O_NONBLOCK打開(kāi)設(shè)備文件后,使用num = read(fd,buffer,len)讀取韋根數(shù)據(jù),只讀取Site Code和User Code,不包含奇偶校驗(yàn)位,各參數(shù)意義如下:

輸入?yún)?shù):

fd:int, 韋根設(shè)備文件描述符;

len:buffer長(zhǎng)度,固定4字節(jié),小于4字節(jié)提示錯(cuò)誤;

輸出參數(shù):

buffer:char *, read結(jié)果緩存,固定4字節(jié),根據(jù)不同返回值num,具有不同意義;

返回值:

num:int, 讀取成功時(shí),表示讀取的字節(jié)數(shù),具體意義如下:

num = 4,讀取成功,數(shù)據(jù)格式為wiegand 34,buffer [0-1]為Site Code,buffer [2-3]為User Code;

num = 3,讀取成功,數(shù)據(jù)格式為wiegand 26,buffer [0]=0,buffer [1]為Site Code,buffer [2-3]為User Code;

num = 1,讀取成功,數(shù)據(jù)格式為鍵盤按鍵(部分讀卡器有此功能),buffer [0]=0, buffer [1]為按鍵值;

num = -1,讀取失敗,buffer [0]存錯(cuò)誤碼:

-1//格式錯(cuò)誤,長(zhǎng)度不匹配

-2//偶校驗(yàn)錯(cuò)誤

-3//奇校驗(yàn)錯(cuò)誤

-4//用戶傳入buffer空間太小

英創(chuàng)各個(gè)主板連接韋根信號(hào)的定義如下:

Wiegand_DATA0 Wiegand_DATA1
ESM928x / ESM335x / EM335x GPIO14 GPIO15
EM9280 / EM9281 / EM9287 GPIO26 GPIO27

韋根讀卡器通常輸出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)的電路,WG_DATA0和WG_DATA1為韋根讀卡器輸出信號(hào),注意要將韋根讀卡器與英創(chuàng)工控主板共地。

以下是讀取韋根數(shù)據(jù)的應(yīng)用程序示例代碼:

#include

#include

#include

#include

#include

#include

#defineWIEGAND_ERROR_FORMAT -1 //格式錯(cuò)誤,長(zhǎng)度不匹配

#defineWIEGAND_ERROR_EVEN_PARITY -2 //偶校驗(yàn)錯(cuò)誤

#defineWIEGAND_ERROR_ODD_PARITY -3 //奇校驗(yàn)錯(cuò)誤

#defineWIEGAND_ERROR_LESS_BUF -4 //用戶傳入buf空間太小

intexitflag; //退出標(biāo)志

charbuffer[4]; //read結(jié)果

intreadWiegandThreadFunc(void* lparam)

{

intfd = * (int*)lparam;

fd_set fdRead;

structtimeval aTime;

intret;

while(1)

{

FD_ZERO(&fdRead);

FD_SET(fd,&fdRead);

aTime.tv_sec = 2; //s

aTime.tv_usec = 0; //us

ret =select( fd+1, &fdRead, NULL, NULL, &aTime );

if( ret>0 )

{

if( FD_ISSET(fd, &fdRead) )

{

//用戶可以在此加入處理操作

intnum = 0;

num =read(fd,buffer,4);

if(num < 0)

{

interrorCode = (signedchar)buffer[0];

printf("ERROR:read failed! num: %d\n",num);

switch(errorCode)

{

caseWIEGAND_ERROR_FORMAT:

printf("ERROR CODE: %d, wiegand data format did not match wiegand-26,weigand-34 or 4 bits for keyboard!\n",errorCode);

break;

caseWIEGAND_ERROR_EVEN_PARITY:

printf("ERROR CODE: %d, wiegand data even parity was wrong!\n",errorCode);

break;

caseWIEGAND_ERROR_ODD_PARITY:

printf("ERROR CODE: %d, wiegand data odd parity was wrong!\n",errorCode);

break;

caseWIEGAND_ERROR_LESS_BUF:

printf("ERROR CODE: %d, buffer was too small, please set it to 4 bytes!\n",errorCode);

break;

default:

printf("ERROR CODE: %d, Unknown Error!\n",errorCode);

break;

}

}

else

{

printf("result: %x,%x,%x,%x\n",buffer[0],buffer[1], buffer[2], buffer[3]);

}

}

}

if( exitflag==1 )//exitflag在程序其他線程中改變

{

printf("exit!\n");

break;

}

}

pthread_exit( NULL );

return0;

}

intmain(intargc,char* argv[])

{

intfd;

inti = 0;

exitflag = 0;

fd =open("/dev/em9280_wiegand",O_RDONLY | O_NONBLOCK);

if(fd < 0)

{

printf("ERROR:open failed!\n");

return-1;

}

pthread_attr_t attr;

pthread_t m_thread;

int res;

res = pthread_attr_init(&attr);

if( res!=0 )

{

printf("Create attribute failed\n" );

}

// 設(shè)置線程綁定屬性

res = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );

// 設(shè)置線程分離屬性

res += pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED );

if( res!=0 )

{

printf( "Setting attribute failed\n" );

}

// 創(chuàng)建select線程,在此線程中讀韋根數(shù)據(jù)

res = pthread_create( &m_thread, &attr, (void*(*) (void*))&readWiegandThreadFunc, &fd );

if( res!=0 )

{

return-1;

}

pthread_attr_destroy( &attr );

while(1)

{

//執(zhí)行其他任務(wù)

printf("%d\n",i++);

sleep(1);

if(i==50)

{

exitflag = 1;

printf("over\n");

break;

}

}

close(fd);

return0;

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11171

    瀏覽量

    208474
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6083

    瀏覽量

    35097
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    工控主板有哪些特點(diǎn)?

    動(dòng)、防塵防水等設(shè)計(jì),能夠適應(yīng)工業(yè)場(chǎng)景中的各種惡劣條件,具有較長(zhǎng)的使用壽命。 ?擴(kuò)展性:工控主板通常具有豐富的擴(kuò)展接口,可以方便地連接各種工業(yè)設(shè)備和傳感器,滿足不同工業(yè)控制需求。 工業(yè)標(biāo)準(zhǔn)支持
    的頭像 發(fā)表于 10-10 08:55 ?99次閱讀

    Linux文件系統(tǒng)的掛載過(guò)程

    Linux文件系統(tǒng)(rootfs)是Linux系統(tǒng)中所有其他文件系統(tǒng)和目錄的起點(diǎn),它是內(nèi)核啟動(dòng)時(shí)掛載的第一個(gè)文件系統(tǒng)。
    的頭像 發(fā)表于 10-05 16:50 ?150次閱讀

    如何構(gòu)建Linux文件系統(tǒng)

    構(gòu)建Linux文件系統(tǒng)是一個(gè)涉及多個(gè)步驟和概念的過(guò)程,它對(duì)于Linux系統(tǒng)的啟動(dòng)和運(yùn)行至關(guān)重要。
    的頭像 發(fā)表于 10-05 16:47 ?149次閱讀

    創(chuàng)國(guó)產(chǎn)化背景下的工控主板發(fā)展現(xiàn)狀

    創(chuàng),是信息技術(shù)應(yīng)用創(chuàng)新產(chǎn)業(yè)的簡(jiǎn)稱,于2016年“信創(chuàng)工委會(huì)”(信息技術(shù)應(yīng)用創(chuàng)新工作委員會(huì))提出,目的就是要推動(dòng)我們國(guó)內(nèi)軟硬件關(guān)鍵技術(shù)的研發(fā)
    的頭像 發(fā)表于 09-21 16:15 ?210次閱讀

    工控主板接口全解析:國(guó)產(chǎn)主板的多樣連接

    接口以其豐富的類型和卓越的性能,滿足了工業(yè)領(lǐng)域多樣化的應(yīng)用需求。 1.PCIe接口 ? 作為工控主板上的高速外設(shè)連接通道,PCIe接口以其卓越的數(shù)據(jù)傳輸速率,支持著廣泛的擴(kuò)展卡,包括但不限于網(wǎng)絡(luò)適配器、圖形處理單元、數(shù)據(jù)采
    的頭像 發(fā)表于 09-06 14:54 ?459次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>接口全解析:國(guó)產(chǎn)<b class='flag-5'>主板</b>的多樣連接

    探索國(guó)產(chǎn)工控主板:接口類型全解析

    和創(chuàng)新的設(shè)計(jì)理念,為工業(yè)自動(dòng)化的浪潮注入了源源不斷的活力。以下是對(duì) 國(guó)產(chǎn)工控主板 常見(jiàn)硬件接口的一次深入而專業(yè)的解析: 1.PCIe接口 作為工控主板中的高速數(shù)據(jù)傳輸通道,PCIe接口
    的頭像 發(fā)表于 08-13 10:37 ?380次閱讀
    探索國(guó)產(chǎn)<b class='flag-5'>工控</b><b class='flag-5'>主板</b>:接口類型全解析

    工控主板在環(huán)保智能設(shè)備中的應(yīng)用

    工控主板在環(huán)保智能設(shè)備中的應(yīng)用,對(duì)于環(huán)境監(jiān)測(cè)、資源管理、污染控制等方面起到了至關(guān)重要的作用。以下是工控主板在環(huán)保智能設(shè)備中的一些具體應(yīng)用:
    的頭像 發(fā)表于 07-17 15:54 ?245次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>在環(huán)保智能設(shè)備中的應(yīng)用

    淺析安卓工控主板的優(yōu)勢(shì)

    安卓工控主板作為專為工業(yè)控制領(lǐng)域設(shè)計(jì)的硬件平臺(tái),相較于普通商用主板,擁有諸多優(yōu)勢(shì),以滿足工業(yè)環(huán)境對(duì)穩(wěn)定、可靠、長(zhǎng)期運(yùn)行的嚴(yán)格要求。以下是安卓工控主板
    的頭像 發(fā)表于 06-27 14:50 ?254次閱讀

    使用工控主板時(shí)該注意哪些事項(xiàng)?

    最近大家都在頻繁問(wèn)一個(gè)問(wèn)題就是工控主板在什么人為情況下容易出現(xiàn)故障,從而造成工控主板的損壞,那今天小編就來(lái)講講,我們?cè)谑褂?b class='flag-5'>工控
    的頭像 發(fā)表于 06-05 16:01 ?294次閱讀
    使用<b class='flag-5'>工控</b><b class='flag-5'>主板</b>時(shí)該注意哪些事項(xiàng)?

    工控主板容易出現(xiàn)故障的原因有哪些?

    最近大家都在頻繁問(wèn)一個(gè)問(wèn)題就是工控主板在什么人為情況下容易出現(xiàn)故障,從而造成工控主板的損壞,那今天小編就來(lái)講講,我們?cè)谑褂?b class='flag-5'>工控
    的頭像 發(fā)表于 05-17 10:57 ?263次閱讀

    工控機(jī)主板和普通商用級(jí)主板有什么區(qū)別?

    工控機(jī)主板和普通商用級(jí)主板都屬于工業(yè)主板范疇,其與普通主板擁有本質(zhì)區(qū)別,下面就分析一下工控主板
    的頭像 發(fā)表于 05-13 15:07 ?442次閱讀

    工控主板的性能指標(biāo)有哪些?

    工控主板是工業(yè)控制領(lǐng)域中的關(guān)鍵組成部分,它承載著工控系統(tǒng)的核心功能。因此,工控主板的性能指標(biāo)是評(píng)估其質(zhì)量和性能的重要標(biāo)準(zhǔn)。本文將介紹
    的頭像 發(fā)表于 05-10 16:27 ?814次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>的性能指標(biāo)有哪些?

    工控主板和普通主板的區(qū)別有哪些

    工控主板和普通主板是兩種在計(jì)算機(jī)硬件領(lǐng)域中常見(jiàn)的主板類型,它們?cè)谠O(shè)計(jì)、功能和用途上有著明顯的區(qū)別。工控
    的頭像 發(fā)表于 04-25 16:54 ?1008次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>和普通<b class='flag-5'>主板</b>的區(qū)別有哪些

    購(gòu)買工控主板的三大誤區(qū)

    最近有很多人問(wèn)我什么樣的工控主板算好的,有沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)。工控主板作為整機(jī)的核心組成部分,在性能穩(wěn)定上有著至關(guān)重要的作用,那今天小編就來(lái)給大家講解一下在購(gòu)買
    的頭像 發(fā)表于 04-16 16:40 ?261次閱讀

    工控機(jī)主板與嵌入式主板的區(qū)別是什么?

    在計(jì)算機(jī)硬件中,主板是至關(guān)重要的組成部分,它連接并控制著所有的硬件設(shè)備。然而,根據(jù)其設(shè)計(jì)和使用場(chǎng)景的不同,主板可以被分為多種類型,選擇合適的主板對(duì)于不同的嵌入式系統(tǒng)應(yīng)用來(lái)說(shuō)至關(guān)重要。那么工控機(jī)
    的頭像 發(fā)表于 11-16 10:29 ?1833次閱讀
    <b class='flag-5'>工控機(jī)主板</b>與嵌入式<b class='flag-5'>主板</b>的區(qū)別是什么?