源: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. js中的clientWidth offsetWidth scrollWidth等的含义

    网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...

  2. flash 右键菜单隐藏与修改

    来源:http://blog.sina.com.cn/s/blog_7264c84401014fmd.html import flash.ui.ContextMenu;import flash.ui. ...

  3. A*搜寻算法(A星算法)

    A*搜寻算法[编辑] 维基百科,自由的百科全书 本条目需要补充更多来源.(2015年6月30日) 请协助添加多方面可靠来源以改善这篇条目,无法查证的内容可能会被提出异议而移除. A*搜索算法,俗称A星 ...

  4. Fibonacci 数列第 N项 O(logN)算法

    时间复杂度为O( log n )的方法: 该算法使用矩阵乘法操作,使得算法时间复杂度为 O(logN) long long Fibonacci( unsigned n ) { ] = {, }; ) ...

  5. 并查集+bfs+暴力滑窗 Codeforces Round #356 (Div. 2) E

    http://codeforces.com/contest/680/problem/E 题目大意:给你一个n*n的图,然后图上的 . (我们下面都叫做‘点’)表示可以走,X表示不能走,你有如下的操作, ...

  6. Hibernate 关系映射方式(1)

    来源:本文转载自:http://blog.csdn.net/huangaigang6688/article/details/7761310 Hibernate映射解析——七种映射关系 首先我们了解一个 ...

  7. 12.04 ubuntu 进入登录界面,账号密码确定是正确的但是进不来系统。

    很简单,HOME目录存储太多东西了,导致开机不了.

  8. Setup a private http/nginx based GIT server

    原文:http://aaba.me/blog/2014/03/setup-a-private-http-nginx-based-git-server.html https://doomzhou.git ...

  9. cookie使用随笔

    cookie是一种浏览器缓存,可以理解为存放在浏览器上的一种小文件. 大小数目限制: 不同浏览器对于大小和数目均有不一样的限制,大小一般为4k,数目从30~50个(视浏览器类型),以键值对的形式存储, ...

  10. Batch Sort

    Batch Sort time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...