完善资料让更多小伙伴认识你,还能领取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数组中,按照长度读取出来就可以了。 |
|
|
|
只有小组成员才能发言,加入小组>>
527 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2905 浏览 2 评论
2401 浏览 1 评论
874浏览 2评论
691浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
422浏览 1评论
534浏览 1评论
请教一下,Mounriver 编译不成功:找不到库文件,怎么整
818浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:17 , Processed in 1.409518 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号