Skip to content

为采集卡增加信息显示小屏幕

为采集卡增加一块信息显示小屏幕,可以直接查看 USB 连接状态、采集参数和 HDMI 输入信息。采集卡通过 串口发送状态数据,由 独立 MCU 接收并解析,完成界面渲染与动态刷新。

小屏幕显示的是采集链路的状态与参数,不需要通过串口传输视频画面。采集卡负责提供状态,显示 MCU 负责将状态转换为文字、图标和数值。

方案结构

text
采集卡                         独立 MCU                    小屏幕
读取 USB / HDMI 状态 ──UART──→ 接收、组帧、解析 ──渲染──→ 动态显示

采集卡发送完整状态包,MCU 将串口数据还原为状态字段,再更新屏幕。USB 插拔、采集启停或输入参数变化时,小屏幕可随新的状态包刷新。

小屏幕展示:输入与采集状态一目了然

下面两张展示图分别呈现 HDMI RX 输入状态USB/UVC 采集状态。界面以状态灯突出连接信息,以大字号显示分辨率,并将速度、帧率和视频格式放在独立的信息区中,便于快速读取。

图片用于展示板卡与小屏幕的组合及界面风格;其中的数值和标签为展示内容,实际显示应以串口状态包为准,不作为采集性能指标。

HDMI RX:查看信号输入状态

采集卡与 HDMI RX 信息小屏幕展示,界面包含 5V、HPD、CLK、输入分辨率和视频格式

HDMI RX 页面围绕输入端组织信息:上部显示 5V、HPD 与 CLK 状态,下部突出 输入分辨率与视频格式。图中以绿色状态灯搭配 ONHIGH 等文字,让状态既有颜色提示,也有明确的文字含义。

实际界面可将协议中的 hdmi_fps 一并显示在分辨率旁,形成“宽 × 高 @ 帧率”的信息组合。检查输入链路时,可以先查看 5V、HPD 与时钟状态,再查看输入参数。

USB/UVC:查看主机连接与采集参数

采集卡与 USB/UVC 信息小屏幕展示,界面包含 LINK、SPD、分辨率、帧率和视频格式信息区

USB/UVC 页面聚焦采集端:LINK 对应 USB 连接状态,SPD 对应连接速度,其他区域显示采集分辨率、帧率与视频格式。连接速度可按协议显示为 FSHSSS

实现时还应为 UVC 启停状态 保留独立标识,分别对应 usb_linkusb_uvc_hdmi_clk 的 bit0,避免将 USB 已连接与 UVC 已开启混为同一个状态。

从界面信息映射到协议字段

显示 MCU 可将以下信息组织为两个页面,或在同一页面分区展示。USB 采集参数与 HDMI 输入参数应分别读取,不应直接将输入分辨率复制到采集区域。

区域显示内容
USB连接状态、连接速度、采集分辨率、帧率、视频格式、UVC 状态
HDMI5V 状态、HPD 电平、时钟状态、输入分辨率、帧率、视频格式

串口状态包格式

状态数据按 小端序(little-endian)、无填充(no padding) 排列。在线路上传输时,每个数据字节转换为两个大写 ASCII 十六进制字符,再添加帧头和帧尾:

text
"AA" + 18 字节载荷的 ASCII HEX(36 个字符)+ "55"

按这一声明,每帧共 40 个 ASCII 字符,即 40 个串口传输字节。帧头 "AA" 是两个字符 A,帧尾 "55" 是两个字符 5,不是直接发送二进制字节 0xAA0x55。下表中的偏移指 HEX 解码后的载荷字节位置,不包含帧头和帧尾。

协议待确认项

当前协议声明载荷为 18 字节,但已提供的字段仅覆盖 [0][16],共 17 字节。第 [17] 字节的用途尚未提供,不能直接视为保留位或校验字节。下表暂将 HDMI 时钟状态按 [8] 的 bit1 整理,需与发送端确认。接收端实现前应统一这两项定义。

字段布局

偏移字段含义与取值
[0]usb_linkUSB 连接:0=OFF1=ON
[1]usb_spdUSB 速度:0=UNKNOWN1=FS2=HS (USB 2.0)3=SS (USB 3.0)
[2]usb_h_l采集宽度低 8 位
[3]usb_h_h采集宽度高 8 位
[4]usb_v_l采集高度低 8 位
[5]usb_v_h采集高度高 8 位
[6]usb_fps采集帧率,单位 Hz
[7]usb_fmt0=NONE1=MJPEG2=YUV4223=NV124=RGB
[8]usb_uvc_hdmi_clkbit0:UVC 状态,0=OFF1=ON;bit1:HDMI 时钟状态,0=OFF1=ON(位归属待确认)
[9]hdmi_5vHDMI 5V:0=OFF1=ON
[10]hdmi_hpdHDMI HPD:0=LOW1=HIGH
[11]hdmi_h_l输入宽度低 8 位
[12]hdmi_h_h输入宽度高 8 位
[13]hdmi_v_l输入高度低 8 位
[14]hdmi_v_h输入高度高 8 位
[15]hdmi_fps输入帧率,单位 Hz
[16]hdmi_fmt0=NONE2=YUV4223=YUV4204=RGB5=YUV444
[17]待确认当前资料未给出定义

USB 与 HDMI 的格式枚举应分别解析。例如,值 3 在 USB 格式中表示 NV12,在 HDMI 格式中表示 YUV420。原始说明中的 MIPEGUNKNOW 在本文统一显示为 MJPEGUNKNOWN,不改变对应数值。

小端分辨率解析

宽度和高度均由两个字节组成,低字节在前、高字节在后:

c
// p 指向完成 ASCII HEX 解码且通过长度检查的载荷。
uint16_t usb_width  = (uint16_t)p[2]  | ((uint16_t)p[3]  << 8);
uint16_t usb_height = (uint16_t)p[4]  | ((uint16_t)p[5]  << 8);
uint16_t hdmi_width = (uint16_t)p[11] | ((uint16_t)p[12] << 8);
uint16_t hdmi_height = (uint16_t)p[13] | ((uint16_t)p[14] << 8);

uint8_t uvc_on = p[8] & 0x01;
// 待发送端确认 HDMI CLK 位于 p[8] 的 bit1 后使用:
uint8_t hdmi_clk_on = (p[8] >> 1) & 0x01;

例如,宽度 19200x0780,对应的两个载荷字节为 80 07,在线路上表示为 ASCII 文本 "8007";高度 10800x0438,对应 38 04,在线路上表示为 "3804"

MCU 接收与动态刷新

建议将串口接收、协议解析与界面刷新分开处理:

  1. 接收缓存:通过串口中断或 DMA 将数据写入接收缓冲区,避免在接收回调中执行整屏绘制。
  2. 完整组帧:串口数据可能分多次到达,也可能一次包含多帧。按确认后的固定帧长缓存数据,并检查帧头、帧尾与 HEX 字符是否合法。
  3. 状态解析:将每两个 HEX 字符还原为一个字节,按偏移解析多字节数值、状态位和格式枚举。
  4. 状态更新:完整解析成功后统一更新状态快照,避免界面同时显示新旧两帧的字段。
  5. 界面刷新:比较新旧状态,优先重绘发生变化的文字、图标和数值,减少不必要的整屏刷新。

载荷的 HEX 文本也可能出现 "AA""55",因此不能仅靠搜索下一个 "55" 判断帧结束。应按固定长度定位帧尾;校验失败时继续寻找候选帧头并重新组帧。

对于未知枚举值,界面可显示 UNKNOWN 并保留原始数值用于调试。若一段时间内没有收到有效状态包,应显示“状态超时”,避免旧数据继续被当作实时状态;超时时间需结合发送周期设置。

联调要点

  • 确认两端串口电平、波特率、数据位、校验位、停止位和共地连接。
  • 补齐第 [17] 字节的定义,确认 [8] 的位布局与完整帧长。
  • 约定状态发送周期,以及状态变化时是否立即发送。
  • 分别验证 USB 插拔、UVC 启停、HDMI 接入与拔出时的显示更新。
  • 验证分辨率、帧率和格式切换,以及分包、连续多帧、非法字符和接收超时场景。

完成协议对齐后,独立 MCU 即可围绕这些状态字段实现小屏幕界面,使采集卡的连接与工作状态在设备上直接可见。

深圳市优森美科技开发有限公司
欢迎咨询音视频产品方案与芯片选型支持
邮箱:doc@ultrasemi.com · QQ: 2272715136 · 微信/手机: 13342996846

深圳市优森美科技开发有限公司
欢迎咨询音视频产品方案与芯片选型支持
邮箱:doc@ultrasemi.com · QQ: 2272715136 · 微信/手机: 13342996846