HDMI转CSI&I2S模块手册
将HDMI信号转换成CSI视频信号和I2S音频信号, 目前全平台支持(zero, Pi3B, Pi4B, CM4, Pi5B),其中最高采集分辨率不仅仅取决于HDMI转CSI转换板,同时也取决于你使用的树莓派硬件版本,树莓派硬件版目前主要分两个系列,最高支持1080P60Hz,和最高支持1080P50Hz。
- 最高支持1080P60Hz的Pi版本(CM3,CM4,Pi5B)
- 最高支持1080P50Hz的Pi版本(zero, zero2, Pi3B, Pi4B等)
简介
此模块将HDMI信号转换成CSI视频信号和I2S音频信号,最高支持1080P60Hz的视频输入,在树莓派上工作的很好,目前共有3个版本(C779、C780、C790). C790是目前最新的版本,解决了所有已知的问题,同是有CSI 2通道和4通道接口,I2S音频接口,修复了HDMI反向供电问题。
性能参数
C790
硬件参数
- HDMI输入: 在树莓派上此模块最高支持1080P60Hz输入;
- HDMI转CSI-2桥接芯片:Toshiba TC358743XBG
- 4路CSI-2通道和时钟
- CSI-2接口1: 15 pin FPC, 间距1.0 mm, 在C790模块的正面.
- CSI-2接口2, 22 pin FPC, 间距0.5 mm, 在C790模块的背面.
- 尺寸: 30 x 45 mm
- 安装孔位:4 x M2.5
- 供电电压:3.3V
- 重量: 10g
树莓派4B只支持1080P50Hz(因为4B只有两个CSI-2通道) ,树莓派CM4只支持1080P60Hz,所以如果你的输入设备一定要是1080P60Hz,请同时使用CM4和C790.
C780
C780A硬件参数
- HDMI输入: 最高支持080P50Hz在树莓派上;
- HDMI转CSI-2桥接芯片:Toshiba TC358743XBG;
- 2路CSI-2通道和时钟;
- CSI-2接口: 15 pin FPC, 间距 1.0 mm;
- 尺寸: 30 x 65 mm (折断前); 30 x 45 mm (折断后)
- 安装孔位:6 x M2.5
- 供电电压:3.3V
- 重量: 10g
C780B硬件参数
- HDMI输入: 最高支持080P60Hz在树莓派上;
- HDMI转CSI-2桥接芯片:Toshiba TC358743XBG;
- 4路CSI-2通道和时钟;
- CSI-2接口: 22 pin FPC, 间距 0.5 mm;
- 尺寸: 30 x 65 mm (折断前); 30 x 45 mm (折断后)
- 安装孔位:6 x M2.5
- 供电电压:3.3V
- 重量: 10g
C779
硬件参数
- HDMI输入: 最高支持080P50Hz在树莓派上;
- HDMI转CSI-2桥接芯片:Toshiba TC358743XBG;
- 2路CSI-2通道和时钟;
- CSI-2接口: 15 pin FPC, 间距 1.0 mm;
- 尺寸: 35 x 50 mm
- 安装孔位:4 x M2.5
- 供电电压:3.3V
- 重量: 10g
CSI接口定义
其中C779,C780A只有15PIN引脚,C780B只有22PIN引脚,C790同时有15和22PIN引脚。
软件使用demo
下文中的软件使用方法跟你使用的树莓派镜像版本有关,可能存在不同。如果你有任何疑问,请加入 BLIKVM Discord 社区获得支持、解答和新闻。 以下说明适用于内核为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
2. 使能相机模块(在树莓派Bullseys OS系统中,相机已默认被使能)
移动光标到‘Interfacing Options’,然后按Enter键进入。然后选择‘Camera’选项,按Enter键进入后,使能相机。然后选择“Finish”后, 选择“reboot”。重启非常重要!!由于Pi5B取消了硬编码器,下面软件使用方法在Pi平台目前分为两个部分,Pi5B配置,和其它Pi平台配置。
在zero, zero2,Pi3B,Pi4B等平台HDMI转CSI模块测试demo参考
编辑 /boot/config.txt (需要sudo权限)
添加下面的内容 如果你的模块(C780和C790)支持声音,添加下面内容支持声音 如果你是用树莓派计算模组(CM3、CM4),可以通过下列配置,使能CSI的4个通道。 使用“dmesg | grep cma”检查分配给CMA堆的内存量,终端出现的第一行内容应该如下所示: 如果显示少于96MB,编辑/boot/cmdline.txt,添加下面一行。 重启树莓派,如果配置成功,你将会看到/dev/video0设备描述符出现。可以使用“v4l2-ctl –list-devices” 命令列出所有的video描述符。再将树莓派与模块正确连接后,树莓派上电,你可以看到C790模块上有一个绿色灯常亮,然后可以按照下面的命令,检查是否已经正常出现了video0。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
00ffffffffffff005262888800888888
1c150103800000780aEE91A3544C9926
0F505400000001010101010101010101
010101010101011d007251d01e206e28
5500c48e2100001e8c0ad08a20e02d10
103e9600138e2100001e000000fc0054
6f73686962612d4832430a20000000FD
003b3d0f2e0f1e0a2020202020200100
020321434e041303021211012021a23c
3d3e1f2309070766030c00300080E300
7F8c0ad08a20e02d10103e9600c48e21
0000188c0ad08a20e02d10103e960013
8e210000188c0aa01451f01600267c43
00138e21000098000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
cd ~
sudo nano edid.txt
# 拷贝上门的内容到edid.txt文件中,然后保存退出。使用下列命令设置加载edid,如果正确设置,可以看到如下的输出。
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:
芯片支持两种格式(BGR3和UYVY),BGR3像素深度为24bpp,UYVY为YUV4:2:2 16bpp。如果使用CSI 2通道,BGR3格式最大支持1080P30Hz的输入,使用UYVY则最大支持1080P60Hz的输入。使用下面命令设置为UYVY格式。
使用下列命令,检查音频硬件和驱动是否正常。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
安装GStreamer工具.
sudo apt install gstreamer1.0-tools
sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad
sudo apt-get install gstreamer1.0-plugins-base
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 command
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.
#The command to recode a video with audio. (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.
#The sample command to recode a video without audio. (C779 doesn't support audio)
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
Press CTRL+C to end recording.
如上图中的HDMI输入设备,帧率是60Hz,所以我们可以使用下面命令去录制视频:
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.
Pi5B等平台HDMI转CSI模块测试demo参考
下面测试中,使用cam1通道进行测试,测试输入分辨率为1080P24Hz。树莓派5b测试过程中发现edid设置无效,因此需要通过添加HDMI诱骗器来强制目标设置输出HDMI,否则树莓派5b很有可能获取不到任何输入。由于树莓派5b没有对应的硬编码硬件,所以树莓派5b+C790图像采集能力性能一般,不如用树莓派4b
编辑 /boot/config.txt (需要sudo权限)
添加下面的内容 如果你的模块(C780和C790)支持声音,添加下面内容支持声音 重启树莓派,执行下面指令,找到csi对应的media节点为media0,即rp1-cfe (platform:1f00128000.csi)字段下的media设备:blikvm@blikvm:~ $ v4l2-ctl --list-devices
pispbe (platform:1000880000.pisp_be):
/dev/video20
/dev/video21
/dev/video22
/dev/video23
/dev/video24
/dev/video25
/dev/video26
/dev/video27
/dev/video28
/dev/video29
/dev/video30
/dev/video31
/dev/video32
/dev/video33
/dev/video34
/dev/video35
/dev/video36
/dev/video37
/dev/media1
/dev/media2
rp1-cfe (platform:1f00128000.csi):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/video6
/dev/video7
/dev/media0
rpivid (platform:rpivid):
/dev/video19
/dev/media3
找到tc358743对应节点为v4l-subdev2,rp1-cfe-csi2_ch0的pad0为video0:
blikvm@blikvm:~ $ media-ctl -d /dev/media0 -p
Media controller API version 6.1.63
Media device information
------------------------
driver rp1-cfe
model rp1-cfe
serial
bus info platform:1f00128000.csi
hw revision 0x114666
driver version 6.1.63
Device topology
- entity 1: csi2 (8 pads, 8 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
pad0: Sink
[fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
<- "tc358743 4-000f":0 [ENABLED,IMMUTABLE]
pad1: Sink
[fmt:unknown/8192x1 field:none]
pad2: Sink
[fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
pad3: Sink
[fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
pad4: Source
[fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
-> "rp1-cfe-csi2_ch0":0 []
-> "pisp-fe":0 []
pad5: Source
[fmt:unknown/8192x1 field:none]
-> "rp1-cfe-embedded":0 []
pad6: Source
[fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
-> "rp1-cfe-csi2_ch2":0 []
-> "pisp-fe":0 []
pad7: Source
[fmt:SRGGB10_1X10/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
-> "rp1-cfe-csi2_ch3":0 []
-> "pisp-fe":0 []
- entity 10: pisp-fe (5 pads, 7 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: Sink
[fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
<- "csi2":4 []
<- "csi2":6 []
<- "csi2":7 []
pad1: Sink
[fmt:FIXED/8192x1 field:none]
<- "rp1-cfe-fe_config":0 []
pad2: Source
[fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
-> "rp1-cfe-fe_image0":0 []
pad3: Source
[fmt:SRGGB16_1X16/640x480 field:none colorspace:raw xfer:none ycbcr:601 quantization:full-range]
-> "rp1-cfe-fe_image1":0 []
pad4: Source
[fmt:FIXED/8192x1 field:none]
-> "rp1-cfe-fe_stats":0 []
- entity 16: tc358743 4-000f (1 pad, 1 link)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev2
pad0: Source
[fmt:RGB888_1X24/640x480 field:none colorspace:srgb]
[dv.caps:BT.656/1120 min:640x350@13000000 max:1920x1200@165000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom]
[dv.detect:BT.656/1120 1920x1080p24 (2750x1125) stds: flags:]
[dv.current:BT.656/1120 640x480p59 (800x525) stds:CEA-861,DMT flags:has-cea861-vic]
-> "csi2":0 [ENABLED,IMMUTABLE]
- entity 18: rp1-cfe-csi2_ch0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "csi2":4 []
- entity 22: rp1-cfe-embedded (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video1
pad0: Sink
<- "csi2":5 []
- entity 26: rp1-cfe-csi2_ch2 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video2
pad0: Sink
<- "csi2":6 []
- entity 30: rp1-cfe-csi2_ch3 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video3
pad0: Sink
<- "csi2":7 []
- entity 34: rp1-cfe-fe_image0 (1 pad, 1 link)
type Node subtype V4L flags 1
device node name /dev/video4
pad0: Sink
<- "pisp-fe":2 []
- entity 38: rp1-cfe-fe_image1 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video5
pad0: Sink
<- "pisp-fe":3 []
- entity 42: rp1-cfe-fe_stats (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video6
pad0: Sink
<- "pisp-fe":4 []
- entity 46: rp1-cfe-fe_config (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video7
pad0: Source
-> "pisp-fe":1 []
blikvm@blikvm:~ $ v4l2-ctl -d /dev/v4l-subdev2 --query-dv-timings
Active width: 1920
Active height: 1080
Total width: 2750
Total height: 1125
Frame format: progressive
Polarities: -vsync -hsync
Pixelclock: 74250000 Hz (24.00 frames per second)
Horizontal frontporch: 0
Horizontal sync: 830
Horizontal backporch: 0
Vertical frontporch: 0
Vertical sync: 45
Vertical backporch: 0
Standards:
Flags:
blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\''csi2'\'':0 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]'
blikvm@blikvm:~ $ media-ctl -d /dev/media0 -V ''\''csi2'\'':4 [fmt:RGB888_1X24/1920x1080 field:none colorspace:srgb]'
芯片资料
发货清单
测试视频
C780A 测试:https://www.youtube.com/watch?v=ecqyINoiHNQ
C780B 测试:https://www.youtube.com/watch?v=nc-hwPT2Uak&t=15s
采购连接
中国客户采购链接:C790 & C780
其它国家客户采购连接:C779
Created: June 5, 2022