- 中文名
- 韦根协议
- 外文名
- Wiegand
- 适 用
- 涉及门禁控制系统的读卡器等
- 制 定
- 摩托罗拉公司
- 类 型
- 一种通讯协议
简介
播报编辑
Wiegand协议是国际上统一的标准射符,有很多格式,标准的26-bit 应该是最常用的格式。此外,还有34-bit 、37-bit 等格式。格式的含义如下:当给出这一串数字,用户并不知道这串数字的含义,但如果说这是一个电话号码的时候,那么你可能就会说:哦,028是成都的区号,而88888888是电话号码。但是安防行业并不愿意把这些格式公开,而安防公司也常兰采协常变化这些格充炼堡式来保证产品的保密性拘愚润。
而标准26-bit 格式是一个开放式的格式,这就意味着任何人都可以购买某一特定元体照格式的HID卡,并且这些特定格式的种类是公开可选的。26-Bit格式就乌境促是一个广泛使用的工业标准,并且对所有HID的用户开主翻放。几乎所有的门禁控制系统都接受标准甩厦签腿的26-Bit格式。
Wiegand(韦根)协议是由摩托罗拉公司制定的一种通讯协议,它适用于涉及门禁控制系统的读卡器和卡片的许多特性;其协议并没有定义通讯的波特率、也没有定义数据。长度韦根格式主要定义是数据传输方式:Data0和Data1两根数据线分别传输0和1.现应用最多的是26bit,34bit,36bit,44bit等等。
基本概念
播报编辑
韦根数据输出由二根线组成,分别是DATA0 和 DATA1 ;二根线分别为‘0’或‘1’输出。
输出‘1’时:DATA1线上出现负脉冲;
具体时序如下:
例如:数据‘01000’的时序如下:
输出格式
播报编辑
E XXXX XXXX XXXX XXXX XXXX XXXX O
以上数据从左至右顺序发送。高位在前。
如果电卡的地区码位2个字符,即8位则可用那设置255个地区码(15x16)+15=255电子卡的卡
号位4个字符,即16位则可设置65535个卡号
(15x16x16x16)+(15x16x16)+(15x16)+15= 65,535
以电子卡为标准26位韦根格式为例,假设电子卡号码为:
地区码 :01 卡号:0001
韦根输出为:1 0000 0001 0000 0000 0000 0001 0
前12BIT偶校验 前12位 后12位 后12BIT奇校验
地区码 卡号
26接收
播报编辑
办法是在外部中断里接收每个bit。
韦根 接口定义
Wiegand接口界面由三条导线组成:
DATA0:暂定,蓝色,P2.5 (通常为绿色)。
DATA1:暂定,白色,P2.6 (通常为白色)。
当前所有的标准型读卡器都提供可选择的Wiegand接口。这三条线负责传送Wiegand数据,也被称为
Wiegand信号。
发送程序
//功能:把数组封包成韦根26的格式,并发送出去
// 原理是把每个字节的低4位取出,来计算这个字节的值
//入口:str=要封包的数组,
//出口:DATA0P3.0;DATA1=P3.1
//设计:大鹏,大鹏艾迪,2006/4/11
void delay_100us(void)
{
//-------------------------延时100us
TR0 = 0;
TH0 = (65536 - 78)/256; //定时100us
TL0 = (65536 - 78)%256;
TF0 = 0;
ET0 = 0;
TR0 = 1;
while (!TF0) { ;}
}
void delay_1500us(void)
{
TR0 = 0;
TH0 = (65536 - 1382)/256; //定时1500us
TL0 = (65536 - 1382)%256;
TF0 = 0;
ET0 = 0;
TR0 = 1;
while (!TF0) { ;}
}
void WG_send_bit_1(void)
{
WG_DATA1 = 0;
//----------------------延时100us
delay_100us();
WG_DATA1 = 1;
//-------------------------------延时一个发送周期
delay_1500us();
}
void WG_send_bit_0(void)
{
WG_DATA0 = 0;
//----------------------延时100us
delay_100us();
WG_DATA0 = 1;
//-------------------------------延时一个发送周期
delay_1500us();
}
void send_wiegand26(uchar *str)
{
//| wiegand[0] | wiegand[1] | wiegand[2] |
//| *str *(str + 1) | *(str + 2) *(str + 3)| *(str + 4) *(str + 5)|
uchar data i;
uchar data check_temp; //韦根包奇偶效验中间暂存
bit data even; //韦根包前12位偶效验
bit data odd; //韦根包后12位齐效验
uchar data wiegand[3]; //韦根包数据24位
//--------------------------------端口方向定义
P3M0 = 0x00; //普通I/O口
P3M1 = 0x00;
//================================数组到韦根包的转化
wiegand[0] = wiegand[0]|((*str)<<4);//原理是把每个字节的低4位取出,来计算这个字节的值
wiegand[0] = wiegand[0]|(*(str+1)&0x0f);
wiegand[1] = wiegand[1]|(*(str+2)<<4);
wiegand[1] = wiegand[1]|(*(str+3)&0x0f)
wiegand[2] = wiegand[2]|(*(str+4)<<4);
wiegand[2] = wiegand[2]|(*(str+5)&0x0f);
//--------------------------------计算前12位1的个数是否为偶数,为偶效验用
check_temp = wiegand[1]&0xf0;
check_temp ^= wiegand[0];
check_temp ^= check_temp>>4;
check_temp ^= check_temp>>2;
check_temp ^= check_temp>>1;
even=!(check_temp&1);
//--------------------------------计算后12位1的个数是否为偶数,为奇效验用
check_temp = wiegand[1]&0x0f;
check_temp ^= wiegand[2];
check_temp ^= check_temp>>4;
check_temp ^= check_temp>>2;
check_temp ^= check_temp>>1;
odd=check_temp&1;
//================================启动发送,用定时器做时间延时
//--------------------------------韦根 输出端初始化
WG_DATA0 = 1;
WG_DATA1 = 1;
//--------------------------------发送偶效验
if(even)
{
WG_send_bit_1();
}
else
{
WG_send_bit_0();
}
//-------------------------------发送24位数据
for(i = 0;i<24;i++)
{
//---------------------------韦根 输出端初始化
if((wiegand[0])&0x80)
{
WG_send_bit_1();
}
else
{
WG_send_bit_0();
}
(*(long*)&wiegand[0]) <<= 1;
}
//==============================发送奇效验位
if(odd)
{
WG_send_bit_1();
}
else
{
WG_send_bit_0();
}
}
韦根接口
播报编辑
Wiegand接口通常由3根线组成,它们是:数据0(Data0),数据1(Data1)和 Data return。这3条线负责传输Wiegand信号。D0,D1在没有数据输出时都保持+5V高电平。若输出为0,则D0拉低一段时间,若输出为1,则D1拉低一段时间。
两个电子卡韦根输出之间的最小间隔为0.25秒。
通讯协议
播报编辑
1 2 9 10 25 26
X X X X X X X X X X X X X X X X X X X X X X X X X X 二进制
第2—9位对应与电子卡HID码的低8位
第10-25位对应电子卡的PID号码
第26位为14-25位的奇校验位
这26位数据在读出器的韦根输出线D0,D1上输出。
HID和PID
播报编辑
HID号码即Hidden ID code 隐含码,PID号码即Public ID code 公开码。PID很容易在读出器的输出结果中找到,但HID在读出器的输出结果中部分或者全部隐藏在这个读卡器上正常工作。
硬件设计
播报编辑
可以将Wiegand接口的Data0和Data1两个输出接到MCU的两个IO脚上,采用查询的方式接收数据,但这样接收并不可靠。比较好的方法是将Data0和Data1接到MCU的两个中断引脚上,采用中断的方式接收数据。
韦根信号是两根数据线传输二进制数据,在空闲时段,两线的对0V的电源都为TTL电平的水平,也就是5V,一般通过5K电阻上拉,当有数据传输时,两根线交替地发送100uS低脉冲,当Data0线发脉冲时,数据是0;当Data1发脉冲时,发送的数据是1,不能两根线同时发脉冲。脉冲的间隔时间是1ms。
韦根传感器
播报编辑
韦根26是一种通讯协议,像MODBUS、TCP/IP等通讯协议一样.