Wiegand协议(转)
源: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的奇校验位 |
- #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协议(转)的更多相关文章
- HTTP协议系列(1)
一.为什么学习Http协议 首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- 协议森林16 小美的桌号(DHCP协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...
- 简约之美Jodd-http--深入源码理解http协议
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...
- 【JavaScript】javascript中伪协议(javascript:)使用探讨
javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- linux-图形化远程管理协议
远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...
随机推荐
- iOS打包app发给测试人员测试
说明:在项目开发过程中经常需要开发人员将项目打包成ipa包后,发给测试人员进行测试.本文贴图对打包的过程简单介绍. 一.Product ->archive (注意,不能是模拟器状态,如果当前调试 ...
- go:挂webserver
apache配置: <VirtualHost *:80> ServerName test.com DocumentRoot /home/q/system/Engine/src/biz/ww ...
- Linux Ubuntu 内核升级
方法一 : 1 更新系统源 apt-get update 2 搜索内核文件 apt-cache search linux-image 3 安装 apt-get install -y linux-im ...
- CentOS7 PostgreSQL 安装
PostgreSQL安装 安装使用yum安装 (找源 http://yum.postgresql.org/) yum install https://download.postgresql.org/p ...
- 打开另外一个App
/** * 打开一个app * * @param packageName * @param data * @return */ public static boolean lanuchApp(Cont ...
- Js根据class名替换html标签内容 ,在某标签前后添加内容
function getClass(obj, attr) { var aArray = [];//定义一个新的空数组 var i = 0; var aAll = document.getElement ...
- DB9 公头母头引脚定义及连接、封装
DB9 公头母头引脚定义及连接.封装 转自:http://blog.csdn.net/yangshuodianzi/article/details/8997478 1.实物及引脚简介 在做开发的时候经 ...
- C++函数后面的throw()
看CImage函数实现的时候发现了这么个东东 inline HBITMAP CImage::Detach() throw() 它是函数提供者和使用者的一种君子协定,标明该函数不抛出任何异常. 之所以 ...
- 。net MVC 序列化 反序列化
序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象 ...
- NullPointerException
if(userName.equals("zhansan")){} 可能会报空指针异常