Sensor Q&A

Q1: mipi sensor需要配置哪些pin?如何配置?

以1lane的GC1054 sensor为例,需要配置的pin如下:

mipi相关的clk和data在pioneer3.dtsi中配置:

如果sensor端mipi的clk和data跟芯片出来的不一致,可以通过dts的csi来配置:

csi {
/* mipi0 2lane setting */
/* Config max lane number */
csi_sr0_lane_num = <1>; // 1: for GC1054 1 lane; 2: for imx307 2 lane
/* Config lane selection */
csi_sr0_lane_select = <1 0 2 3 4>; //<clk d0 d1 d2 d3>; <1 0 2 3 4> for GC1054, <0 1 2 3 4> for imx307
//csi_sr1_lane_select = <1 0 2 3 4>;
/* Config lane P/N swap */
csi_sr0_lane_pn_swap = <1 1 1 1 1>;
//csi_sr1_lane_pn_swap = <1 1 1 1 1>;
};

其中csi_sr0_lane_select是对应驱动中的一个数组,数组里面的元素为PADA_OUT_CH对应的坐标,csi_sr0_lane_select里面5个位置分别对应MIPI CSI的\< CLK Lane0 Lane1 Lane2 Lane3>

以接1lane的gc1054为例,只要配置clk和lane0就可以了,对应的clk和lane0 index分别为1,0,所以csi_sr0_lane_select的值为\< 1 0 x x x>;

但是csi_sr0_lane_pn_swap 里面5个位置分别对应 PADA_OUT_ \< CH0 CH1 CH2 CH3 CH4>是否需要P/N交叉,而不是对应\<CLK Lane0 Lane1 Lane2 Lane3>这5组lane的顺序,注意swap的5个index固定对应 PADA_OUT_CH,不随select的lane顺序变化改变

如上图原本芯片PAD_SR_IO07要接的是mipi P信号,但是实际接是sensor的N信号,所以csi_sr0_lane_pn_swap的值也要填1来做swap。

mclk & powerdown & reset pin在pioneer3.dtsi的如下位置配置:

i2c pin在pioneer3.dtsi的如下位置配置:

其中的1代表用的是i2c1,i2c1 pin脚的配置参考i2c使用说明

Q2: sensor的i2c地址在哪里配置?

sensor i2c地址在sensor驱动配置。

注意:sensor驱动里填i2c的writeaddr,不是slave addr,一般writeaddrs = slave addr *2。

Q3: 新增一个Sensor驱动如何编译进image?

用户拿到的source code,sdk文件夹不参与整个project的编译,新增sensor驱动后,需要在sdk/driver下make SensorDriver编译出ko档,再替换到$(PROJ_ROOT)/release/$(PRODUCT)/$(CHIP)/common/$(TOOLCHAIN)/$(TOOLCHAIN_VERSION)/modules/$(KERNEL_VERSION)目录下。

...