完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
请问在USBX复合设备使用时,USB_CTRL里对芯片设备模式的配置也需要设置成设备模式嘛?如果是,那如何使用芯片同时实现主机和设备端通信,从而实现KVM功能
另外还是再求一次USBX的示例代码,芯片手册中对USB配置和USBX的配置没有很好的区分开来,根据芯片手册从头配置 USBX需要一步步配置整个流程相当麻烦。哪怕没有具体的中断处理或者按键模拟示例,给个初始化配置的示例代码也好啊,在这边调了三天了,话说你们发布产品前总也有套代码进行过芯片USBX功能的测试的撒,为什么会出现没有示例代码的情况? |
|
相关推荐
7个回答
|
|
|
|
|
|
|
|
|
|
非常感谢,功能实现的比较完整了,最重要的是代码风格变了好多,观看体验max!
|
|
|
|
您好,感谢您之前发送的CH545参考例程,有几个部分还是没有很好的理解,能麻烦您帮忙再解答一下吗?
①地址偏移到底应该如何理解,在根据例程修改了我自己的程序的寄存器配置和地址配置,在变量前加上指针p,在USBX_SEL中添加了对XRAM的偏移配置后,成功实现了PC和设备的通信。但对地址偏移的含义还是很迷糊,目前我只是可以按照例程配置单个设备,但对于多个设备,尤其是通过地址偏移来实现对X0、X1、X2等复合设备复用一组函数来初始化和配置,还是没能完全理解。ps.好像对USBX0的自动偏移的描述里,还有介绍对于USBX0,会自动偏移到USBX1-3,这是什么意思?是USBX0无法使用嘛? ②HUB的中断操作是什么意思? USBX_ThisHub_EP1IntUp、USBX_OneHub_EP1IntUp、USBX_AllHub_EP1IntUp三个函数分别都有什么作用?hub需要中断上传什么数据嘛? 如果在配置了X0、X1、X2三个复合设备的D0、D1、D2的总计3*3=9个设备,需要对其中X1D0号设备进行总线复位,应该如何调用哪个函数来操作HUB1或者X1D0设备来实现单个设备的总线复位,而不是直接复位整个HUB1上的三个设备?上传HUB中断通知是对整个HUB上所有端点进行操作嘛? |
|
|
|
1、因为4个USBX结构完全一样,也就是说代码完全通用(至少是通用的枚举阶段吧)。按照常规理解,每个USBX都会有独立的寄存器,这个会增加代码复杂程度。自动偏移带来的好处就是可以直接使用一套代码(不是绝对),只会在CPU对端点缓冲区取、写数据时需要区分一下当前处于哪一个USBX。
或者说CH545比较典型的应用场景KVM,目的是将4个主机口接的USB设备(通常就是键盘+鼠标),实现分时控制4台电脑主机,这种应用场景下,其实4个USBX干的事情都是一样的,所以代码具有通用性,可以真的共用一套应用代码(目前示例程序就做了差不多的事情)。 另一种就是每个USBX下的每个设备都是不同类别,不同功能的设备,那真的就是一个设备一套代码。 看实际的“USBX_Endpx_UpData()”函数感觉会比较好理解这个功能,比较典型。 2、3个函数,最底层其实都是调用了“USBX_ThisHub_EP1IntUp”,作用是通知操作HUB的USB主机(此处通常就是电脑了),HUB下的某个端口的设备连接状态发生了变化,这个是HUB协议方面的处理。 在示例代码中(前面提到做了类似将CH545自身USB HOST接口的设备做了类似透传的功能),是判断到CH545自身USB主机接口下接入的设备连接状态发生变化,会调用这三个函数。 总线复位状态的实际发送者是电脑,发送的最终对象是HUB下的某个设备,这个状态是直接发送到HUB下的设备的,不需要实际的去以HUB角度处理(芯片内部自动处理了真实的HUB上下游的转发)。 实际所有的处理都是”USBX_DeviceInterrupt()“这个函数处理的,且4个USBX都是调用这个函数,不难发现这个函数的架构其实和CH552的USB中断服务是类似的。这个函数内部其实是通过switch判断MASK_UX_DEV_ID域,分别处理每个设备的。 总结,伪代码体现,两个switch嵌套,实现4*4总共16个设备的管理: |
|
|
|
好的,目前我希望通过地址偏移来实现设备的灵活初始化,在主机端检测到新设备后,在设备端的USBX设备内进行一个新USBX设备的初始化。
我希望通过USBX_SEL选取对应设备进行地址偏移,来进行函数的复用。 但目前似乎没能正常实现。在中断处理中,分析令牌和端点的操作: switch(pX0D0_STATUS & ( bUXS_SETUP_ACT | MASK_UXS_TOKEN | MASK_UXS_ENDP ))? ? ?// 分析操作令牌和端点号 得到的是0x3D,没有进入任何setup包或者IN/OUT包的处理流程 (3D应该是端点5,PID为FREE,接受到了SETUP请问包,但我只配置了0-3端点的使能啊,而且刚刚上电不应该先RESET或者发来端口0设备描述符的setup请求嘛?请问有哪里需要修改配置的来实现自动的地址偏移?) |
|
|
|
当寄存器返回0X3D时,bUXS_SETUP_ACT已经置位。此时已经有一个SETUP包传输完成,而不需要关心别的比特位。
手册中还指出了一种特殊情况,可能同时会存在收到SETUP包和OUT/IN包的状态,除此之外,只需要关心bUXS_SETUP_ACT这单一比特位。 |
|
|
|
只有小组成员才能发言,加入小组>>
463 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2868 浏览 2 评论
2357 浏览 1 评论
808浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
630浏览 1评论
492浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
356浏览 1评论
630浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:15 , Processed in 1.181295 second(s), Total 91, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号