6826|5

257

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【沁恒试用】USB HID 的实现 [复制链接]

  本帖最后由 viphotman 于 2019-7-24 13:57 编辑

通过触摸按键来模拟鼠标左右键;

文件结构:

主要是综合了gpio,touch ,usb几个demo的功能;

GPIO部分是LED控制;

TOUCH是用来当按键;

USB用HID转鼠标左右按下与释放;

看USB描述符;

下图为结构图;从USB 协议里截图而来

有:设置描述符,配置描述符;接口描述符,端点描述符,HID描述符,HID报告,字符串描述符;

接口描述时的鼠标键盘类

下面对描述符部分注释一下;

/*
// USB 描述符
// 1 设备描述符(=1)
// 2 配置描述符(=2)
// 3 字符串描述符(=3)
// 4 接口描述符(4)
// 5 端点描述符(5)
// 
// HID描述符(0x21)
*/

/*设备描述符*/
UINT8C DevDesc[] = { 
0x12, //长度
0x01, //类型:设备描述符(=1)
0x10, 0x01, // USB 协议版本 低8位在前
0x00,//类代码 
0x00,//子类代码
0x00,//设备使用的协议
THIS_ENDP0_SIZE, //端点0最大包长
0x86,0x1a,// 厂商  VID
0xe1,0xe6,// 产品 PID 
0x00,0x01,//设备版本号
0x01,//字符串索引 :描述厂商
0x02,//字符串索引 :描述产品
0x00,//字符串索引 :产品序列
0x01 //配置数
                   };
/*字符串描述符*/
UINT8C  MyLangDescr[] = { 0x04, 0x03, 0x09, 0x04 };                                    // 语言描述符
UINT8C  MyManuInfo[] = { 0x0E, 0x03, 'w', 0, 'c', 0, 'h', 0, '.', 0, 'c', 0, 'n', 0 }; // 厂家信息
UINT8C  MyProdInfo[] = { 0x0C, 0x03, 'C', 0, 'H', 0, '5', 0, '4', 0, '9', 0 };         // 产品信息
/*配置描述符*/
UINT8C CfgDesc[] =
{
    0x09,0x02,//此描述符长度 ,配置描述符
	0x3b,0x00,//配置描述符集合总长度 0x003b
	0x02,//支持接口数: 0,1 
	0x01,//该配置的值
	0x00,//该配置的字符串索引
	0xA0,//设备属性
	0x32,//最大要电电流 0x32 x 2mA = 100mA                    

    0x09,0x04,//此描述符长度 , 接口描述符,键盘
	0x00,//接口编号:0 
	0x00,//备用编号
	0x01,//此接口使用端点数
	0x03,//此接口使用的类 :HID
	0x01,//此接口使用的子类: 
	0x01,//此接口使用的协议:KEYBOARD
	0x00,// 此接口字符串索引
	
    0x09,0x21,//此描述符长度 ,HID类描述符
	0x11,0x01,// USB HID version 
	0x00,// 国家代码 00 是没定义,33是US
	0x01,//下级描述符的数量
	0x22,//下级描述符的类型  
	sizeof(KeyRepDesc)&0xFF,sizeof(KeyRepDesc)>>8, //下级描述符的长度
    
	0x07,0x05,//此描述符长度 ,端点描述符
	0x81,//端点地址
	0x03,//属性
	EP1_IN_SIZE,0x00,//端点支持最大的包长度
	0x0a,//端口查询时间

    0x09,0x04,//此描述符长度 ,接口描述符,鼠标
	0x01,//接口编号:1
	0x00,//备用编号
	0x01,//此接口使用端点数
	0x03,//此接口使用的类 HID
	0x01,//此接口使用的子类
	0x02,//此接口使用的协议: MOUSE
	0x00,//// 此接口字符串索引
	
    0x09,0x21,//此描述符长度 ,HID类描述符
	0x10,0x01,// USB HID version 
	0x00,// 国家代码
	0x01,//下级描述符的数量
	0x22,//下级描述符的类型 
	sizeof(MouseRepDesc)&0xFF,sizeof(MouseRepDesc)>>8,//下级描述符的长度
    
	0x07,0x05,//此描述符长度 ,端点描述符
	0x82,//端点地址
	0x03,//属性
	EP2_IN_SIZE,0x00,//端点支持最大的包长度
	0x0a //端口查询时间
};

 

沁恒的MCU在使用上程序量没有太多;也没修改多少;

下面是工程文件:

myCH549HID.zip (276.97 KB, 下载次数: 45)


此内容由EEWORLD论坛网友viphotman原创,如需转载或用于商业用途需征得作者同意并注明出处

最新回复

可以做滑条,用多个触摸按键   详情 回复 发表于 2019-7-25 18:24
点赞 关注(1)
 
 

回复
举报

1万

帖子

24

TA的资源

版主

沙发
 

看起来使用非常简单啊

点评

初步用起来还不错,USB部分代码量少,比起之前看的32位单片机的代码要好理解一些;  详情 回复 发表于 2019-7-24 14:08
 
 
 

回复

257

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
dcexpert 发表于 2019-7-24 14:00 看起来使用非常简单啊

初步用起来还不错,USB部分代码量少,比起之前看的32位单片机的代码要好理解一些;

 
 
 

回复

305

帖子

0

TA的资源

一粒金砂(高级)

4
 

一个功能调试了多个功能模块了

点评

你们这个触摸按键是否能组合成手势!  详情 回复 发表于 2019-7-25 11:56
个人签名单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
 
 
 

回复

257

帖子

0

TA的资源

一粒金砂(高级)

5
 
沁恒USB单片机 发表于 2019-7-25 09:26 一个功能调试了多个功能模块了

你们这个触摸按键是否能组合成手势!

点评

可以做滑条,用多个触摸按键  详情 回复 发表于 2019-7-25 18:24
 
 
 

回复

305

帖子

0

TA的资源

一粒金砂(高级)

6
 
viphotman 发表于 2019-7-25 11:56 你们这个触摸按键是否能组合成手势!

可以做滑条,用多个触摸按键

个人签名单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表