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 通道。
特性
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
C790 提供两个 CSI 输出接口。在 C790 正面,CSI-2 接口为 15 针 FPC 插座,间距 1.0 mm。在 C790 背面,CSI-2 接口为 22 针 FPC 插座,间距 0.5 mm。
C780
- 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
- 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
音频部分的接线如图所示。
C780 的尺寸如下图所示。模块有 6 个直径为 2.75mm 的安装孔,适用于 M2.5 螺丝。
如下图所示,用户可以直接将模块固定在树莓派 Zero 上。C780 设计为可断裂,断裂前的孔间距可以完美适配大多数系列的树莓派。
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 螺丝。
CSI 接口定义
C779 和 C780A 的 CSI(摄像头串行接口)接口均为 15 针,而 C780B 的接口为 22 针。C790 的接口较为独特,支持 15 针和 22 针两种配置。



软件演示
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
sudo apt-get update
sudo apt-get upgrade
sudo raspi-config
sudo reboot
进入“接口选项”并按回车键。现在选择“摄像头”选项,并按回车键启用它。选择“完成”,然后选择重新启动您的树莓派。重启非常重要!!
所有树莓派(除 Pi5B 和 CM5)
编辑 /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` 命令的结果获得。

对于上述 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
使用树莓派镜像为: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 以查看刚刚捕获的两帧。