USB1三个管脚全部悬空的情况下,将USB0配置成host模式,控制台形成了回环,无法通过串口0输出内容

Viewed 54

问题描述


目前硬件设计上串口1未引出,三个管脚全是悬空的状态,USB0的USB_ID管脚拉低,然后在make rtsmart-menuconfig界面中将USB0配置成HOST模式,并且根据文档要求增加了UVC的配置,重新烧录镜像之后,原本用来作为控制台交互的串口0无法正常交互,无法输入和输出任何内容,此时如果将USB0重新接入到PC端,则串口0可以正常与控制台交互。并且再拔下USB0的线之后,让其悬空,此时依然不能正常交互,但是正常按下回车键之后会出现msh>/的内容,重新插回去之后,原本要打印的msh>/被当作输入,重新输入到了设备中,类似于形成了回环的状态。

复现步骤


1、重新上电过,也重新检查过配置,情况没有任何改变

硬件板卡


定制板

1 Answers
  1. 我们尝试用 CanMV K230 V3.0 的板子(只开USB0作为Host),可以正常工作。理论上UART0跟USB没有什么关系。你这边用的是什么板子?
  2. 你可以提供一下你的配置给我们看下,或者手头是否有CanMV K230 V3.0的板子呢?

使用的是自制的板子,硬件设计上USB0_ID管脚通过10K电阻下拉到地,目前的配置是参考的https://www.kendryte.com/k230_rtos/zh/main/app_develop_guide/media/uvc.html#id6
这个链接中的配置

怀疑是下拉阻值选的不对?不改代码,换个阻值看看?
PS: 但其实如果你仅用Host mode,驱动其实是 froce host mode的,理论上不太关心外部ID引脚电平

确实是比较奇怪,因为如果不改代码10K电阻下拉的情况下USB0_ID管脚的电压是1.8V,在这种情况下,就会出现上面说的这种回环的情况,USB0也没办法正常检测到USB摄像头,只有将USB0接口接到PC上,才能正常使用串口0与控制台进行交互,然后将这个驱动代码的上拉注释掉之后,USB0_ID管脚的电压是0.008V,这样整个系统就是正常的,USB0可以正常检测到USB摄像头,串口也可以正常交互

已解决,在rtos_k230/src/rtsmart/rtsmart/kernel/bsp/maix3/components/CherryUSB/port/dwc2/usb_glue_kendryte.c
这文件中,USB在初始化的时候,会有内部上拉,导致USB_ID管脚处于1.8V左右的电平,导致无法正常被识别成主机模式,将这个代码中的内部上拉注释之后,USB摄像头也可以被正常识别到了,串口0也可以正常通讯了,不用依赖于USB0接入PC电脑
// uint32_t usb_ctl3 = *hs_reg | USB_IDPULLUP0;
uint32_t usb_ctl3 = *hs_reg;