如何在计算模块载板上调出摄像头和显示器

我们已经开发了我们自己的计算模块承载板,称为PCCB。它与Raspberry Pi计算模块1-3 Plus兼容,并具有一些非常有用的工业用途的功能(RS232、CAN总线、RS485、TPM、DC/DC降压)。

今天,我验证了摄像头和7''显示接口,我们也在板子上提供了这个接口。

图片1

注意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。

这里有关于这个文件的更多信息,包括一步一步的启动过程。

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上

触摸工作。

b2461dd4-c434-4882-b277-baab25b705eeb700c161-0009-4e3f-ba0b-5759cfdbe78cadd6926c-45c2-4293-a506-3f2fdd8d752f

显示屏和摄像头在一起

这也是可行的,摄像机流也会在显示屏上实时显示。

WhatsApp图像 2020-09-01 at 21.01.21WhatsApp图像 2020-09-01 at 21.01.20

形象

误区

运行时

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硬件和软件开发------。 今天就联系我们。

参考资料