上传者: linew78
|
上传时间: 2025-12-23 10:31:19
|
文件大小: 161KB
|
文件类型: PDF
### 韦根门禁通讯协议详解
#### 一、前言
Wiegand(韦根)协议是一种专用于门禁控制系统中读卡器与卡片间通信的标准协议,由摩托罗拉公司制定。该协议主要关注于数据传输方式,而非具体的通信速率或数据长度。
#### 二、韦根数据输出的基本概念
韦根数据输出通过两条线实现,分别是DATA0和DATA1,这两条线分别用于传输数字“0”和“1”。
- **传输“0”**:DATA0线上会产生一个负脉冲。
- **传输“1”**:DATA1线上会产生一个负脉冲。
- **脉冲参数**:负脉冲宽度TP为100微妙,周期TW为1600微妙。
#### 三、韦根26位输出格式
韦根26位输出格式是当前应用最为广泛的一种格式,具体结构如下:
```
EXXXXXXXXXXXXXXXXXXXXXXXXO
```
- **格式解释**:前12位为偶校验,接下来12位为实际数据(地区码和卡号),最后12位为奇校验。
- **地区码**:如果地区码为2个字符(8位),则可以设置255个不同的地区码。
- **卡号**:如果卡号为4个字符(16位),则可以设置65536个不同的卡号。
以电子卡为例,假设地区码为01,卡号为0001,则韦根输出为:
```
10000000100000000000000010
```
#### 四、韦根26接收
由于韦根协议对接收时间的实时性有较高要求,因此简单的查询方法容易导致数据丢失。为了避免这种情况,推荐使用中断的方式进行接收:
- 当DATA0线上检测到0时,应立即触发中断处理程序,以避免因主程序执行其他任务而导致的数据丢失。
- 中断处理程序应在接收到数据后立即更新接收标志位,以便主程序能够及时响应并正确处理数据。
#### 五、韦根接口定义
Wiegand接口通常包含以下三个组成部分:
- **DATA0**:通常为绿色线,负责传输数字“0”。
- **DATA1**:通常为白色线,负责传输数字“1”。
- **GND**:通常为黑色线,作为信号地。
安装商在连接读卡器和门禁控制面板时,需要确保这些接口清晰可见。
#### 六、发送程序示例
以下是一个将数组封装成韦根26格式的发送程序示例:
```c
void send_wiegand26(uchar *str) {
// 数组到韦根包的转换逻辑
uchar datai;
static uchar dataone_num; // 计算1的个数
uchar datacheck_temp; // 奇偶校验中间暂存
bit even; // 前12位偶校验
bit odd; // 后12位奇校验
static uchar datawiegand[3]; // 韦根包数据24位
// 端口方向定义
P3M0 = 0x00; // 普通I/O口
P3M1 = 0x00;
// 数组到韦根包的转化
wiegand[0] = wiegand[0] | ((*str << 4));
wiegand[0] = wiegand[0] | (*(str + 1) & 0x0f);
// 计算前8位1的个数,为偶校验使用
check_temp = 0;
for (datai = 0; datai < 8; datai++) {
if ((wiegand[0] >> datai) & 0x01) {
check_temp++;
}
}
even = (check_temp % 2 == 0);
// ...后续的奇校验计算和数据发送过程省略...
}
```
通过上述内容,我们可以了解到韦根门禁通讯协议的基本原理及其在门禁系统中的应用。此外,还提供了韦根26位格式的具体结构及数据传输细节,以及如何通过编程实现数据的发送与接收,为开发人员提供了实用的技术指导。