源: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. ios中的关键词retain release

    内存分析  在函数中只要用new  alloc  copy  这样的分配空间时 则计算器retain就要为一 每调用一次就要加一 在.m文件中引用手动计数时 一定要调用[super dealloc]这 ...

  2. velocity 教程

    1,<title> $!{product.name} - $!{title} $!{about.title} - $!{title} $!{news.title} - $!{title} ...

  3. LNMP环境的安装配置

    0.安装必要的依赖软件 如果已经安装了可能会进行升级,版本完全一致则不会进行任何操作. yum -y install bzip2-devel curl-devel freetype-devel gcc ...

  4. css 相关

    background-size: auto就会变成就是不会让图像变形的,会自动调整,一般是会设置多少箱像素的, background-size: XXpx XXpx;百分百那就铺满整个区域了 back ...

  5. Petit FatFs

    FatFs is a generic FAT/exFAT file system module for small embedded systems. The FatFs module is writ ...

  6. sql server获取当前年月日 时分秒

    获取当前年月日(字符串): ),) 获取当前时间的时分秒(':'隔开): ),) 将年月日时分秒拼接成一条字符串: ),)),),':','')

  7. Servlet事件监听器

    监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 面试题:请描述一下java事件监听机 ...

  8. boost库之graph入门

    #include <boost/graph/undirected_graph.hpp> #include <boost/graph/adjacency_list.hpp> us ...

  9. overflow:hidden

    超出之后隐藏,比如有一个div,高度和宽度都是100像素,当里面的内容很多,div里撑不下时,如果设置overflow:hidden,就会把超出的内容隐藏掉不显示

  10. HDU1518:Square(DFS)

    Square Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submi ...