Alex Blog

如何在 H15 上 Bring Up 一个新的 IMX678 Sensor

本文记录了在 Hailo15(H15H)平台上 bring up 一个新的 Sony IMX678 camera sensor
的完整过程,主要涉及 I2C 地址确认、GPIO reset 验证以及 sensor 时钟频率修改等步骤。


1. 确认 Sensor 的 I2C 地址

1.9.1 版本中,H15H 只支持一个 sensor。
首先我们通过以下命令查看 I2C0 总线上的设备:

i2cdetect -y 0 -r

确认 sensor 实际挂载在 I2C0 通道下,地址为 0x36
因此需要修改设备树中的 reg

sensor_0: camera-sensor@1a {
         status = "ok";
         compatible = "sony,imx334", "sony,imx664", "sony,imx675", "sony,imx678", "sony,imx715";
-        reg = <0x1a>;
+        reg = <0x36>;

2. 确认 Reset GPIO 及其极性

根据原理图,sensor 的 reset pin 对应的是 GPIO4
H15 支持通用的 GPIO 命令,如 gpiodetectgpioinfogpioset
(某些 SoC 可能使用其他方式)。

可以通过如下命令,结合原理图进行确认:

gpioset gpiochip0 4=0
sleep 0.02
i2cdetect -y 0 -r

gpioset gpiochip0 4=1
sleep 0.02
i2cdetect -y 0 -r


通过对比 reset 前后 I2C 探测结果,可以判断:

  • reset 信号是否真实连通
  • reset 的有效电平是低有效还是高有效

最终设备树中 reset GPIO 的极性修改如下:

-        reset-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
+        reset-gpios = <&gpio0 4 GPIO_ACTIVE_LOW>;

3. 修改 Sensor 输入时钟(24M → 27M)

H15H 标准 SBC 板使用的是 24MHz 晶振(CAM_0_CLK)。
但通过原理图确认,客户板上使用的是
OSC-SMD2520_4P,实际为 27MHz

因此需要修改 DTS 中的时钟频率:

-        clock-frequency = <24000000>;
+        clock-frequency = <27000000>;

同时,fixed-clock 也需要同步修改:

sensor_clk: sensor_clk {
         compatible = "fixed-clock";
         #clock-cells = <0>;
-        clock-frequency = <24000000>;
+        clock-frequency = <27000000>;
     };

另外,建议同时修改 IMX678 驱动源码中的默认输入时钟(是否必须尚未验证):

+++ b/drivers/media/i2c/imx678.c
@@ -107,8 +107,8 @@ enum imx678_input_clk_rate_code {
        INPUT_CLK_13_5_MHZ,
 };

-#define IMX678_INCLK_CODE INPUT_CLK_24_MHZ
-#define IMX678_INCLK_RATE 24000000
+#define IMX678_INCLK_CODE INPUT_CLK_27_MHZ
+#define IMX678_INCLK_RATE 27000000

可以通过如下命令查看最终设置的CLK

cat /sys/kernel/debug/clk/clk_summary | grep sensor_clk 

注意事项

在通过 Yocto 尝试编译 kernel 时,我采用了如下方式来重新生成 fitImage

devtool modify linux-yocto-hailo
devtool build linux-yocto-hailo

但这种方式在 camera sensor 相关部分仍然遗漏了一些driver的module,
导致部分地方不兼容。

推测原因可能是 kernel 版本包含小版本号所致:

5.15.325.15.32-yocto-standard-g5aaf14507b5a-dirty

(尚未完全验证)

此外,我还在 kernel 配置中增加了:

CONFIG_VIDEO_IMX678=y

该配置是否为必须项,目前同样尚未验证。


 


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注