完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
**写该文档主要是为了,在工作的时候记录一下自己威廉希尔官方网站
的进步。。。。。 不行 , 太官方了
其实就是为了使我的工作更具有条理一些,在以前,我的工作的步骤总是很杂乱,之所 以说是杂乱,是因为我做一个小项目的解决方法,或者说要做完这个工作的所有步骤都 不是线性的,即它是由多个部分拼接起来,不存在你必须做完这一步才能进入到下一 步,这样的一种情况下,做小的东西还不会有问题,但有点复杂的项目就会捉襟见肘, 即便最后完成了也会浪费时间,自己的威廉希尔官方网站 也没有得到成长。 第二就是自己以后应该也会接触到更多USB的东西,自己现在辛苦一些把整个过程详细 地分析一下,那后面应该会很轻松,更重要的是,我写这个东西虽然最初的目的只是为 了 记录,但其实在整个过程中,记录的过程和工作的进程是相互促进的,当我写这个 文章时,它会指导我的工作,使我的工作更具有条例,那么这时文章能表达的深度也就 更好,而为了文章的完整性,我会去更多地了解一些和完成项目无关的东西,也许此时 无用,但也是为自己增加一点厚度吧,这是一个循环的过程,所以想要写这个文章 在整个文章中,为了便于阅读,我会把整个文章分为几个帖子依次分享出来, 不会在一个帖子里面写完整个过程,那样实在不友好** 从2019年末到现在,新冠疫情持续了很久,这个导致芯片严重缺货,尤其是stm32,所以也必须找一个替代品,这个替代品便是esp32s2,我现在要做的便是把之前stm32的代码移植到esp32s2,其中用到了esp-idf开发,之前只在arduino上用过esp32的芯片,用到的也只是一些简单的功能,未使用过USB. 当u***触摸屏通过u***线接入电脑时,电脑通过电平会检测到有USB 设备插入,主机此时会对设备(u***触摸屏)进行复位,然后向设备请求设备描述符,配置描述符等一系列过程,当设备枚举完成,设备便会向主机报告触摸数据,由此便是一个u***多点触摸屏的基本工作过程。 USB HID 1.需要探究到的几个问题 在哪里主机识别到了这个设备是什么? 传上来的数据为何会被识别成触摸点,并作用于电脑? 2.多点触摸屏的枚举 在枚举过程中,主机会向设备请求一些描述符,通常HID会包含 设备描述符,配置描述符,接口描述符,HID描述符,端点描述符,报告描述符,字符串描述符 USB标准请求 在主机复位设备后,会发送一个8字节的USB标准请求给设备的端点0,每一类的设备主机都会去从从机获取设备描述符和配置描述符 以下是标准请求中每一个字节代表的含义 第一个字节 第二个字节 第四个字节 [tr]描述符类型编号[/tr]
1.设备描述符 host >> device 80 06 00 01 00 00 12 00 //06代表获取描述符,01 代表获取设备描述符,0x12 代表申请的长度 device >> host 12 01 10 01 00 00 00 (40 43)pid(33 10)vid 57 00 02 01 02 03 01 第一个区域是主机请求设备描述符,里面包含的信息有,描述符长度,描述符类型,u***协议版本,pid,vid,字符串索引等 2.配置描述符 其实配置描述符是一个合集里面包含了配置描述符,接口描述符,hid描述符,端点描述符 host >> device 80 06 00 02 00 00 22 00 device >> host: 配置描述符 : 09 02 22 00 01 01 00 E0 20 //该配置只有一个接口,对应多点触摸屏 接口描述符 : 09 04 00 00 01 03 00 00 00 //改接口的编号为0,使用了一个端点(不包括端点0),接口使用的类是HID类(0x03) HID描述符 : 09 21 10 01 00 01 22 F5 00 //有一个下级描述符,类型是报告描述符(0x22),下级描述符长度为0xF5 端点描述符 : 07 05 81 03 40 00 01//使用的端点是端点1,最大包长为0x40 即数据是通过端点1上报上来 在第二个区域,u***标准请求是请求的是配置描述符,后面的三个描述符都不能单独返回,只能跟在配置描述符后面一起返回, 3.报告描述符 USB hid 是通过报告来传输数据的,例如本文中的多点触摸就是在枚举完成后不停地向主机发送报告来控制触摸点的,而报告描述符就是用来描述报告的结构和报告数据的用途的,主机通过报告描述符来分析报告里面数据的意义 这里有一个报告描述符生成工具跳转 上面的几个描述符是几乎每个HID设备都会有,有固定的格式,只需要把正确的信息回给主机便可以了 4.GET REPORT 在枚举过程中还会用 get report 和 set report的请求 主要是get report 我不知道是什么意思 host >> device A1 01 02 03 00 00 02 00 0 bmRequestType 1 A1h 4…0: Recipient …00001 Interface 6…5: Type .01… Class 7: Direction 1… Device-to-Host 1 bRequest 1 01h Get Report 2 wValue.LowByte 1 00h Report ID 3 wValue.HiByte 1 03h Feature Report 4 wIndex 2 0000h Interface 6 wLength 2 0040h Report Lengt 从图中可看出这个是为了获取触摸屏幕的一些东西 Feature Report 的编号是03 而返回的数据是 device >> host 0x02 0x0a //0x02代表数据长度为2, 0x0a代表多点触摸屏最大支持的触摸点数为10 3.报文结构 上面的报文(0x02,0x07,0x00,0x00,0x04,0x00,0x04,0x06,0x01,0x00,0x08,0x00,0x08,0x02)的意思就是0号手指被按下,其坐标点为(1024,1024),1号手指被释放,释放的位置坐标点为(2048,2048) 总结 回到问题1提出的问题 1.电脑在收到配置描述符后知道这是一个hid设备 2.因为有报告描述符,主机知道怎么使用USB报告上来的数据 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2660 浏览 0 评论
3347 浏览 9 评论
3025 浏览 16 评论
3519 浏览 1 评论
9127 浏览 16 评论
1251浏览 3评论
642浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
629浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2379浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1944浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-30 13:29 , Processed in 1.108260 second(s), Total 76, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号