RTOS如何适配USB Host?

Comake Online


作者| veahow


本次专题主要讲解RTOS如何适配USB Host?SSD22X/SSD21X/SSC9211 RTOS适用。



1.场景描述


适用SDK版本:rtk_0107_2021-11-19-0933-V010


在PC端可以正常UVC出图,但对接一些USB Host的过程中存在一些问题,需要进行适配。


2.实现原理


以PC端的USB交互为参考,查看实际对接USB Host枚举过程中存在哪些差异,修改代码去适配。


3.操作方法


3.1 提高UART任务优先级


默认UART优先级较低,可能导致USB相关打印不全,请参考 RTOS下如何提高默认串口任务的优先级? 的操作,将UART线程任务优先级提高,以便调试。


3.2 开启USB调试


USB基础驱动的代码都在rtk/proj/sc/customer/product/cust/drv/usb_gadget下,修改usb_gadget_dbg.c的debug_level,将其改成DEBUG_LEVEL_DEBUG重新编译再和USB Host进行对接,查看打印的数据情况与PC端进行对比。


4. 举例


4.1 Log报“not find cfg”


出现如下的Log打印:



对比PC端能够发现也是有一模一样的请求但结果不一致,这是USB Host端没有去获取配置描述符导致的问题,Device端未生成配置链表使得无法根据值找到可用的配置,需要增加逻辑:sstar_usbd_set_config时未找到配置则再get_config_descriptor一次,后再查找一次。


4.2 Log报“not find alternate setting”


出现如下的Log打印:



需要对比PC端相关的请求,发现PC端下发的值是1,而对接的USB Host在没有获取Device端信息的情况下直接下发值3,需要在set_interface中将setup->wValue强制改为1即可,但需要注意的是写法上要兼容与PC Host的交互。


4.3 UAC对接Host时Log报“alloc memory failed”


同样的镜像在PC Host上能够正常UAC SPK输出但对接别的Host便出现了Log报“alloc memory failed”,并且一直持续着导致无法播放Host传来的声音。需要在uac.c中的sstar_ep_out_data_handler增加:



这个原因是有些Host会下发数据长度为0的包导致驱动处理有误,因此要在此处增加判断跳过处理以免影响后续的数据处理。


》》原帖地址


End.



往期回顾


星宸科技智能门锁方案介绍


SSD222Q在工业HMI中的新应用


星宸科技智能网关方案介绍


星宸科技智能家居全家桶介绍





扫码进入论坛

原厂答疑|产品选型|官方资源



扫码咨询客服

SDK下载|芯片、开发板购买


X 提交 下一题

查看更多