580|7

1418

帖子

6

资源

版主

[先楫HPM6750测评之六]走一个cdc传输显示的类UVC摄像头 [复制链接]

  本来是想着摄像头外设和USB外设分开写贴子,但本来就想着搞个摄像头图像数据通过USB传输到PC的上位机进行显示的类UVC摄像头。两者干脆就一起写了。

  先来个效果:传输SXGA分辨率,也就是传输1280*1024分辨率,USB传输不丢包。

image.png

        传输VGA分辨率 640x480,帧率配置差不多,大概10fps左右

               VGA传输.gif  

        一、CAM摄像头外设验证

  验证摄像头外设是否OK,最简单的方法就是使用官方的SDK例子来验证,楼主有是有OV5640,不过放很久了,也不知道好不好使,加之也没有对应的RGB显示屏,于是只能魔改下官方的例子,改为SPI显示屏显示,魔改了之后,修改了对应的分辨率,由于官方的OV5640最小分辨率设置为320*240分辨率。

 

image.png  

  而楼主楼主的显示屏是280*240分辨率的,前期没注意到分辨率不一样会导致数据重叠显示,故会显示成这样子

 

image.png  

 

  于是找官方技术群问下是否demo没验证低分辨率显示问题,经官方验证显示是正常的,于是楼主使用一张静态图320*240的图片显示到楼主的280*240显示屏上,确实是会出现以上的重叠显示,于是想找着OV7725,楼主并没有相关的模组,倒是发现家里有很多便宜的OV2640模组,引脚排列也通用,于是按照以前的移植中间层代码进行移植,先搞个低分辨率的在显示屏上显示,以便验证CAM外设。于是搞了个240x160分辨率显示,按照官方的CAM初始化进行配置,没想到还是显示有问题

 

  要么就是直接全白色不显示,那就是说明IIC通信不正常,由于之前调试触摸的时候,使用同一个IIC,IIC配置不会出错,但是看了分析仪信号,显示IIC传输无应答,后面看了下原理图,发现复位脚直接硬件操作,并没有使用IO,从OV5640的代码看,使用的也是软件复位,后面加入了软件复位后,IIC配置参数一切正常。复位应该由IO软件控制,毕竟淡出靠软件复位也得保证IIC正常的情况下

 

image.png  

image.png

 

  再次验证,显示直接都是黑色的,按照以前的调试经验,这种无非就是HSYNC,PIXCLK,VSYNC电平极性问题,导致采集的是极性外的信号。

 

image.png  

 

  查看了SDK实现和UM手册,看到了对极性的描述

 

image.png

 

  按OV2640的采集极性,应该HSYNC为高,PIXCLK为低,VSYNC为高采集有效数据,但是SDK中并没有对此操作,导致默认的都是为0,故改为以下

 

image.png

 

  建议官方可以通过加入这些极性成员开放给用户使用配置, 因为不同的sensor的极性不一样。

 

image.png

 

嗯,直接烧录,比个耶。看来正常了。

 

image.png  

 

个人签名

1084534438 欢迎交流  [加油,一切皆有可能]


回复

1418

帖子

6

资源

版主

本帖最后由 RCSN 于 2022-5-25 17:03 编辑

二、USB外设验证

  CAM调通了之后,由于USB内置高速PHY,速度理论上可以达到50M/S,这对于视频图像类传输完全足够的。刚好楼主项目上搞了个串口摄像头显示工具,也就是读取串口的IMAGE数据判断RGB565数据或者JPEG数据解析然后显示在工具上。

  这里有两个问题,需要注意下:

  第一个是tinyusb的协议栈的cdc发送接口tud_cdc_n_write,代入的长度bufsize是32位长度,内部实现的丢入fifo的长度反而变成16位长度,也就是说,如果在实际使用的时候,当需要传输的数据超过16位长度的时候,是必须得分包发送的。

 

image.png  

 

  第二个是tinyusb的收发接口是使用队列的方式进行异步处理,也就是说收发的时候不能超过fifo的长度,在官方的移植上,FIFO长度为512,也就是说使用发送接口tud_cdc_n_write是不能高于512。

 

image.png  

 

  所以总的来说,发送大数据包,都是得进行分包发送,不然肯定会丢包。

  说干就干,那么首先也得先验证下USB的传输速度,把摄像头的数据每帧传给cdc。

  一开始按照上述的注意点以及相关接口命名,使用了以下方式发送:

 

image.png  

 

  通过计算差时得到大概28到35MB/S的速度

 

image.png  

 

  这个速度跟理论值50MB/S有些许距离,不过也算可以。

  还以为这样就可以完美解决了,但是并没有,通过查看传数据上来的显示图像,是这样的:

image.png  

 

  按照楼主以往的调试,这种错开的图像,就是丢包的现象了。通过多次传输,确实存在几百到几千的字节丢失。楼主在看了网上的USB高速测速,基本都是管速度不对比对错,这也让我怀疑测试的意义和稳定性。

  基于这种怀疑点,楼主再次查看了下tiyusb的接口,发现了tud_cdc_n_write_available这个接口,这个主要是查看发送FIFO是否有空间可以添加新的数据,如果可以那么读取对应的空间,再塞数据进行分包发送。

 

image.png  

 

  烧录进去,嗯,图像看起来是不丢包了,而且每帧都能完整收到。

 

image.png  

 

  但是看了下终端给出的USB速度,竟然才6M/S,这让楼主觉得很奇怪,于是想着再优化下。

 

image.png  

 

  看了半天的tinyusb,实现方式看着也没错,先辑官方的USB寄存器太多,楼主对于USB本身也不熟,对于其驱动也得靠官方维护,回归到前面的两个问题,楼主想到扩大FIFO和EP大小长度,基本能加大到1024,高了照样也是会丢包。

 

image.png  

 

  加大1024后,速度提升了2M/S,基本稳定在8.1M/S左右

 

image.png  

 

个人签名

1084534438 欢迎交流  [加油,一切皆有可能]


回复

1418

帖子

6

资源

版主

本帖最后由 RCSN 于 2022-5-25 17:18 编辑

     能确定的是先辑的USB是内置高速PHY的,全速是不可能达到这个速度的。但是这个速度不理想的问题,楼主已经反馈给那边的技术,也感觉是软件匹配tinyusb的问题,硬件上问题基本不大,也会测试验证下。官方也一直在更新SDK,期待不久后,可以达到理想的速度。

  官方的技术很耐心而且知识面也多,对于SDK后续更新问题肯定不大,也对产品技术支持肯定也足够到位的。

  目前网上高速测速的,并没有看到对于数据的对错比较。所以目前先辑这个来说,对于通信,8M/S保证不丢包,也足够相关场合应用。

个人签名

1084534438 欢迎交流  [加油,一切皆有可能]


回复

1418

帖子

6

资源

版主

本帖最后由 RCSN 于 2022-5-25 17:17 编辑

 代码已更新在仓库分支 image_sensor_machine_usb上,欢迎for和star 仓库地址

 CAM和USB更新如下:

image.png  

个人签名

1084534438 欢迎交流  [加油,一切皆有可能]


回复

1271

帖子

0

资源

版主

这不错,一步一步把问题解决了,摄像头读取,再显示到屏幕上,估计帧率会更低吧!


回复

5381

帖子

18

资源

五彩晶圆(中级)

厉害了版主

个人签名

默认摸鱼


回复

51

帖子

1

资源

一粒金砂(中级)

版主牛蛙

 

 


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表