zoukankan      html  css  js  c++  java
  • 原创:USB HID读卡器数据解析(R321-13.56MHZ读卡器)

    1.工具准备

    USB 监视软件:Device Monitoring Studio7.25

    PC端软件:单片机多功能调试助手

    2.发送数据包

     接收数据包

    3.数据分析

    usb hid(pc软件)发送帧(payload)数据解析:

    payload总长度为64字节

    0c 7e 55 09 00 00 01 00 16 00 00 78 77 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    0c -->发送一帧数据的长度(0c为发送的实际有效数据长度)
    7e 55 -->帧头是指示一数据的开始,值为0x7E55
    09 -->长度是从源地址开始到CRC结束(包含 CRC )的字节数
    00 00 -->源地址指示发出本帧数据的设备
    01 00 -->目标地址指示接收本帧数据的设备
    16 -->读取 ISO14443A标签UID
    00 -->保留固定为0x00
    00 -->读取空闲标签
    78 77 -->CRC为从帧长度开始(含)到参数区结束的CRC校验,具体算法见附录 A

    usb hid(R321-13.56MHZ读卡器)响应帧(payload)数据解析:

    payload总长度为64字节

    1c 7e 55 19 01 00 00 00 1f 16 00 04 00 04 76 b9
    c7 4a 00 00 00 00 00 00 08 00 00 87 f4 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    1c -->接收一帧数据的长度(1c为接收到的实际有效数据长度)
    7e 55 -->帧头是指示一数据的开始,值为0x7E55
    19 -->长度是从源地址开始到CRC结束(包含 CRC )的字节数
    01 00 -->源地址指示发出本帧数据的设备
    00 00 -->目标地址指示接收本帧数据的设备
    1f -->响应帧标志
    16 -->读取 ISO14443A标签UID
    00 -->保留固定为0x00
    04 00 04 76 b9 c7 4a 00 00 00 00 00 00 08 00 00 -->标签进入场内响应帧参数
    87 f4 -->CRC为从帧长度开始(含)到参数区结束的CRC校验,具体算法见附录 A

     1 附录 A CRC16A CRC16A CRC16A CRC16A CRC16A CRC16A CRC16A CRC16校验 C程序代码
     2 // #define RUF_MASK 0x 80
     3 //x^16 + 12 5 1
     4 //
     5 #define POLYNOMIAL 0x 8408
     6 #define PRESET_VALUE 0x FFFF
     7 #define CHECK_VALUE 0x F0B8
     8 #define CALC_CRC 0x 1
     9 #define CHECK_CRC 0x 0
    10 //
    11 unsigned calc_crc( int byte_len, *data_byte)
    12 {
    13     unsigned int current_crc_value;
    14     unsigned int i,j;
    15     current_crc_value=PRESET_VALUE;
    16     for(i=0;i<byte_len;i++)
    17     {
    18         current_crc_value=value^data_byte[i];
    19         for(j=0;j<8;j++)
    20         {
    21             if(current_crc_value& 0x 0001)
    22             {
    23                 current_crc_value=(value>>1)^POLYNOMIAL;
    24             }
    25             else
    26             {
    27                 urrent_crc_value=(value>>1);
    28             }
    29         }
    30     }
    31     current_crc_value = ~curr ent_crc_value;
    32     return(current_crc_value);
    33 }

    4.总结

    usb通讯需要进行两次数据交互才能读取到数据
    1.usb hid发送者(PC或其他设备)发送数据包给usb hid接收者(PC或其他设备),usb hid接收者发送接收到发送者发来的消息的确认信息给发送者
    2.usb hid接收者(PC或其他设备)回复数据包给usb hid发送者(PC或其他设备),usb hid发送者回复接收者发来的数据包的确认信息给接收者
    注:这里主要关心发送者和接收者发送数据包中的payload消息

  • 相关阅读:
    filter&map&reduce
    Linux通过进程ID查看文件路径
    PyCharm使用最多也最常用默认快捷键介绍
    Python中的深浅拷贝
    类加载器&反射
    Java web.xml 配置详解
    SpringMVC + Spring + MyBatis 整合 + Spring shrio + easyUI + 权限管理框架,带shrio session和shrio cache集群实现方案
    JAVA大数据数组排序
    高访问量WEB开发中的架构模式,学习从点滴开始
    WEB项目会话集群的三种办法
  • 原文地址:https://www.cnblogs.com/TonyJia/p/13650279.html
Copyright © 2011-2022 走看看