社区导航

 

搜索
查看: 3713|回复: 3

[原创] CH554评测:四,HID例程详解

[复制链接]

1万

TA的帖子

15

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-10-21 13:14 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2017-10-21 13:31 编辑

上次跑了一下HID实例CompatibilityHID,主要是枚举部分。并没有跑全
今天用一个USB HID调试器给它跑完。

在没跑之前,先介绍下USB的数据结构

CH554HID4.jpg
端点描述符的结构
CH554HID2.jpg
HID类描述符的结构
CH554HID3.jpg


那么这些同本例的哪块对应呢?见下边:

  1. /*设备描述符*/
  2. UINT8C DevDesc[18] = {0x12,0x01,0x10,0x01,0x00,0x00,0x00,THIS_ENDP0_SIZE,
  3.                       0x31,0x51,0x07,0x20,0x00,0x00,0x00,0x00,
  4.                       0x00,0x01
  5.                      };
  6. UINT8C CfgDesc[41] =
  7. {
  8.     0x09,0x02,0x29,0x00,0x01,0x01,0x04,0xA0,0x23,               //配置描述符
  9.     0x09,0x04,0x00,0x00,0x02,0x03,0x00,0x00,0x05,               //接口描述符
  10.     0x09,0x21,0x00,0x01,0x00,0x01,0x22,0x22,0x00,               //HID类描述符
  11.     0x07,0x05,0x82,0x03,THIS_ENDP0_SIZE,0x00,0x18,              //端点描述符
  12.     0x07,0x05,0x02,0x03,THIS_ENDP0_SIZE,0x00,0x18,              //端点描述符
  13. };
  14. /*字符串描述符 略*/

  15. /*HID类报表描述符*/
  16. UINT8C HIDRepDesc[ ] =
  17. {
  18.     0x06, 0x00,0xff,
  19.     0x09, 0x01,
  20.     0xa1, 0x01,                                                   //集合开始
  21.     0x09, 0x02,                                                   //Usage Page  用法
  22.     0x15, 0x00,                                                   //Logical  Minimun
  23.     0x26, 0x00,0xff,                                              //Logical  Maximun
  24.     0x75, 0x08,                                                   //Report Size
  25.     0x95, THIS_ENDP0_SIZE,                                        //Report Counet
  26.     0x81, 0x06,                                                   //Input
  27.     0x09, 0x02,                                                   //Usage Page  用法
  28.     0x15, 0x00,                                                   //Logical  Minimun
  29.     0x26, 0x00,0xff,                                              //Logical  Maximun
  30.     0x75, 0x08,                                                   //Report Size
  31.     0x95, THIS_ENDP0_SIZE,                                        //Report Counet
  32.     0x91, 0x06,                                                   //Output
  33.     0xC0
  34. };
复制代码


报表描述符有注释,其它的我剖析如下:
注意:空格的是同下一个字节在一起的
设备描述符:
0x12:长度
0x01:描述符的类型
0x01:
0x00:USB的版本
0x00:设备所使用的类代码
0x00:设备所使用的子类代码
THis_ENDP0_SIZE:缓冲区大小
0x31:
0x51:厂商ID号
0x07:
0x20:产品ID号
0x00:设备ID号
0x00:无厂商字符串
0x00:厂商字符串索引值
0x00:设备序列号字符串索引值 
0x01:设备有多少种配置

配置描述符:
0x09:长度
0x02:描述符编码
0x29:
0x00:整个配置描述符的总长度
0x01:接口的数量
0x01:配置值
0x04:索引值
0xa0:描述设备的一些特性
0x23:设备从总线取得最大电流
接口描述符:
0x09:长度
0x04:描述符编码
0x00:接口编号
0x02:备用编号
0x03:
0x00:
0x00:类,子类,协议
0x05:字符串索引值
端点描述符:
0x07:长度
0x05:端点描述符代码05
0x82:表示端点地址:最高位D7为端点的传输方向D3-D0为端点号
0x03:表示传输类型:D1-D3:0:控制,1等时,3中断
This_ENDP0_SIZE:最大包长
0x00:
0x18:查询帧的间隔
HID描述符:
0x09:长度
0x21:HID描述符代码
0x08:
0x01:HID版本号
0x00:所适用国家
0x01:下一级描述符数量,最小1
0x22:下一级描述符类型0x22报告0x23物理
0x22:
0x00:下一级描术符长度

下边是用《单片机多功能调试助手》来调试这个例程的截图:
CH554HID.jpg

可见我发64个数后,HID单片机方面反回了64个数,怎么是这样我就不得而知:
从例程里是取反:
  1. case UIS_TOKEN_OUT | 2:                                                 //endpoint 2# 端点批量下传
  2.             if ( U_TOG_OK )                                                     // 不同步的数据包将丢弃
  3.             {
  4.                 len = USB_RX_LEN;                                               //接收数据长度,数据从Ep2Buffer首地址开始存放
  5.                 for ( i = 0; i < len; i ++ )
  6.                 {
  7.                     Ep2Buffer[MAX_PACKET_SIZE+i] = Ep2Buffer[i] ^ 0xFF;         // OUT数据取反到IN由计算机验证
  8.                 }
  9.                 UEP2_T_LEN = len;
  10.                 UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_ACK;       // 允许上传
  11.             }
  12.             break;
复制代码


好了这次到这里了,已经跑完整了该例程。

奥充补下:原因找到通过HOUND找到,原来没有点HEX发送 CH554HID5.jpg

下边的截图是正确的:
CH554HID6.jpg
此内容由EEWORLD论坛网友ddllxxrr原创,如需转载或用于商业用途需征得作者同意并注明出处



此帖出自单片机论坛
http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复

使用道具 举报

9976

TA的帖子

133

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2017-10-23 09:38 | 显示全部楼层
汇总贴在此:
CH554评测—by ddllxxrr
http://bbs.eeworld.com.cn/forum. ... 7444&fromuid=536508
(出处: 电子工程世界-论坛)

玩板看这里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!


回复

使用道具 举报

308

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-10-23 11:53 | 显示全部楼层
CH554系列USB实用例程请参考:http://bbs.eeworld.com.cn/thread-571344-1-1.html
单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301

回复

使用道具 举报

26

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2020-3-24 18:11 | 显示全部楼层

这个流程不是很明白,

为什么单片机要主动发送Enp2BlukIn()?不是PC要什么才发什么吗?


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-3-29 23:19 , Processed in 0.170515 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表