跳到主要内容

HDMI 转 CSI 和音频

HDMI 转 CSI&I2S 桥接指南

将 HDMI 信号转换为 CSI 信号和 I2S 音频信号。目前支持所有平台(Zero、Pi3B、Pi4B、CM4、Pi5B),最大捕获分辨率不仅取决于您使用的 HDMI 转 CSI 转换板,还取决于您使用的树莓派硬件版本。树莓派硬件版本主要分为两类,一类支持最高 1080P60Hz,另一类支持最高 1080P50Hz。

  • 支持最高 1080P60Hz 的树莓派版本包括 CM3、CM4 和 Pi5B。

  • 支持最高 1080P50Hz 的树莓派版本包括 Zero、Zero 2、Pi3B、Pi4B 等。

简介

该模块将输入的 HDMI 信号转换为独立的 CSI 信号和 I2S 音频信号。HDMI 输入支持最高 1080P60Hz。它在树莓派上运行良好,历史上有三个版本的该模块(C779、C780、C790)。C790 是最新版本,解决了 HDMI 反向供电问题,同时支持两路 CSI 通道和四路 CSI 通道。 hdmi-csi-i2s

特性

C790

"硬件参数"
  • HDMI 输入:支持树莓派最高 1080P60Hz
  • HDMI 转 CSI-2 桥接芯片:东芝 TC358743XBG
  • 4 路 CSI-2 通道和时钟
  • CSI-2 接口(位于 C790 模块正面):15 针 FPC 插座,间距 1.0 mm
  • CSI-2 接口(位于 C790 模块背面):22 针 FPC 插座,间距 0.5 mm
  • 尺寸:30 x 45 mm
  • 安装:4 x M2.5
  • 电源:3.3V
  • 重量:10g
"Pi 4B 仅支持 1080P50Hz,受限于 CSI-2 通道数量。CM4 支持 1080P60Hz,因此如果必须使用 1080P60Hz 输入,请使用 CM4 和 C790 搭配。"
"接口"

c790-interface C790 提供两个 CSI 输出接口。在 C790 正面,CSI-2 接口为 15 针 FPC 插座,间距 1.0 mm。在 C790 背面,CSI-2 接口为 22 针 FPC 插座,间距 0.5 mm。 c790-i2s-connect

"尺寸"

c790-size

"在树莓派上安装 C790 的参考"

install-c790-pi4b

C780

"C780A 硬件参数"
  • HDMI 输入:在树莓派上支持最高 1080P50Hz(受限于 CSI-2 通道数量)
  • HDMI 转 CSI-2 桥接芯片:东芝 TC358743XBG
  • 2 路 CSI-2 通道和时钟
  • CSI-2 接口:15 针 FPC 插座,间距 1.0 mm
  • 尺寸:30 x 65 mm(未断裂 PCB 尺寸);30 x 45 mm(断裂后 PCB 尺寸)
  • 安装:6 x M2.5
  • 电源:3.3V
  • 重量:10g
"C780B 硬件参数"
  • HDMI 输入:在树莓派上支持最高 1080P60Hz
  • HDMI 转 CSI-2 桥接芯片:东芝 TC358743XBG
  • 4 路 CSI-2 通道和时钟
  • CSI-2 接口:22 针 FPC 插座,间距 0.5 mm
  • 尺寸:30 x 65 mm(未断裂 PCB 尺寸);30 x 45 mm(断裂后 PCB 尺寸)
  • 安装:6 x M2.5
  • 电源:3.3V
  • 重量:10g
"接口"

2-4 音频部分的接线如图所示。
2-8

"尺寸"

C780 的尺寸如下图所示。模块有 6 个直径为 2.75mm 的安装孔,适用于 M2.5 螺丝。
2-1 如下图所示,用户可以直接将模块固定在树莓派 Zero 上。C780 设计为可断裂,断裂前的孔间距可以完美适配大多数系列的树莓派。 2-2

C779

"硬件参数"
  • HDMI 输入:在树莓派上支持最高 1080P50Hz(受限于 CSI-2 通道数量)
  • HDMI 转 CSI-2 桥接芯片:东芝 TC358743XBG
  • 2 路 CSI-2 通道和时钟
  • CSI-2 接口:15 针 FPC 插座,间距 1.0 mm
  • 尺寸:35 x 50 mm
  • 安装:4 x M2.5
  • 电源:3.3V
  • 重量:10g
"尺寸"

C779 的尺寸如图所示。模块有 4 个直径为 2.75mm 的安装孔,适用于 M2.5 螺丝。
C779-size

CSI 接口定义

C779 和 C780A 的 CSI(摄像头串行接口)接口均为 15 针,而 C780B 的接口为 22 针。C790 的接口较为独特,支持 15 针和 22 针两种配置。

Interface

C779 1th pinC790 15th pin
C790 22th pin

软件演示

C790/C780/C779 的使用指南取决于您使用的官方树莓派操作系统版本。不同版本的使用方法有所不同。如果您有任何疑问,请加入我们的 BLIKVM Discord 社区 获取支持、常见问题解答和最新消息!
要使用内核驱动程序,请更新您的系统。5.4 内核引入了一些更改,因此这些说明适用于 5.4 或更高版本。如果 uname -a 显示的版本低于此,请在继续之前修复此问题。

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux
"1. 更新和升级树莓派系统(根据所在国家不同,可能需要较长时间)"
sudo apt-get update
sudo apt-get upgrade
"2. 启用摄像头模块(在树莓派 Bullseye OS 中默认已启用摄像头)"
sudo raspi-config
sudo reboot

进入“接口选项”并按回车键。现在选择“摄像头”选项,并按回车键启用它。选择“完成”,然后选择重新启动您的树莓派。重启非常重要!!

"由于 Pi5B 缺少硬件编码功能,目前树莓派平台的软件使用说明分为两部分:Pi5B 配置和其他树莓派平台的配置。"

所有树莓派(除 Pi5B 和 CM5)

"在 Zero、Zero 2、Pi3B、Pi4B 等平台上,以下是测试 HDMI 转 CSI 模块的参考示例。"

编辑 /boot/config.txt 文件(需要 sudo 权限):

sudo nano /boot/config.txt

添加以下内容:

dtoverlay=tc358743

如果您的模块支持音频(如 C780 或 C790),请添加以下内容:

dtoverlay=tc358743-audio

如果(仅在以下情况下)您使用支持 22 针连接器且所有 4 条通道均已接线的设备(如 C780 或 C790),并且使用带有 CAM1 接口且所有 4 条通道均已接线的计算模块,可以使用以下内容:

dtoverlay=tc358743,4lane=1

使用以下命令检查分配给 CMA 堆的内存量:

dmesg | grep cma

第一行应类似于:

pi@raspberrypi:~ $ dmesg | grep cma
[0.000000] cma: Reserved 256 MiB at 0x000000001ec00000

如果报告的 CMA 分配内存少于 96MB,则编辑 /boot/cmdline.txt 文件,并在行首添加以下内容(不要添加换行符):

cma=96M

重启设备。如果一切正常,您应该会看到 /dev/video0 设备,并且运行以下命令时会显示该设备由 Unicam 提供:

v4l2-ctl --list-devices

连接所有电缆后,启动树莓派,C790 指示灯通常为绿色。打开树莓派终端后,输入以下命令:

pi@raspberrypi:~ $ ls /dev/video0
/dev/video0
pi@raspberrypi:~ $ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
/dev/video10
/dev/video11
/dev/video12
/dev/video18
/dev/media1
bcm2835-isp (platform:bcm2835-isp):
/dev/video13
/dev/video14
/dev/video15
/dev/video16
/dev/media0
unicam (platform:fe801000.csi):
/dev/video0
/dev/video1
/dev/media2

该驱动程序将所有控制权交给用户或用户的应用程序。默认情况下,芯片中没有加载 EDID(扩展显示识别数据),因此无法告知 HDMI 源支持哪些分辨率。市面上有一些 EDID 编辑器可供使用。如果您创建了一个名为 edid.txt 的文件,则可以通过以下命令将其推送到设备:

00ffffffffffff005262888800888888
1c150103800000780aEE91A3544C9926
0F505400000001010101010101010101
010101010101011d007251d01e206e28
5500c48e2100001e8c0ad08a20e02d10
103e9600138e2100001e000000fc0054
6f73686962612d4832430a20000000FD
003b3d0f2e0f1e0a2020202020200100
020321434e041303021211012021a23c
3d3e1f2309070766030c00300080E300
7F8c0ad08a20e02d10103e9600c48e21
0000188c0ad08a20e02d10103e960013
8e210000188c0aa01451f01600267c43
00138e21000098000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
cd ~
sudo nano edid.txt
#copy the above commend in edid.txt, save&exit;
pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums

CTA-861 Header
IT Formats Underscanned: yes
Audio: yes
YCbCr 4:4:4: no
YCbCr 4:2:2: no

HDMI Vendor-Specific Data Block
Physical Address: 3.0.0.0
YCbCr 4:4:4 Deep Color: no
30-bit: no
36-bit: no
48-bit: no

CTA-861 Video Capability Descriptor
RGB Quantization Range: yes
YCC Quantization Range: no
PT: Supports both over- and underscan
IT: Supports both over- and underscan
CE: Supports both over- and underscan

驱动程序不会自动切换到检测到的分辨率。请使用以下命令:

pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings
Active width: 1280
Active height: 720
Total width: 1650
Total height: 750
Frame format: progressive
Polarities: -vsync -hsync
Pixelclock: 74250000 Hz (60.00 frames per second)
Horizontal frontporch: 0
Horizontal sync: 370
Horizontal backporch: 0
Vertical frontporch: 0
Vertical sync: 30
Vertical backporch: 0
Standards:
Flags:

您必须通过 v4l2-ctl --set-dv-bt-timings 设置时序。您可以传入检测到的模式索引,或者使用以下命令:

v4l2-ctl --set-dv-bt-timings query

选择当前检测到的时序。

v4l2-ctl -V

应反映检测到的分辨率。  
该芯片支持两种格式——BGR3(默认)和 UYVY。BGR3 是 24bpp,而 UYVY 是 YUV4:2:2 16bpp。
在普通的 2 条 CSI-2 通道上,数据速率允许 BGR3 最大支持 1080p30,而 UYVY 可支持到 1080p50。
使用以下命令选择 UYVY,但您的应用程序可能会覆盖此设置:

v4l2-ctl -v pixelformat=UYVY

检查音频驱动程序/声卡是否可用于 ALSA:  

pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0

注意:card 1 表示 TC358743XBG 的声卡编号为“1”,可能会有所不同。

安装 GStreamer 工具:

sudo apt install gstreamer1.0-tools

检查 GStreamer 工具版本:  

pi@raspberrypi:~ $ gst-launch-1.0 --version gst-launch-1.0 version 1.18.4 GStreamer 1.18.4 http://packages.qa.debian.org/gstreamer1.0

注意:  
不同版本的命令行参数可能有所不同,这可能会让人感到困扰。

使用 GStreamer 录制视频和音频:

GStreamer v1.14 命令

gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux.

`foo.mkv` 是输出文件。  
如果您的 GStreamer 版本为 1.8 或更高版本,可以尝试以下测试命令。此外,`alsasrc device=hw:1` 表示 TC358743 的声卡,您可以使用 `arecord -l` 查询。

录制带音频的视频命令(GStreamer 1.18.4)

gst-launch-1.0 -vvv v4l2src ! "video/x-raw,framerate=30/1,format=UYVY" ! v4l2h264enc extra-controls="controls,h264_profile=4,h264_level=13,video_bitrate=256000;" ! "video/x-h264,profile=high, level=(string)4.2" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux.

录制无音频的视频示例命令(C779 不支持音频)

gst-launch-1.0 -vvv v4l2src ! "video/x-raw,framerate=30/1,format=UYVY" ! v4l2h264enc extra-controls="controls,h264_profile=4,h264_level=13,video_bitrate=256000;" ! "video/x-h264,profile=high, level=(string)4.2" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv 按下 CTRL+C 结束录制。


PS:我们建议您将上述 `framerate` 参数修改为 HDMI 信号的实际帧率值,该值可以通过 `v4l2-ctl --query-dv-timings` 命令的结果获得。
![图像标题](/assets/images/hdmi-csi-i2s/v4l2-rate.png)
对于上述 HDMI 设备,由于帧率为 60,因此我们将 `framerate` 参数修改为 60,如以下命令所示:
仅录制视频:

gst-launch-1.0 -vvv v4l2src ! "video/x-raw,framerate=60/1,format=UYVY" ! v4l2h264enc extra-controls="controls,h264_profile=4,h264_level=13,video_bitrate=256000;" ! "video/x-h264,profile=high, level=(string)4.2" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv

录制视频和音频:(如果您的模块也支持音频)

gst-launch-1.0 -vvv v4l2src ! "video/x-raw,framerate=60/1,format=UYVY" ! v4l2h264enc extra-controls="controls,h264_profile=4,h264_level=13,video_bitrate=256000;" ! "video/x-h264,profile=high, level=(string)4.2" ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux.

注意:`alsasrc device=hw:1` 中的“1”表示声卡编号,您必须更改为正确的声卡编号。  
(通过 `arecord -l` 查询声卡编号,参考步骤 9)

Pi5B & CM5

"在以下测试中,使用了 CAM1 通道,输入分辨率为 1080P60Hz。由于树莓派 5B 缺少相应的硬件编码功能,树莓派 5B + C790 的图像捕获性能通常低于树莓派 4B。"
"Pi5B 平台 HDMI 转 CSI 模块测试参考"

使用树莓派镜像为:2025-05-13-raspios-bookworm-arm64-full.img.xz,内核版本为: Linux raspberrypi 6.12.25+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.12.25-1+rpt1 (2025-04-30) aarch64 GNU/Linux。 首先在 /boot/firmware/config.txt 目录下添加增加下面两行内容:

dtoverlay=tc358743,4lane=1
dtoverlay=tc358743-audio

添加完驱动配置后,需要重启树莓派生效,如果配置无误,终端执行:ls /dev/video*,可以看到出现video这样的设备即为成功:

    pi@raspberrypi:~/Desktop $ ls /dev/video*
/dev/video0 /dev/video19 /dev/video20 /dev/video22 /dev/video24 /dev/video26 /dev/video28 /dev/video3 /dev/video31 /dev/video33 /dev/video35 /dev/video5 /dev/video7
/dev/video1 /dev/video2 /dev/video21 /dev/video23 /dev/video25 /dev/video27 /dev/video29 /dev/video30 /dev/video32 /dev/video34 /dev/video4 /dev/video6

首先终端执行nano 1080p60edid,创建1080p60hz的edid文件,此文件内容如下:

    00 ff ff ff ff ff ff 00 52 62 00 37 00 00 00 00
01 1b 01 03 80 46 28 78 0a cf 74 a3 57 4c b0 23
09 48 4c 21 08 00 b3 00 95 00 a9 40 90 40 81 00
81 80 81 40 01 01 02 3a 80 18 71 38 2d 40 58 2c
45 00 00 d0 52 00 00 1e 02 3a 80 d0 72 38 2d 40
10 2c 45 80 00 d0 52 00 00 1e 00 00 00 fc 00 33
32 46 48 44 5f 4c 43 44 5f 54 56 0a 00 00 00 fd
00 30 3e 0f 46 11 00 0a 20 20 20 20 20 20 01 38
02 03 30 f1 52 10 9f 04 13 05 14 03 02 11 12 20
21 22 15 16 01 06 07 2c 09 07 07 15 07 50 57 06
00 3f 06 c0 83 01 00 00 67 03 0c 00 10 00 b0 2d
01 1d 80 3e 73 38 2d 40 7e 2c 45 80 00 d0 52 00
00 1e 01 1d 80 d0 72 1c 2d 20 10 2c 25 80 00 d0
52 00 00 9e 01 1d 00 bc 52 d0 1e 20 b8 28 55 40
00 d0 52 00 00 1e 01 1d 80 18 71 1c 16 20 58 2c
25 00 00 d0 52 00 00 9e 00 00 00 00 00 00 00 8f

同级目录执行nano testC7xx.sh,创建测试脚本,此文件内容如下:

#!/bin/bash
MEDIADEVICE=-1
#SELECT RESOLUTION VALID VALUES (720p60edid, 1080p25edid, 1080p30edid, 1080p50edid, 1080p60edid)
VIDEDID=1080p60edid
# Finding Media Device
i=0
while true ; do
MEDIADEVICE=$(udevadm info -a -n /dev/media$i | grep --line-buffered 'DRIVERS=="\rp1-cfe"' | while read -r line; do echo $i ; done)
if ! [[ $MEDIADEVICE = '' ]]; then
break
fi
i=$((i+1))
done


#v4l2-ctl --list-devices
# Locate the node corresponding to tc358743 as v4l-subdev2, and the pad0 of rp1-cfe-csi2_ch0 as video0:
#media-ctl -d /dev/media$MEDIADEVICE -p

# Loading Driver
v4l2-ctl -d /dev/v4l-subdev2 --set-edid=file=$VIDEDID --fix-edid-checksums
# Wait drive loads
sleep 5s

# To query the current input source information, if the resolution displays as 0, it indicates that no input source signal has been detected. In this case, you should check the hardware connections and follow the steps mentioned above to troubleshoot.
v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings
# Confirm the current input source information.
v4l2-ctl -d /dev/v4l-subdev2 --set-dv-bt-timings query

# Initialize media
media-ctl -d /dev/media$MEDIADEVICE -r
# Connect CSI2's pad4 to rp1-cfe-csi2_ch0's pad0.
media-ctl -d /dev/media$MEDIADEVICE -l ''\''csi2'\'':4 -> '\''rp1-cfe-csi2_ch0'\'':0 [1]'
# Configure the media node.
media-ctl -d /dev/media$MEDIADEVICE -V ''\''csi2'\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]'
media-ctl -d /dev/media$MEDIADEVICE -V ''\''csi2'\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]'
media-ctl -d /dev/media$MEDIADEVICE -V ''\''tc358743 11-000f'\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]'

#Set the output format.
v4l2-ctl -v width=1920,height=1080,pixelformat=RGB3

# test frames
v4l2-ctl --stream-mmap=3 --stream-count=10 --stream-to=test.yuv

然后直接终端执行bash testC7xx.sh,得到输出内容如下:

pi@raspberrypi:~/Desktop $ bash testC7xx.sh 
Active width: 1920
Active height: 1080
Total width: 2200
Total height: 1125
Frame format: progressive
Polarities: -vsync -hsync
Pixelclock: 148500000 Hz (60.00 frames per second)
Horizontal frontporch: 0
Horizontal sync: 280
Horizontal backporch: 0
Vertical frontporch: 0
Vertical sync: 45
Vertical backporch: 0
Standards:
Flags:
BT timings set
<<<<<<<<<<

如果您安装了树莓派桌面版本,可以使用 ffplay 直接播放 YUV 文件。

ffplay -f rawvideo -video_size 1920x1080 -pixel_format bgr24 test.yuv 

在 Windows 电脑上,您可以使用 7yuv 等软件查看 .yuv 文件。对于输入格式为 19201080 的教程,您应在 7yuv 的右上角选择 BGR888,并将分辨率设置为 19201080 以查看刚刚捕获的两帧。

芯片文档

TC358743 文档

包装清单

"C790"

包装清单

测试视频

C780A 测试

C780B 测试

购买链接

购买 C780 和 C790

购买 C779