當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式案例Show
[導(dǎo)讀]什么是韋根協(xié)議?如何實(shí)現(xiàn)?本文詳細(xì)解讀。

01 前言

今年疫情期間,為了便于管理,智能門(mén)禁系統(tǒng)被廣泛應(yīng)用,市面上大量的門(mén)禁終端都是使用韋根協(xié)議進(jìn)行通訊。什么是韋根協(xié)議?如何實(shí)現(xiàn)?本文詳細(xì)解讀。

02 韋根協(xié)議介紹

Wiegand(韋根)協(xié)議是由摩托羅拉公司制定的一種通訊協(xié)議,它適用于涉及門(mén)禁控制系統(tǒng)的讀卡器和卡片的許多特性;其協(xié)議并沒(méi)有定義通訊的波特率、也沒(méi)有定義數(shù)據(jù)長(zhǎng)度。它有很多格式,標(biāo)準(zhǔn)的韋根26-bit是最常用的格式。

此外,還有34-bit、36-bit、44-bit等格式。而標(biāo)準(zhǔn)的26-bit格式是一個(gè)開(kāi)放式的格式,這就意味著任何支持韋根26-bit輸入\輸出的設(shè)備都可以互相連接進(jìn)行通信。

韋根數(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í)際的韋根讀卡器決定)。下圖為韋根時(shí)序圖

韋根26:一個(gè)“韋根包”有26位數(shù)據(jù),第1位為第1到第13位的偶校驗(yàn),最后1位為第14到第26位的奇校驗(yàn),中間24位為數(shù)據(jù)位。

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

03 軟件實(shí)現(xiàn)

本文實(shí)現(xiàn)韋根協(xié)議26bit/34bit的接收和數(shù)據(jù)解析,在數(shù)據(jù)接收時(shí)采用一個(gè)循環(huán)緩沖數(shù)組進(jìn)行接收,通過(guò)中斷接收,以信號(hào)的下降沿觸發(fā),不用判斷脈沖寬度,只要做個(gè)計(jì)時(shí)器,做個(gè)超時(shí)判斷數(shù)據(jù)接收完成進(jìn)行處理。

管腳初始化和外部中斷初始化:

//頭文件中對(duì)管腳進(jìn)行定義PC9 DATA0 PC8 DATA1#define DATA0_GPIO_PORT GPIOC#define DATA0_GPIO_PIN GPIO_Pin_9#define DATA0_GPIO_MODE GPIO_Mode_IN_FLOATING#define DATA0_GPIO_EXTI_PORT_SOURCE GPIO_PortSourceGPIOC#define DATA0_GPIO_EXTI_PIN_SOURCE GPIO_PinSource9#define DATA0_EXTI_LINE EXTI_Line9#define DATA0_EXTI_TRIGGER EXTI_Trigger_Falling#define DATA0_EXTI_IRQ EXTI9_5_IRQn #define DATA1_GPIO_PORT GPIOC#define DATA1_GPIO_PIN GPIO_Pin_8#define DATA1_GPIO_MODE GPIO_Mode_IN_FLOATING#define DATA1_GPIO_EXTI_PORT_SOURCE GPIO_PortSourceGPIOC#define DATA1_GPIO_EXTI_PIN_SOURCE GPIO_PinSource8#define DATA1_EXTI_LINE EXTI_Line8#define DATA1_EXTI_TRIGGER EXTI_Trigger_Falling#define DATA1_EXTI_IRQ EXTI9_5_IRQn //C文件中進(jìn)行初始化/**----------------------------------------------------------------- * @函數(shù)名 wiegand_init * @功能   初始化wiegand接口,和外部中斷配置 *  * @參數(shù) 無(wú) * @返回值 u8 0表示初始化完成***----------------------------------------------------------------*/u8 wiegand_init(void){ NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure;  GPIO_InitTypeDef GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  GPIO_InitStructure.GPIO_Pin = DATA0_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = DATA0_GPIO_MODE;  GPIO_Init(DATA0_GPIO_PORT, &GPIO_InitStructure);  GPIO_InitStructure.GPIO_Pin = DATA1_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = DATA1_GPIO_MODE;  GPIO_Init(DATA1_GPIO_PORT, &GPIO_InitStructure);  GPIO_EXTILineConfig(DATA0_GPIO_EXTI_PORT_SOURCE, DATA0_GPIO_EXTI_PIN_SOURCE);  EXTI_InitStructure.EXTI_Line = DATA0_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = DATA0_EXTI_TRIGGER; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);  NVIC_InitStructure.NVIC_IRQChannel = DATA0_EXTI_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);   GPIO_EXTILineConfig(DATA1_GPIO_EXTI_PORT_SOURCE, DATA1_GPIO_EXTI_PIN_SOURCE);  EXTI_InitStructure.EXTI_Line = DATA1_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = DATA1_EXTI_TRIGGER; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);  NVIC_InitStructure.NVIC_IRQChannel = DATA1_EXTI_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);   return 0;}

外部中斷接收處理:

void EXTI9_5_IRQHandler(void){ if(EXTI_GetFlagStatus(DATA0_EXTI_LINE)) //DATA0數(shù)據(jù)觸發(fā) { EXTI_ClearFlag(DATA0_EXTI_LINE); if(g_wiegandType.Flag.StartFlag == 0) //數(shù)據(jù)接收開(kāi)始標(biāo)志 { g_wiegandType.Flag.StartFlag = 1; g_wiegandType.DataIn.DataLen = 0; g_wiegandType.DataIn.Data[g_wiegandType.DataIn.DataLen++] = 0; //數(shù)據(jù)0存入數(shù)組 g_wiegandType.bitIntervalTime = MAX_BIT_INTERVAL_TIME; //數(shù)據(jù)位超時(shí)處理 } else { g_wiegandType.DataIn.Data[g_wiegandType.DataIn.DataLen++] = 0; g_wiegandType.bitIntervalTime = MAX_BIT_INTERVAL_TIME;  }  } if(EXTI_GetFlagStatus(DATA1_EXTI_LINE)) //DATA1數(shù)據(jù)觸發(fā) { EXTI_ClearFlag(DATA1_EXTI_LINE); if(g_wiegandType.Flag.StartFlag == 0) { g_wiegandType.Flag.StartFlag = 1; g_wiegandType.DataIn.DataLen = 0; g_wiegandType.DataIn.Data[g_wiegandType.DataIn.DataLen++] = 1; //數(shù)據(jù)1存入數(shù)組 g_wiegandType.bitIntervalTime = MAX_BIT_INTERVAL_TIME; } else { g_wiegandType.DataIn.Data[g_wiegandType.DataIn.DataLen++] = 1; g_wiegandType.bitIntervalTime = MAX_BIT_INTERVAL_TIME;  }  if(g_colStatus == 1) { COL1_LOW(); } else { COL1_HIGH(); } } }

收到一組數(shù)據(jù)后進(jìn)行解析:

/**----------------------------------------------------------------- * @函數(shù)名 wiegand26 * @功能 wiegand26數(shù)據(jù)解析 *  * @參數(shù) 無(wú) * @返回值 u8 >0表示數(shù)據(jù)異常***----------------------------------------------------------------*/u8 wiegand26(void){ u8 i; u32 result; u8 odd = 0; u8 even = 0; if (g_wiegandType.DataIn.DataLen != 26) { return 1; } result = 0; for (i = 0; i < 24; ++i) { if(g_wiegandType.DataIn.Data[i+1] == 1) { result |= 1<<(23-i); if(i<12) { even++; } else { odd++; } } } g_wiegandType.result = result; if(even%2) //偶校驗(yàn)判斷 {  if(g_wiegandType.DataIn.Data[0]!=1) return 3; } else { if(g_wiegandType.DataIn.Data[0]==1) return 3; } if(odd%2)//奇校驗(yàn)判斷 {  if(g_wiegandType.DataIn.Data[25]==1) return 3; } else { if(g_wiegandType.DataIn.Data[25]!=1) return 3; } return 0;}/**----------------------------------------------------------------- * @函數(shù)名 wiegand34 * @功能 wiegand34數(shù)據(jù)解析 *  * @參數(shù) 無(wú) * @返回值 u8 》0表示數(shù)據(jù)異常***----------------------------------------------------------------*/u8 wiegand34(void){ u8 i; u32 result; u8 odd = 0; u8 even = 0; if (g_wiegandType.DataIn.DataLen != 34) { return 1; } result = 0; for (i = 0; i < 32; ++i) { if(g_wiegandType.DataIn.Data[i+1] == 1) { result |= 1<<(31-i); if(i<16) { even++; } else { odd++; } } } g_wiegandType.result = result; if(even%2) {  if(g_wiegandType.DataIn.Data[0]!=1) return 3; } else { if(g_wiegandType.DataIn.Data[0]==1) return 3; } if(odd%2) {  if(g_wiegandType.DataIn.Data[33]==1) return 3; } else { if(g_wiegandType.DataIn.Data[33]!=1) return 3; } return 0;}

處理好的數(shù)據(jù)通過(guò)調(diào)試串口輸出,查看和自己的發(fā)送的卡號(hào)是否一致,如果異常請(qǐng)檢查DATA0和DATA1是否接反。

04 結(jié)語(yǔ)

韋根協(xié)議是一個(gè)比較簡(jiǎn)單的單工通信,很容易理解,如果有問(wèn)題歡迎討論。



免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉