源:http://blog.chinaunix.net/uid-22670933-id-3268318.html

  Wiegand26协议是由美国工业安全委员会SIA(Security Industry Association)的隶属组织访问控制标准子委员会制定的一个关于存取控制的标准协议。它是一个关于非接触式IC卡读写器接口和输出的协议。

协议中定义了经常应用于控制访问、安全和其他相关工业领域中读卡器和控制器之间的接口。这个标准的规范使得读卡器的设计者和控制器的生厂商们的工作得以标准化。

图一 时序图

数字信号

图一显示的是读卡器将数字信号以bit的方式发给门禁控制器的一个时序图。这个时序图的Wiegand指导方针是遵照SIA 门禁控制标准协议,这个协议是针对26bit的Wiegand读卡器,一个脉冲时间(Tpw)在20us至100us之间,脉冲的跳变时间(Tpi )在200us至20ms之间。Data1和Data0信号是高电平(大于Voh),直到读卡器准备发一个数据流过来。读卡器发出的是异步的低电平的脉冲(小于Vol),通过Data1 或者Data0 线把数据流传送给门禁控制盒(如图一的锯齿波)。Data1和Data0脉冲不会交叠,也不会同步发生。

26-Bit Wiegand 格式

在de facto工业标准中,Wiegand 26bit组成格式:8 bits的机器号、16 bits的ID号。8 bits的二进制代码可以表示256(0—255)个机器号,16bits的二进制代码可以在每一个机器号中表示65,536 (0 to 65,535)个不同的ID号。

26-Bit Wiegand格式长度为26位,其中包含两位校验位(EP与OP):

                        1          2        9   10           25    26

EP

FC

CC

OP

表一 字段定义

字段

含义

EP

偶校验位(Even Parity bit),EP是由字段2到13bit位来判断的。如果是偶数个“1”,EP为0;相反则为0。

FC(bit2-bit 9)

机器代码(Facility Code,0-255) Bit 2 为MSB(高位有效位)

CC (bit10-bit 25)

卡号(Card Code,0-65 535),其中bit10为MSB

OP

奇校验位(Odd Parity bit),OP值由14到25bit决定的。如果是偶数个“1”,OP值为1,相反则为0。

Wiegand 扩展格式

可以为需要更多代码的用户提供更多的选择。首先转换成Keri标准39bit的格式。这Wiegand 39bit格式包含17 位的机器代码字段和20位的ID字段。这17bit的机器代码字段可以从数学上满足共131,072条(0到131,071)不同的机器代码,而20bit的ID字段又可以每一个机器号提供1,048,576(0到1,048,575)个不同的ID号。在 此格式中有那么多的机器代码,因此一条新机器代码可能被为每项工程选择。此外,每一个机器代码又有大量的ID号,所以此格式成了大工程的理想选择。为了安全起见,Keri系统校验编码保证没有重复号码。 表四提供了Pyramid Wiegand的主要格式。

表二 扩展 Wiegand 格式

含义

Bit 1

2-9位的偶校验位

Bits 2 to 18

机器代码(0 至 131,071); Bit 2 为MSB(高位有效位)

Bits 19 to 38

ID 号 (0 至1,048,575); Bit 19 为MSB

Bit 39

bit20至bit38的奇校验位

 
下面是在msp430F2274单片机下实现的程序,需要注意的一点:data0与data1应当初始化为高电平一段时间。

  • #include <msp430x22x4.h>
  • #define DATA0SEL  P3SEL
  • #define DATA0DIR  P3DIR
  • #define DATA0OUT  P3OUT
  • #define DATA0PIN  BIT2
  • #define DATA0L    P3OUT &= ~DATA0PIN
  • #define DATA0H    P3OUT |= DATA0PIN
  • #define DATA1SEL  P3SEL
  • #define DATA1DIR  P3DIR
  • #define DATA1OUT  P3OUT
  • #define DATA1PIN  BIT1
  • #define DATA1L    P3OUT &= ~DATA1PIN
  • #define DATA1H    P3OUT |= DATA1PIN
  • //msp430F2274在12M晶振下延时1us程序
  • void Fsys12M_Delay(unsigned short _1us)
  • {
  • while(_1us--)
  • {
  • __no_operation();
  • __no_operation();
  • __no_operation();
  • __no_operation();
  • __no_operation();
  • __no_operation();
  • }
  • }
  • void send_Data1()
  • {
  • DATA1L;
  • Fsys12M_Delay(100);
  • DATA1H;
  • }
  • void send_Data0()
  • {
  • DATA0L;
  • Fsys12M_Delay(100);
  • DATA0H;
  • }
  • /********************************************************
  • * 函数:wiegand(unsigned char *cardNo, unsigned char len)
  • * 输入:cardNo:卡号指针,len:卡号长度,此处只能是3个
  • * 输出:无
  • * 功能:把卡号通过wiegand送出
  • * 时间:针对430的12M晶振,大约耗时30ms
  • ********************************************************/
  • void wiegand(unsigned char *cardNo, unsigned char len)
  • {
  • unsigned char even;
  • unsigned char odd;
  • unsigned char one_num;
  • unsigned char i, j, temp;
  • one_num = 0;
  • temp = cardNo[0];
  • for( i=0; i<8; i++ )
  • {
  • if( temp&0x80 )
  • one_num++;
  • temp <<= 1;
  • }
  • temp = cardNo[1];
  • for( i=0; i<4; i++ )
  • {
  • if( temp&0x80 )
  • one_num++;
  • temp <<= 1;
  • }
  • if( one_num%2==0 )
  • {
  • even = 0;  //偶校验位,若2-13位有偶数个1,则此位为0
  • }
  • else
  • {
  • even = 1;
  • }
  • one_num = 0;
  • for( i=0; i<4; i++ )
  • {
  • if( temp&0x80 )
  • one_num++;
  • temp <<= 1;
  • }
  • temp = cardNo[2];
  • for( i=0; i<8; i++ )
  • {
  • if( temp&0x80 )
  • one_num++;
  • temp <<= 1;
  • }
  • if( one_num%2==0 )
  • {
  • odd = 1;  //奇校验位, 若14-25为有偶数个1,则此位为1
  • }
  • else
  • {
  • odd = 0;
  • }
  • if( even )  //发送偶校验位
  • {
  • send_Data1();
  • }
  • else
  • {
  • send_Data0();
  • }
  • Fsys12M_Delay(1000);
  • for( i=0; i<len; i++ )
  • {
  • temp = cardNo[i];
  • for( j=0; j<8; j++ )
  • {
  • if( temp&0x80 )
  • {
  • send_Data1();
  • }
  • else
  • {
  • send_Data0();
  • }
  • Fsys12M_Delay(1000);
  • temp <<= 1;
  • }
  • }
  • if( odd )   //发送奇校验位
  • {
  • send_Data1();
  • }
  • else
  • {
  • send_Data0();
  • }
  • Fsys12M_Delay(1000);
  • }

Wiegand协议(转)的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

随机推荐

  1. 第3章 Java语言基础----成员变量与局部变量

    在对局部变量进行赋值时,不能对非静态字段age进行静态引用,图1错误,加上static后图二正确,图3与图4类似,如下图所示: 图1图2 图3图4 2.成员变量times在类中定义,局部变量times ...

  2. js获取不同浏览器盒子宽度高度

    DTD 已声明 IE document.documentElement.scrollHeight 浏览器所有内容高 度 ,document.body.scrollHeight 浏览器所有内容高度 do ...

  3. git clone 太慢怎么办?

    Git 和 GitHub 的出现打开了开源世界的另一扇大门,版本控制变得更强大(也更复杂),项目的管理变得更加容易,项目的开发也变得更容易进行多人协作.GitHub 无疑是程序员的 Facebook ...

  4. Fragment和Activity之间通过广播的方式传递数据

    四大组件之间传递数据可以用广播,但是有次面试官说太重了,用eventbus代替.下面的广播传递数据方法仅当学习参考. 1.管理类 /** * 广播管理类:注册广播.注销广播.发送广播 * @autho ...

  5. WdatePicker默认日期为当天

    不说废话,直接上代码: <input id="d4311" class="Wdate" onfocus="WdatePicker({maxDat ...

  6. perl-cgi基础

    来源: http://www.cnblogs.com/itech/archive/2012/09/22/2698553.html 代码: http://xxxxx/cgi/perl-cgi.cgi?n ...

  7. ENC28j60以太网芯片驱动程序简介

    ENC28j60以太网芯片驱动程序简介 ENC28J60 驱动开发要点 enc28J60 和 Arduino (1)——ping通你的Arduino MCU51单片机uIP协议栈+ENC28J60网卡 ...

  8. 收缩sql server数据库日志

    项目中,可能数据库(sql server数据库)日志太多,占了很多磁盘空间,可以通过收缩数据库日志,减少日志文件大小. 下面以Northwind数据库为例: 1.把数据库的恢复模式设置为“简单模式”: ...

  9. 转 sort按照数据大小排序

    一般默认的sort都是按照字母的ASCII进行排序的,现在想按照数字的大小进行排序 这里有一个文件test,内容为: 8723    23423 321324  213432 23      234 ...

  10. \t 的理解

    在同一个缓冲区内横向跳8个空格. 如果在 \t 前面有字符串,则包括 \t之前出现的字符串之内一共是8个空格.