发帖
11 0 0

【外设移植】USB设备之USB UVC+M61开发板

bzhou830
论坛元老

77

主题

1565

回帖

1万

积分

论坛元老

积分
13519
小安派&M61基本系统教程 111 11 前天 06:38

1. 前情回顾

USB相关的内容之前写过几篇,但是因为早期的SDK里面的example有些是运行不起来的,不久前博流更新了SDK,遂又尝试看看里面的USB协议栈是否更新了内容。这次更新的动作还是很不错的,添加了很多新的内容,也修复了不少bug。非常值得学习一波。那这篇就来继续之前的USB之旅,来学习下USB UVC的example。

先放下usb相关的之前的帖子。

【探索USB】01. USB协议基础 - 小安派S1&M61教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)

【探索USB】02. 设备的连接和枚举 - 小安派S1&M61教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)

【外设移植】USB设备之USB鼠标+M61开发板 - Ai-M61-Kit外设移植教程 - 物联网开发者社区-安信可论坛 - Powered by Discuz!

【外设移植】USB设备之USB键盘+M61开发板 - Ai-M61-Kit外设移植教程 - 物联网开发者社区-安信可论坛 - Powered by Discuz!

【外设移植】USB设备之USB midi+M61开发板 - Ai-M61-Kit外设移植教程 - 物联网开发者社区-安信可论坛 - Powered by Discuz!

这次学习的UVC来自如下的sdk路径中:

bouffalo_sdk/examples/peripherals/usbdev/usbd_static_video/video_static_mjpeg_template.c

2. 代码分析

image.png

UVC example中给出代码结构如上图。usb协议栈实现使用的是cherry usb,video_static_mjpeg_template.c文件中调用cherry usb提供的接口来实现枚举usb设备等操作。

void video_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格式编码我们可以验证对比这个数据的内容。

image.png

3. 编译运行

直接编译烧录。

image.png

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

Snipaste_2025-07-03_05-58-48.png

此时我们就可以像使用usb摄像头一样使用这个设备了。用playcap工具可以查看uvc摄像头的图像数据。

image.png

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

GIF.gif

这样就能轮播两个图像。

4. 格局打开

example里面使用的是数组,如果接入的摄像头,直接读取摄像头数据然后编码输出就是得到一个usb摄像头设备。

那么,如果我们自己能生成一些可显示的内容是不是就能把这个uvc设备当成一个显示器使用呢?比如我们把nes模拟器产生的游戏画面进行jpeg数据编码。然后写入,这样就得到了一个使用uvc来传输游戏画面的游戏机设备了。想想还真的有点意思呢😎😀。

刚好jpeg编解码在M61中也有硬件的支持。值得一玩!

最后,上面使用的是playcap来显示摄像头图像,其实强大的potplayer也是可以直接打开并显示摄象头的,而且他还可以设置融合的方式。

image.png

──── 0人觉得很赞 ────

使用道具 举报

优秀!
前天 09:14
优秀的玛丽哥!
前天 09:21
WT_0213 发表于 2025-7-3 09:15
优秀的玛丽哥!

跟着幸福哥肝起来呀,期待早日用上机械键盘
bzhou830 发表于 2025-7-3 09:21
跟着幸福哥肝起来呀,期待早日用上机械键盘

幸福哥在做键盘嘛?
前天 10:32
wuxin 发表于 2025-7-3 10:14
幸福哥在做键盘嘛?

【外设移植】USB设备之USB键盘+M61开发板 - Ai-M61-Kit外设移植教程 - 物联网开发者社区-安信可论坛 - Powered by Discuz!
这个帖子,做过键盘,可以参考下,哈哈
厉害了
前天 18:22

王哥,激情嵌入式开启
前天 22:14
哇,玛丽哥放大招了
您需要登录后才可以回帖 立即登录
高级模式
12下一页
统计信息
  • 会员数: 29160 个
  • 话题数: 42024 篇