STM32F207 下用DCMI和USB HS做UVC摄像头总结

前言

最近由于公司项目需要,需要做低分辨率(320 * 240 @30fps)DVP接口的特殊摄像头,但是主机没有DVP接口,最后决定用USB口来转接。由于摄像头比较特殊,原始数据,需要做简单的格式转换和数据处理后,才能使用,不能用一些现成的DVP转USB的IC,因此方案最终选定为采用STM32F2的DCMI接口(接DVP),然后通过其HS的USB接口转到USB上面。为了让接口尽量通用,软件上,要求STM32F2虚拟出一个UVC协议的摄像头,并可以通过UVC协议,配置其工作模式。这样可以免去了在电脑上开发USB驱动的麻烦。

资料准备

由于之前从没有接触过STM32F2的USB,也没有借出过DCMI接口,更没有看过UVC协议,因此,只能找些现成的资料看看。现在列举如下:

  1. 网上现成的别人做的STM32F4上的UVC协议。https://github.com/iliasam/STM32F4_UVC_Camera.git
  2. STM32F2 的Reference manual,这个可以在ST的官网查到。
  3. STM32F2 的STM32CubeMX相关软件。PS:该软件非常好用,可以大大简化STM32上的关于底层驱动的工作,并且提供非常全面的API,会中断回调函数,基本上不用看寄存器,也不用管中断,时钟什么的了,非常推荐使用!!
  4. OV7670 的DataSheet
  5. UVC协议相关的文档。这个可以在USB官方网站上下载到,非常必要,且有用。

这么多资料,不可能开始就全部肯了,看起来需要有技巧。基本套路是:

  • 先看看别人的例程是否可以跑起来
  • 再对照协议文档(UVC相关)来理解和尝试修改别人的代码。
  • 最后根据自己的项目需求来编写相关数据处理程序。

工作成果

实现了读出OV7670摄像头(用于测试软件)的数据,并缓存在队列中,在USB的DataIn里面发送出去,并在电脑上,用摄像头软件可以看到摄像头的内容。

测试结果

  • 用软件模拟产生数据,最大帧率可以做到80fps(数据格式为320*240 YUY2,未压缩),已经是非常快了,速度约为(98Mbps, USB HS理论值为 480Mbps),完全可以满足我们项目的要求。STM32F2 USB HS的速度果然不是盖的,非常快。
  • 用Ov7670产生数据(由于硬件原因,只能获得最大37fps的帧率,数据格式为320*240 YUY2,未压缩),电脑上的程序可以正确读出,录像结果为37fps,和ov7670的帧率一致。

需要的注意事项

  • 由于摄像头数据算是比较大了,而且是持续性的,为了确保数据不丢失,STM32F2的DCMI接口采用了双缓冲的DMA模式,并用软件做了一个队列,不停地将双缓冲结束后的数据压入队列。这样便于中间的数据处理。
  • STM32F2 的 DCMI,在设置DMA的时候,要注意:DMA的外设地址,必须为32位,尽管DVP的接口数据位宽为8位。DMA的数据长度设置时,其实际长度要和位宽匹配。
  • 注意UVC的协议头,即UVC Header里面的FID和EOF两个位。FID要每次发送新的帧的时候,进行翻转。EOF要当前帧的最后一次传送时置位。
  • 由于是非压缩数据格式,且为固定帧率,因此其UVC的头可以直接采用2个字节。不要后面的帧时间戳相关的内容。(一般的UVC头为12个字节)。
  • 在USB DATA IN里面,如果DCMI的数据没有准备好(USB的数据带宽要大于DCMI的带宽),那么可以发送空包出去。也可以只发UVC头出去。我测试了一下,WIN10下面的默认相机软件是都可以正常工作的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engin...
    Leon_Geo阅读 3,670评论 1 20
  • 姓名:张猛 引用自:http://blog.csdn.net/u013985662/article/details...
    oliverabc阅读 6,513评论 0 3
  • 峡谷外 夕阳刚落下的山影 枯草长,雁栖树 风尘拂柳,黄土瘦 我曾遗落的脚印 在夜露下 盛满如虹的月色 像装了灵魂的...
    话晨阅读 288评论 0 12
  • 已经上班两天,比较开心的是,我现在已经会读韩语啦,可以学韩语歌啦,至于发音问题,还有好几堂音变课程,不过也不用那么...
    maomizone阅读 161评论 0 0