一、概述:

Wiegand(韦根)协议是由摩托罗拉公司制定的一种通讯协议,它适用于涉及门禁控制系统的读卡器和卡片的许多特性;其协议并没有定义通讯的波特率、也没有定义数据长度。韦根格式主要定义是数据传输方式:Data0 和 Data1 两根数据线分别传输 0 和 1. 26bit,34bit36bit,44bit 等等。

二、Wiegand

Wiegand接口通常由3根线组成,它们是:数据0(Data0),数据1(Data1)和 Data return。这3条线负责传输Wiegand信号。D0,D1在没有数据输出时都保持+5V高电平。若输出为0,则D0拉低一段时间,若输出为1,则D1拉低一段时间。

输出‘0DATA0

输出‘1DATA1

负脉冲宽度 TP=100 TW=1600

具体时序如下:

例如:数据‘01000

三、标准26 Wiegand

标准韦根输出是由26位二进制数组成,每一位的含义如下:

1 2                   9 10                                         25 26
E X X X X X X X X X X X X X X X X X X X X X X X X O        二进制

第1位为2—13位的偶校验位
第2—9位对应与电子卡HID码的低8位
第10-25位对应电子卡的PID号码
第26位为14-25位的奇校验位
这26位数据在读出器的韦根输出线D0,D1上输出。

以上数据从左至右顺序发送。高位在前。

四、韦根 26

DATA0为 0 DATA0 1 0 bit CPU ID 唯一的办法是在外部中断里接收每个 bit。 (仅仅在中断里获得开始接收 wiegand 数据还不行,因为这是尽管给开始接收 wiegand 数据标志位置位了,但是主程序还在执行其他代码而没有到达查询开始接收 wiegand 数据标志位这条指令)。

五.韦根接口定义:

Wiegand 接口界面由三条导线组成:

DATA0:暂定,兰色,P2.5

DATA1:暂定,白色,P2.6

GND:(通常为黑色), 暂定信号地。 当安装商拿到读卡器时,他们希望在读卡器和门禁控制面板的连接点(终端)上都能够看到这三个名称。

目前所有的标准型读卡器都提供可选择的 Wiegand 接口。这三条线负责传送 Wiegand 数据,也被称为Wiegand 信号。

代码仅供参考,没有实测,实际应用时,做发送,注意延时。做接收,一般用中断采集数据。

  1. 发送程序:
  2. //------------------------------------------------------
  3. //功能:把数组封包成韦根 26 的格式,并发送出去
  4. // 原理是把每个字节的低 4 位取出,来计算这个字节的值
  5. //入口:str=要封包的数组,
  6. //出口:DATA0P3.0;DATA1=P3.1
  7. //设计:大鹏,大鹏艾迪,2006/4/11
  8. //------------------------------------------------------
  9. void send_wiegand26(uchar *str)
  10. {
  11. //| wiegand[0] | wiegand[1] | wiegand[2] |
  12. //| *str *(str + 1) | *(str + 2) *(str + 3)| *(str + 4) *(str + 5)|
  13. uchar data i;
  14. static uchar data one_num; //计算 1 的个数
  15. uchar data check_temp; //韦根包奇偶效验中间暂存
  16. bit data even; //韦根包前 12 位偶效验
  17. bit data odd; //韦根包后 12 位齐效验
  18. static uchar data wiegand[3]; //韦根包数据 24 位
  19. //--------------------------------端口方向定义
  20. P3M0 = 0x00; //普通 I/O 口
  21. P3M1 = 0x00;
  22. //================================数组到韦根包的转化
  23. wiegand[0] = wiegand[0]|((*str)<<4);//原理是把每个字节的低 4 位取出,来计算这个字节的值
  24. wiegand[0] = wiegand[0]|(*(str+1)&0x0f);
  25. //--------------------------------计算前 8 位 1 的个数,为偶效验用
  26. check_temp = wiegand[0];
  27. for(i = 0;i<8;i++)
  28. {
  29. if(check_temp&0x01) //(check_temp&0x01)
  30. {
  31. one_num++;
  32. }
  33. check_temp >>= 1;
  34. }
  35. wiegand[1] = wiegand[1]|(*(str+2)<<4);
  36. //--------------------------------计算接下来的 4 位 1 的个数,为偶效验用
  37. check_temp = wiegand[1];
  38. for(i = 0;i<4;i++)
  39. {
  40. if(check_temp&0x80)
  41. Copyright(C) 2006-2007 DAPID. All Rights Reserved
  42. 3
  43. {
  44. one_num++;
  45. }
  46. check_temp<<=1;
  47. }
  48. //--------------------------------判断 1 的个数
  49. one_num%2 == 0 ? (even = 0):( even = 1);
  50. one_num = 0;
  51. wiegand[1] = wiegand[1]|(*(str+3)&0x0f);
  52. //--------------------------------计算接下来的 4 位 1 的个数,为奇效验用
  53. check_temp = wiegand[1];
  54. for(i = 0;i<4;i++)
  55. {
  56. if(check_temp&0x01)
  57. {
  58. one_num++;
  59. }
  60. check_temp>>=1;
  61. }
  62. wiegand[2] = wiegand[2]|(*(str+4)<<4);
  63. wiegand[2] = wiegand[2]|(*(str+5)&0x0f);
  64. //--------------------------------计算接下来的 8 位 1 的个数,为奇效验用
  65. check_temp = wiegand[2];
  66. for(i = 0;i<8;i++)
  67. {
  68. if(check_temp&0x01)
  69. {
  70. one_num++;
  71. }
  72. check_temp >>= 1;
  73. }
  74. //--------------------------------判断 1 的个数
  75. one_num%2 == 0 ? (odd = 1):( odd = 0);
  76. one_num = 0;
  77. //================================启动发送,用定时器做时间延时
  78. //--------------------------------韦根 输出端初始化
  79. WG_DATA0 = 1;
  80. WG_DATA1 = 1;
  81. //--------------------------------发送偶效验
  82. if(even)
  83. {
  84. WG_DATA1 = 0;
  85. //-------------------------延时 100us
  86. TR0 = 0;
  87. TH0 = (65536 - 78)/256; //定时 100us
  88. TL0 = (65536 - 78)%256;
  89. TF0 = 0;
  90. ET0 = 0;
  91. TR0 = 1;
  92. while (!TF0) { ;}
  93. TF0 = 0;
  94. WG_DATA1 = 1;
  95. }
  96. else
  97. {
  98. WG_DATA0 = 0;
  99. //------------------------延时 100us
  100. TR0 = 0;
  101. TH0 = (65536 - 78)/256; //定时 100us
  102. TL0 = (65536 - 78)%256;
  103. TF0 = 0;
  104. ET0 = 0;
  105. TR0 = 1;
  106. while (!TF0) { ;}
  107. TF0 = 0;
  108. WG_DATA0 = 1;
  109. }
  110. //----------------------------延时一个发送周期
  111. TR0 = 0;
  112. TH0 = (65536 - 1382)/256; //定时 1500us
  113. TL0 = (65536 - 1382)%256;
  114. TF0 = 0;
  115. ET0 = 0;
  116. TR0 = 1;
  117. while (!TF0) { ;}
  118. TF0 = 0;
  119. //-------------------------------发送 24 位数据
  120. for(i = 0;i<24;i++)
  121. {
  122. //---------------------------韦根 输出端初始化
  123. WG_DATA0 = 1;
  124. WG_DATA1 = 1;
  125. if((wiegand[0])&0x80)
  126. {
  127. WG_DATA1 = 0;
  128. //----------------------延时 100us
  129. TR0 = 0;
  130. TH0 = (65536 - 78)/256; //定时 100us
  131. TL0 = (65536 - 78)%256;
  132. TF0 = 0;
  133. ET0 = 0;
  134. TR0 = 1;
  135. while (!TF0) { ;}
  136. TF0 = 0;
  137. WG_DATA1 = 1;
  138. }
  139. else
  140. {
  141. WG_DATA0 = 0;
  142. //---------------------延时 100us
  143. TR0 = 0;
  144. TH0 = (65536 - 78)/256; //定时 100us
  145. TL0 = (65536 - 78)%256;
  146. TF0 = 0;
  147. ET0 = 0;
  148. TR0 = 1;
  149. while (!TF0) { ;}
  150. TF0 = 0;
  151. WG_DATA0 = 1;
  152. }
  153. (*(long*)&wiegand[0]) <<= 1;
  154. //-------------------------------延时一个发送周期
  155. TR0 = 0;
  156. TH0 = (65536 - 1382)/256; //定时 1500us
  157. TL0 = (65536 - 1382)%256;
  158. TF0 = 0;
  159. ET0 = 0;
  160. TR0 = 1;
  161. while (!TF0) { ;}
  162. TF0 = 0;
  163. }
  164. //==============================发送奇效验位
  165. //------------------------------韦根 输出端初始化
  166. WG_DATA0 = 1;
  167. WG_DATA1 = 1;
  168. if(odd)
  169. {
  170. WG_DATA1 = 0;
  171. //-------------------------延时 100us
  172. TR0 = 0;
  173. TH0 = (65536 - 78)/256; //定时 100us
  174. TL0 = (65536 - 78)%256;
  175. TF0 = 0;
  176. ET0 = 0;
  177. TR0 = 1;
  178. while (!TF0) { ;}
  179. TF0 = 0;
  180. WG_DATA1 = 1;
  181. }
  182. else
  183. {
  184. WG_DATA0 = 0;
  185. //-------------------------延时 100us
  186. TR0 = 0;
  187. TH0 = (65536 - 78)/256; //定时 100us
  188. TL0 = (65536 - 78)%256;
  189. TF0 = 0;
  190. ET0 = 0;
  191. TR0 = 1;
  192. while (!TF0) { ;}
  193. TF0 = 0;
  194. WG_DATA0 = 1;
  195. }
  196. }

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

阅读(2262) | 评论(0) | 转发(2) |

0

上一篇:ubuntu10.04安装配置tftp服务

下一篇:spi协议

相关热门文章
  • linux 常见服务端口
  • xmanager 2.0 for linux配置
  • 【ROOTFS搭建】busybox的httpd...
  • openwrt中luci学习笔记
  • 什么是shell
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议

韦根协议 wiegand相关推荐

  1. 韦根Wiegand协议

    在门禁系统中,我们常常会碰到使用韦根接口对讲第三方设备的情况,但是很多小伙伴还不明白韦根到底是啥?今天小编就一次性给大家说明白韦根协议和韦根通信接口以及韦根26协议.34协议的区别还有韦根信号的传输距 ...

  2. Wiegand 协议

    Wiegand26以及Wiegand34协议, 是由美国工业安全委员会SIA的隶属组织制定的一个关于存取控制的标准协议.非接触式IC卡读写器接口和输出,也采用了该协议标准. 常用到的场合在ID卡的读取 ...

  3. 韦根w34是多少位_韦根接口读卡器说明书

    距离读卡器颜色为:银白色 QZ-8600B 与 QZ-8600 蓝牙远距离读卡器颜色为:可乐红. 蓝色.橙色.黄色 读卡最大距离:1-20 米 标签协议:CDMA 接口类型:韦根 26/...... ...

  4. 基于STC89C52的韦根数据接收

    韦根是一种开放的通讯协议,具体官方介绍如下: Wiegand协议是国际上统一的标准,有很多格式,标准的26-bit 应该是最常用的格式.此外,还有34-bit .37-bit 等格式.格式的含义如下: ...

  5. [通信技术资料]基于STC89C52的韦根数据接收

    韦根是一种开放的通讯协议,具体官方介绍如下: Wiegand协议是国际上统一的标准,有很多格式,标准的26-bit 应该是最常用的格式.此外,还有34-bit .37-bit 等格式.格式的含义如下: ...

  6. 韦根接口,韦根34,韦根26原理介绍

    1韦根接口 Wiegand接口通常由3根线组成,它们分别是:数据0(Data0),数据1(Data1)和 Data return.这3条线负责传输Wiegand信号.D0,D1在没有数据输出时都保持+ ...

  7. RK3288 7.1韦根 26位发送

    以下代码为韦根26位发送代码,实际项目已经验证过,发送部分没有经过验证,思路可参考,实际调试过程如果有问题,建议使用示波器抓波形,按26位韦根协议对比波形调试,按部就班即可完成. #include & ...

  8. rs232接口_RS232协议和RS485协议的区别与应用,看这一篇就够了!

    我们在弱电系统中经常会接触到很多通讯协议,如:RS232协议.RS422协议.RS485协议.韦根协议.TCP/IP协议等多种协议,今天为大家分享一下弱电工程中最为常用的RS232协议和RS485协议 ...

  9. Arduino 硬件开发 教程收集

    初识arduino   http://www.arduino.cn/thread-1083-1-1.html 关于Arduino及其周边配件的购买建议 http://www.arduino.cn/th ...

  10. 使用二维码识别技术的好处_二维码门禁你知道支持多少种识别方式

    时代在进步,随着移动互联网的蓬勃发展,手机成为我们生活中必不可少的工具.二维码门禁应运而生,它是安防市场的创新发展者,也是二维码门禁系统的一个重要设备.那么一个二维码门禁读卡器到底支持多少种识别方式呢 ...

最新文章

  1. 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?...
  2. 带你进入String类的易错点和底层本质分析!
  3. 服务器负载均衡的基本功能和实现原理
  4. 虚拟服务器安装TCP加速脚本
  5. 热释电传感器三个引脚_Adafruit的树莓派教程:热释电传感器感知运动
  6. Optaplanner终于支持多线程并行运行 - Multithreaded incremental solving
  7. 数据库(三),底层算法
  8. oracle数据库dca,有关Oracle数据库
  9. 816D.Karen and Test 杨辉三角 规律 组合
  10. paip.手写OCR识别方法总结--基于验证码识别... 1
  11. ambari 2.7 下安装httpfs
  12. 在excel中如何筛选重复数据_如何将Excel重复数据筛选出来?简单技巧有三种!...
  13. 发射光功率和接收灵敏度对光模块的实际使用有什么影响?
  14. List接口(ArrayList集合和LinkedList集合)
  15. [NPUCTF2020]碰上彩虹,吃定彩虹
  16. 【有利可图网】PS实战教程26:1分钟搞定抠头发丝,超简单!
  17. WPF3D图片轮播效果
  18. Python中的类、实例以及方法,MRO继承解析顺序以及Mixin类
  19. android监控app被杀死,Android App前后台监控
  20. ClickHouse 数据插入、更新与删除操作 SQL

热门文章

  1. [渝粤教育] 西南科技大学 机械设计基础 在线考试复习资料
  2. ​【预测模型】基于粒子群算法优化最小二乘支持向量机实现数据分类matlab代码
  3. 01 - 雷达回波中的可用信息
  4. erroe C1083:无法打开包括文件(源文件)
  5. pdfFactory 7PDF 虚拟打印机官方注册码版下载
  6. 信道检测手机软件 ios_【对讲机的那点事】宝峰UV5R对讲机上中继台的信道存储设置方法...
  7. iis 域名无法访问
  8. 糖葫芦低通滤波器的设计
  9. HTML页面的全屏显示-Fullscreen API
  10. 基本农田卫星地图查询_gps卫星信号模拟器如何gps信号