我先连接usb cable再对系统上电,没有图像的问题分析实录
2015-06-16 13:51
330 查看
问题:我在调试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,真的出图像了。。
兴奋不已啊。。。
分析:
理论上 系统上电的过程应该是这样的,
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,真的出图像了。。
兴奋不已啊。。。
相关文章推荐
- Win32多线程编程(5) — 线程局部存储
- Win32多线程编程(4) — JTHREAD剖析
- linux命令四:awk
- (转) Spring读书笔记-----部署我的第一个Spring项目
- 雨松MOMO UGUI 之 UI的深度学习(二)
- c语言计算一个日期的下一天后N天后的日期
- [编译原理]词法分析器的分析与实现
- 用 verbose GC 分析 IBM WebSphere Portal 的内存问题
- Ubuntu14.04下adb命令出现的问题
- Win32多线程编程(3) — 线程同步与通信
- (两)unity4.6Ugui中国教程文档-------总结-UGUI Canvas
- Linux软件安装为什么名字不一样
- JavaScript 错误
- PHP 批量上传文件 大全
- 连续正整数
- Win32多线程编程(2) — 线程控制
- Win32多线程编程(1) — 基础概念篇
- 《大话设计模式》--OOTV杯超级模式大赛--模式总结(29-C)
- MySQL 通配符学习总结
- 各种div+css居中方式调整(转载)