如何在计算模块载板上调出摄像头和显示器
我们已经开发了我们自己的计算模块承载板,称为PCCB。它与Raspberry Pi计算模块1-3 Plus兼容,并具有一些非常有用的工业用途的功能(RS232、CAN总线、RS485、TPM、DC/DC降压)。
今天,我验证了摄像头和7''显示接口,我们也在板子上提供了这个接口。
注意DISP1和CAM1连接器。
关于相机的背景知识
相机模块有两个额外的GPIO引脚。这些被指定为。
- CAM_IO0或CAM_GPIO / CAMERA_0_SHUTDOWN
- CAM_IO1或LED线 / CAMERA_0_LED
CAM_IO0用于驱动摄像头,并在需要时为其供电。这不能通过在运行时将引脚设置为高电平来手动完成,VideoCore Blob必须能够做到这一点。
(可能有可能将其拉到高位,但这将使相机处于供电状态,并会增加耗电量)。
CAM_IO1(LED线)之前在相机v1上用于驱动LED。据Raspberry Pi工程师说,它在Raspberry Pi Camera v2上没有使用。
相机连接器(在Raspberry Pi相机和我们的电路板上)的引脚是。
- 屏蔽
- CAM_D0_N
- CAM_D0_P
- 屏蔽
- 凸轮_D1_N
- 凸轮_D1_P
- 屏蔽
- 凸轮轴_N
- 凸轮键_P
- 屏蔽
- CAM_IO0
- CAM_IO1
- CAM_SCL
- CAM_SDA
- CAM_3V3
摄像机通常会使用内部I2C总线(SDA0和SCL0可用,例如,在GPIO0和GPIO1上)。
架构图
这些是我们硬件布局的原理图。
正如你所看到的(和之前讨论的一样),我们使用GPIO_27作为CAM_IO0,GPIO_26作为CAM_IO1。
显示器不需要额外的GPIO引脚。
显示屏和摄像头都使用内部I2C总线,引脚为GPIO_1和GPIO_0。
dt-blob.bin
这个文件是Raspberry Pi启动文件的一个可选的部分。它被放置在/boot中,并覆盖了内置的dt-blob.bin,它被编译成start.elf。
它将GPIO引脚设置传达给运行在VideoCore(VCOS,视频核心操作系统)上的固件。由于计算模块载体板,如我们的,将有定制的引脚设置,经常。 需要提供这个dt-blob.bin。
这里有关于这个文件的更多信息,包括一步一步的启动过程。
- https://www.raspberrypi.org/documentation/hardware/computemodule/cm-peri-sw-guide.md
- https://www.raspberrypi.org/documentation/configuration/pin-configuration.md
Raspberry Pi提供了几个可能的设置的源代码,这里有dt-blob.bin。
我选择了dt-blob-disp1-cam1.dts文件作为源文件,并将其更名为dt-blob-disp1-cam1_pccb.dts。
你可以从Raspberry Pi这里下载原始源文件。
这个文件需要修改,以反映我们对GPIO引脚的选择(这反过来将允许VideoCore固件为摄像机供电并与之对话)。
这个源文件包括许多不同型号的Pi的配置。我们只对计算模块的配置感兴趣:pins_cm3和pins_cm
(注意你的行数可能会有一些偏差,因为我在文件中加入了一些额外的东西,与我们这里的讨论无关)。
这里你应该修改四行。在我们特定的(!)硬件设置中,我修改了。
至
和
到。
同样的修改需要适用于CM3和CM。
pin@p26 { function = "output"; termination = "no_pulling"; }; // CAMERA 0 LED
pin@p27 { function = "output"; termination = "no_pulling"; }; // CAMERA 0 SHUTDOWN(...)
pin_define@CAMERA_0_LED {
类型="内部"。
数字=。
};
pin_define@CAMERA_0_SHUTDOWN {
类型="内部"。
数字=。
};
pin_define@CAMERA_0_UNICAM_PORT {
类型="内部"。
数字=。
};
注意,如果你的硬件设置需要,你也可以使用不同的CAMERA_0_I2C_PORT和CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN。
显示屏也是如此,有DISPLAY_SDA、DISPLAY_SCL、DISPLAY_I2C_PORT条目可以修改。
在我们的案例中,我把它们放在默认位置,因为我们的板子就是这样设计的。
编译这个文件
在π上,运行。
sudo dtc -I dts -O dtb -o dt-blob-disp1-cam1_pccb.dtb dt-blob-disp1-cam1_pccb.dts
这将给你一堵警告墙,可以安全地忽略它。
安装dt-blob.bin
sudo cp dt-blob-disp1-cam1_pccb.dtb /boot/dt-blob.bin
并重新启动。
测试
引脚26和27现在被设置为输出引脚,并被驱动为低电平。
vcgencmd get_camera
产量。
支持=1 检测=1
你可以使用一个静态的。
raspistill -v -o test.jpg
(别忘了用raspi-config来启用摄像头!)
视频流
一个小的额外提示。在你的Pi上,你可以用以下方式启动一个流。
raspivid -o - -t 0 -hf -w 800 -h 400 -fps 24 |cvlc -vvv -h264-fps=24 stream://dev/stdin -sout '#standard{access=http, mux=ts,dst=:8160}' :demux=h264
注意Raspivid和cvlc的-fps 24和-h264-fps=24,以同步他们的帧速率!这是对的。
使用VLC来观看流媒体(使用你的计算板的IP)。
显示
该显示器还需要dt-blob.bin。
我使用外部电源为显示器供电,在PCCB的修订版中,我们将在一个接头上提供+5 V电源,供显示器使用。
请注意,我不能使用相机的软线来使显示器工作;它必须使用它自己的(短)电缆来连接。
我把电源先排到显示器上,然后再排到PCCB上
触摸工作。
显示屏和摄像头在一起
这也是可行的,摄像机流也会在显示屏上实时显示。
误区
运行时
raspistill -v -o test.jpg
你将得到。
mmal_vc_component_create: 创建组件'vc.ril.camera'失败 (1:ENOMEM)
还有
vcgencmd get_camera
将显示其中之一。
支持=0 检测=0
或
支持=1 检测=0
如果支持=0,你应该检查你的dt-blob.bin是否正确安装在/boot中。
如果检测到=0,你应该验证GPIO引脚在dt-blob.bin中的设置是否正确。
还要确保使用raspi-config激活摄像机。
正确的弯曲方向
柔性电缆必须有正确的方向才能进行连接。你可以看一下引脚图,看看GND和+3V3引脚的表现是否符合预期,或者是否没有连接/没有电压。
pi3g提供的服务
我们可以为您提供硬件,提供咨询服务,或定制Raspberry Pi硬件和软件开发------。 今天就联系我们。
参考资料
- https://raspberrypi.stackexchange.com/questions/95420/raspivid-es-out-set-group-pcr-is-called-too-late-stream-keeps-freezing
- https://www.raspberrypi.org/documentation/hardware/display/
- https://raw.githubusercontent.com/raspberrypi/documentation/master/hardware/computemodule/dt-blob-disp1-cam1.dts
- https://www.raspberrypi.org/forums/viewtopic.php?t=164987 (这有关于CAM_IO0和CAM_IO1线的用途的解释)。
- https://raspberrypi.stackexchange.com/questions/72549/how-can-i-enable-both-the-cameras-on-the-compute-module-3