我先连接usb cable再对系统上电,没有图像的问题分析实录

2019-04-13 16:56发布

问题:我在调试USB camera时候,如果先连接上USB CABLE,然后对系统上电,上电完了,打开amcap没有图像;
分析:         理论上  系统上电的过程应该是这样的,         1,install dwc_otg driver ,DP应该为PULL DOWN,USB connection 不建立;         2,install webcam driver,DP仍然为PULL DOWN,USB connection 依然不建立;        3,Run user app,open video device后,DP被Pull Up,USB connection建立,PC开始发送request,协商,            打开AMCAP,则就会出图像; 但是实际上,我的情况是这样的,install dwc_otg driver  & webcam driver,,Run user app,open video device后没有任何打印信息输出,在probe里面增加打印输出,没有任何信息输出,就是说usb connection一直没有建立, 当然无法触发probe函数;
这些天一直在努力地读code,我的调试过程如下:
先连接USB CABLE,然后对系统上电,在install dwc_otg 时,在初始化dwc_otg control core时就强制将DP PULL UP,
dctl.d32 = DWC_READ_REG32(&dev_if->dev_global_regs->dctl);
dctl.b.sftdiscon = 0;
DWC_WRITE_REG32(&dev_if->dev_global_regs->dctl, dctl.d32);

我先连接USB cable,那么在install driver之后,打印信息输出如下:  g_webcam gadget: high speed config #1: Video
g_webcam gadget: uvc_function_set_alt(0, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
这说明PC已经开始发送请求信息了,已经开始协商,但是目前user app还没有启动,无法响应PC发过来的UVC请求,更无法调度数据过来;PC请求超时,USB connection建立超时;


如果我在系统加载over之后,我再连接USB,那么一切正常,打开AMCAP,也会有图像出来,打印信息如下:  g_webcam gadget: high speed config #1: Video
g_webcam gadget: uvc_function_set_alt(0, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 1)

当然,在driver初始化时就强制将DP PULL UP,肯定是不行的, 那么问题到底出在哪里呢,我认为应该是在Run user app之后,DP还是没有被PULL UP,在driver中,在app还没有准备好的时候,对于request的请求,执行hold 避免USB被枚举当user app还没有运行的时候, 在uvc_function_bind()函数里面增加: if ((ret = usb_function_deactivate(f)) < 0)
goto error;

然后再连接usb cable,再上电,看到这行输出:  g_webcam gadget: high speed config #1: Video
g_webcam gadget: uvc_function_set_alt(0, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 0)
g_webcam gadget: uvc_function_set_alt(1, 1)
我知道USB connection已经建立,usb probe已经执行了,打开AMCAP,真的出图像了。。 兴奋不已啊。。。