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)目录下。
...