源: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. mybatis 做 insert操作的时候返回插入的那条数据的id

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:吃丸子的小鹿链接:http://www.zhihu.com/question/20810321/answer/16843223 ...

  2. Server对象(是属性)

    html, body { font-size: 10.5pt; } body { font-family: 微软雅黑, Helvetica, "Hiragino Sans GB", ...

  3. perl的Getopt::Long和pod::usage ?

    来源: http://www.cnblogs.com/itech/archive/2012/08/07/2627267.html 代码: 需要显式地定义变量且初始化.例如optionX. 如果没有定义 ...

  4. Linq中max min sum avarage count的使用

    一.Max最大值 static void Main(string[] args) { //Max求最大值 ,,,,,,,,,}; //方法1 Linq语句+Linq方法 var result = (f ...

  5. Django Template模板

    Django Template 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. 下面我们来调用html views def ind ...

  6. Jquery-获取勾选的checkbox的同级节点数量

    // 获取勾选的标签值得上一个兄弟节点 var groups = []; $('input[name="group_name"]:checked').siblings(" ...

  7. web-service客户端与服务器端的连接

    1 首先讲解下xfire XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举.和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地 ...

  8. 关于jQuery的条件判断问题

    遇到的第一个问题,点击第一行用toggle实现背景的变换,需要在toggle函数里面判断,当下面显示的时候是一个状态,下面不显示的时候是另一个状态,我用了 if($(".check-box& ...

  9. Hibernate 系列教程12-继承-Join策略

    Employee public class Employee { private Long id; private String name; HourlyEmployee public class H ...

  10. Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法

    在使用 longtext 类型执行数据录入时,有时会抛出这个异常,从字面理解就是当前包大小超过 mysql 系统设置的包大小无法执行操作. 解释一下包大小这个东西:简单来说就是mysql把当前执行的m ...