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

#include <stdio.h>
#include <string.h> //附录 A CRC16校验C程序代码
// #define RUF_MASK 0x 80
//x^16 + 12 5 1
//
#define POLYNOMIAL 0x8408
#define PRESET_VALUE 0xFFFF
#define CHECK_VALUE 0xF0B8
#define CALC_CRC 0x1
#define CHECK_CRC 0x0 unsigned short calc_crc(unsigned char byte_len, unsigned char *data_byte); //
unsigned short calc_crc(unsigned char byte_len, unsigned char *data_byte)
{
unsigned short current_crc_value;
unsigned short i, j;
current_crc_value = PRESET_VALUE;
for (i = 0; i < byte_len; i++)
{
current_crc_value = current_crc_value ^ data_byte[i];
for (j = 0; j < 8; j++)
{
if (current_crc_value & 0x0001)
{
current_crc_value = (current_crc_value >> 1) ^ POLYNOMIAL;
}
else
{
current_crc_value = (current_crc_value >> 1);
}
}
}
current_crc_value = ~current_crc_value;
return (current_crc_value);
} int main(int argc, char const *argv[])
{
unsigned short res1 = 0, res2 = 0;
/* code */
//0c 7e 55 09 00 00 01 00 16 00 00 78 77
unsigned char send_buffer[] = {0x09, 0x00, 0x00, 0x01, 0x00, 0x16, 0x00, 0x00}; //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
unsigned char recv_buffer[] = {0x19, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x16, 0x00,
0x04, 0x00, 0x04, 0x76, 0xb9, 0xc7, 0x4a, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00}; res1 = calc_crc(sizeof(send_buffer), send_buffer);
res2 = calc_crc(sizeof(recv_buffer), recv_buffer);
printf("send crc result is msb-->%#2X lsb-->%#2X\n", res1 / 256, res1 % 256);
printf("recv crc result is msb-->%#2X lsb-->%#2X\n", res2 / 256, res2 % 256); getchar();
return 0;

4.总结

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

原创:USB HID读卡器数据解析(R321-13.56MHZ读卡器)的更多相关文章

  1. VC++ 6.0 C8051F340 USB 通信 CAN 数据解析

    // HelloWorld.cpp : Defines the entry point for the console application. // /*********************** ...

  2. USB HID设备报告描述符详解(转)

    转自:http://group.ednchina.com/93/198.aspx. 参考:USB HID usage table 概述:   报告在这里意思是数据传输(data transfer),而 ...

  3. C#进阶——记一次USB HID的各种坑(x86,x64,win10,win7)

    一.简叙 写工控上位机的搬砖人,难免会遇到USB通讯,在一个项目中,我写的上位机使用USB HID协议和STM32通讯传输数据,从零大概花了几天找例程,找资料,最后是各种搬砖修补,终于出来了一个出版D ...

  4. USB HID Report Descriptor 报告描述符详解

    Report descriptors are composed of pieces of information. Each piece of information is called an Ite ...

  5. (八) Usb摄像头描述符解析

    目录 Usb摄像头描述符解析 总结 参考资料 打印设备描述符 打印配置描述符 打印接口联合体描述符 打印接口描述符 打印当前设置的额外描述符 代码解析额外的描述符 打印端点描述符 title: Usb ...

  6. JSON三种数据解析方法(转)

    原 JSON三种数据解析方法 2018年01月15日 13:05:01 zhoujiang2012 阅读数:7896    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  7. 史上最全USB HID开发资料

    史上最全USB HID开发资料 史上最全USB HID开发资料,悉心整理一个月,亲自测试. 涉及STM32 C51 8051F例子都有源码,VC上位机例子以及源码,USB协议,HID协议,USB抓包工 ...

  8. JSON数据解析(转)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android ...

  9. JSON数据解析(GSON方式) (转)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...

  10. USB HID介绍【转】

    本文转载自:http://blog.csdn.net/leo_wonty/article/details/6721214 HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复 ...

随机推荐

  1. 【1】第一篇 Postman的初级使用之设置环境快速切换生成环境与测试环境

    POSTMAN是有谷歌的开源工具,在开发调试.测试执行过程中使用频率非常广泛,本文将记录一些postman在测试中常见的一些配置和使用方法 一.基本的页面区域 略,很简单,大家都会看,再有,学习下面的 ...

  2. 数据库多表连接查询中使用group by分组语句,Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'XXX' which is not functionally dependent on columns in GROUP BY claus

    需求描述: 要是用两表联合查询,并对查询的结果进行分组:sql如下: 1 SELECT 2 a.`id`, 3 a.`fr_num`, 4 b.`ent_status` 5 FROM 6 `table ...

  3. matlab简单区间列频数统计输出

    最近的一个作业要有这个输出计算,直接拿来用的函数没怎么找到,合计着就编一个吧,没多少时间仔细编,但能用. 程序支持:Matlab2019b,以往的版本应该也能用. function [d,zb1,ps ...

  4. java之路总结

    2019-12-5 20:50:47 2019-10-7 18:01:37 总结学习java的各种知识! 越努力,越幸运! 永远不要高估自己! 吃的苦中苦,方为人上人! java基础 java进阶 j ...

  5. 3dsmax+vray5进行分布式渲染

    环境 我的两台电脑软件是一样的:win11 + 3ds max 2020 + vray5 update 2.2. 台式机1硬件是12900 + RTX 3080 Ti,台式机2硬件是12900KF + ...

  6. .net core layui折叠表格的应用。

    效果展示 头部的折叠,展开,搜索按钮 <div class="layui-fluid"> <div style="margin-top: 20px;&q ...

  7. [2] Bert 论文精读

    BERT是NLP领域让预训练这件事情出圈的工作. 开篇Introduction介绍了两类主流的预训练方法: 1.feature-based,即基于特征的,即我首先通过预训练得到一些比较好的特征,然后将 ...

  8. ubuntu新建的用户的终端前不能/没有显示路径

    在/etc/passwd中找到相应用户,并将/bin/sh改为/bin/bash.然后重启

  9. PowerShell Regex

    PowerShell默认按每一行遍历去匹配模式 比如"aaa`nbbb"用"a.*b"是匹配不到的 需要用"(?s)a.*b"来匹配 1. ...

  10. 【ubuntu20】解压文件

    第一类处理 *** .zip或 ***.rar 时,需要先下载相对应的unzip和unrar,可在终端,执行 sudo apt-get install unzipsudo apt-get instal ...