完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先,从协议中截取这两个标准请求的结构:
Get Report Set Report 以CH554EVT中的CompatibilityHID.C例程为例,处理USB请求的部分: 因为是HID class特有的请求,所以会放在非标准请求中处理,例程已经将两个请求的case写在代码里面了,此时芯片能够正确应答请求。 其中Get Report的数据阶段方向是Device->Host,所以代码上的实现和标准请求中设备、配置描述符的上传一样,将pDsecr指针指向需要传输的数据,正确的给len赋值长度即可。 Set Report的数据阶段方向是Host->Device,可以看到case 0x09中没有任何实质性的处理,因为OUT事务,作为设备只有等着主机下发,只要我们确保芯片对于EP0上的OUT事务响应状态为ACK就好。 真正处理Set Report的数据阶段在EP0的OUT事务完成中断中: 可以看到程序默认这个case里面有一些东西,我们只关注框中的if条件。因为所有EP0上的OUT事务,都会进入这里,所以需要加一下判断,当前进入这个case是属于Set Report请求的数据阶段。通过判断SetupReq这个全局变量,看一下定义和使用,不难理清他的工作原理。 此时USB_RX_LEN寄存器的值代表数据阶段的数据长度,数据本身存放在Ep0Buffer数组中,按照长度读取出来就可以了。 |
|
|
|
只有小组成员才能发言,加入小组>>
475 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2873 浏览 2 评论
2361 浏览 1 评论
818浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
641浏览 1评论
499浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
364浏览 1评论
640浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 15:04 , Processed in 1.267037 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号