以下作品由安信可社区用户
bzhou830制作
01前情回顾
USB相关的内容之前写过几篇,但是因为早期的SDK里面的example有些是运行不起来的,不久前博流更新了SDK,遂又尝试看看里面的USB协议栈是否更新了内容。这次更新的动作还是很不错的,添加了很多新的内容,也修复了不少bug,非常值得学习一波。
那这篇就来继续之前的USB之旅,来学习下USB UVC的example。先放下usb相关的之前的帖子:
以下内容可从查看https://bbs.ai-thinker.com/home.php?mod=space&uid=13138&do=thread&type=thread&view=me&from=space
【探索USB】01. USB协议基础 - 小安派S1&M61教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)bbs.ai-thinker.com/forum.php?mod=viewthread&tid=43977&_dsign=9a6226e6
【探索USB】02. 设备的连接和枚举 - 小安派S1&M61教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)bbs.ai-thinker.com/forum.php?mod=viewthread&tid=43981&_dsign=0158b4e6
【外设移植】USB设备之USB鼠标+M61开发板 - Ai-M61-Kit外设移植教程 - 物联网开发者社区-安信可论坛 - Powered by Discuz!bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44029
【外设移植】USB设备之USB键盘+M61开发板 - Ai-M61-Kit外设移植教程 - 物联网开发者社区-安信可论坛 - Powered by Discuz!bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44023
【外设移植】USB设备之USB midi+M61开发板 - Ai-M61-Kit外设移植教程 - 物联网开发者社区-安信可论坛 - Powered by Discuz!bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44079
这次学习的UVC来自如下的sdk路径中:
bouffalo_sdk/examples/peripherals/usbdev/usbd_static_video/video_static_mjpeg_template.c
02代码分析

UVC example中给出代码结构如上图。usb协议栈实现使用的是cherry usb,video_static_mjpeg_template.c文件中调用cherry usb提供的接口来实现枚举usb设备等操作。
voidvideo_init(){ usbd_desc_register(video_descriptor);
usbd_add_interface(usbd_video_init_intf(&intf0, INTERVAL, MAX_FRAME_SIZE, MAX_PAYLOAD_SIZE));
usbd_add_interface(usbd_video_init_intf(&intf1, INTERVAL, MAX_FRAME_SIZE, MAX_PAYLOAD_SIZE));
usbd_add_endpoint(&video_in_ep);
usbd_initialize(); }
main文件中则很简单的去调用设备的初始化,随后进入主循环进行jpeg数据的传输。
uvc设备的数据填入使用的是cherry usb实现的usbd_video_mjpeg_payload_fill((uint8_t *)jpeg_data1, sizeof(jpeg_data1), packet_buffer, &out_len);函数。
这里提到了一个jepg数据,数据源哪里来呢?为了简化,example中直接使用的是jepg二进制数组的形式。从jepg格式编码我们可以验证对比这个数据的内容。

03编译运行
直接编译烧录。

将usb接口接入到电脑上。在设备管理器中就可以发现成功的枚举了一个USB UVC 设备。

此时可以像使用USB摄像头一样使用这个设备了。用playcap工具可以查看UVC摄像头的图像数据。

因为是固定的数组,所以显示的是一个静态的图像,来稍微改造一下代码让它轮播两个图像。

这样就能轮播两个图像。
04拓展
example里面使用的是数组,如果接入的摄像头,直接读取摄像头数据然后编码输出就是得到一个USB摄像头设备。
如果能生成一些可显示的内容,是不是就能把这个UVC设备当成一个显示器使用呢?比如把nes模拟器产生的游戏画面进行jpeg数据编码。然后写入,这样就得到了一个使用UVC来传输游戏画面的游戏机设备了,想想还真的有点意思呢 。
刚好jpeg编解码在Ai-M61系列模组中也有硬件的支持。值得一玩!
最后,上面使用的是playcap来显示摄像头图像,其实强大的potplayer也是可以直接打开并显示摄象头的,而且可以设置融合的方式。

审核编辑 黄宇
-
usb
+关注
关注
60文章
8373浏览量
281770 -
WIFI
+关注
关注
82文章
5470浏览量
212043 -
开发板
+关注
关注
25文章
6132浏览量
113510 -
蓝牙模组
+关注
关注
0文章
53浏览量
4569
发布评论请先 登录
【CIE全国RISC-V创新应用大赛】MUSE Pi Pro开发板ROS系统
【飞凌OK-MX9596-C开发板试用】②体验WIFI、蓝牙、音频、视频,为AI应用打下基础
【HZ-RK3568开发板免费体验】外设接口测试
【M-K1HSE开发板免费体验】开发板硬件解析
安信可Ai-M62-CBS,极小尺寸的Wi-Fi/蓝牙二合一模组
新品上市!蓝牙接近开关模组、多功能开发板、千兆级路由网关模块、低功耗WiFi模块
新品推荐!国产LoRa扩频模块、WiFi+蓝牙双模模组、低功耗蓝牙转串口模块
能和Ai-M61模组对话了?手搓一个ChatGPT 语音助手
全志T113-S3开发板测试—UVC 摄像头
正点原子ESP32S3系列开发板全面支持小智AI
国产开发板的端侧AI测评-基于米尔瑞芯微RK3576
双频WiFi+蓝牙SoC模组 ARM Cortex-M33 MCU
零基础开发小安派-Eyes-S1 外设篇——DAC

WiFi+蓝牙模组 外设移植USB UVC+Ai-M61开发板
评论