MIPI_Sensor配置参考
1. 平台相关sensor驱动说明¶
1.1 平台相关相关Driver编译¶
sensor驱动源码所在位置: aosp/vendor/sigmastar/alkaid/sdk/driver/SensorDriver/drv/src
编译执行如下命令:
1. cd aosp 2. source build/envsetup.sh 3. lunch sstar_pioneer5_xxx-userdebug 4. ./sstar_make.sh -s arm 5. cd vendor/sigmastar/alkaid/sdk/driver/SensorDriver 6. make clean; make
编译后在aosp/vendor/sigmastar/alkaid/sdk/driver/SensorDriver/drv/src目录下有相应的ko生成,然后需要把对应型号的ko拷贝到aosp/device/sigmastar/pioneer5/kernel下面。
例如:drv_ms_cus_gc2053_MIPI.c编译生成的gc2053_MIPI.ko
1.2 平台相关相关Driver加载¶
配置文件所在路径:aosp/device/sigmastar/pioneer5/sdk/modparam.json
以gc2053在linux上的加载参数insmod gc2053_MIPI.ko chmap=1 lane_num=2 为例,在modparam.json中找到"E_MI_MODULE_ID_SNR"节点,参考修改如下:
参数 | 说明 |
---|---|
sensor_num | 表示sensor的个数 |
sensor_name | 加载sensor驱动的名称 |
chmap | sensor pad参数,按2^(sensor pad)来填写 |
mclk | clk时钟参数 |
lane_num | lane数 |
注:若不知道当前sensor_name的全称是什么,可以先尝试insmod一次,SensorDriver会将自己的name打印出来,例如:
上述信息都修改完成后,执行./sstar_make.sh -a
重新打包,更新vendor.img/vendor_boot.img,测试用Android Camera2 apk测试即可。
2. 平台相关Sensor DTS配置¶
mipi sensor一般需要配置的引脚为I2C引脚、MIPI信号引脚、MCLK、RST、PDN等pin脚,这部分需要根据相应的原理图并参考hw_checklist来选择相应的引脚mode。
以gc2053 2lane mipi sensor为例,选择相应的2lane接口,下面以sensor pad0的接口为例:
2.1 sensorif节点配置¶
I2C配置
采用i2c0跟SOC的接线如下,在padmux中可以添加相应的配置:
以上可以看出,该sensor使用的是I2C0,具体使用的pin脚是:PAD_I2C0_SCL/PAD_I2C0_SDA,再通过HW_Checklist查看,该pin做为I2C0的时候,是使用的I2C0_MODE1
则需要在对应的DTS中配置,具体如下:
-
Padmux中配置该pin为I2C0_MODE1
-
在sensorif节点中配置对应的sensor grp的i2c bus,这里是I2C0,所以直接写0即可
2.2 vif节点配置¶
MIPI PIN MODE设置
gc2053为2 lane的mipi输出信号,sr0_mipi_mode 可以选择2的模式:
以上可以看出,该sensor使用2lane 的mipi来传输,根据原理图可以看出对应使用的pin为:
MIPI_MODE:PAD_OUTN_RX0_CH0 ~ PAD_OUTN_RX0_CH2 对应sr0_mipi_mode=2 MCLK: PAD_SR_MCLK0 对应mclk_mode=1 mclk_id=00 PDN: PAD_SR_PDN0 对应pdn_mode=1 pdn_id=00 RST: PAD_SR_RST0 对应rst_mode=1 rst_id=00
则在dts上的的vif节点配置如下:
2.3 csi节点配置¶
MIPI LANE Select配置
csi_sr0_lane_num :选择mipi的data lane数
csi_sr0_lane_select :对应MIPI CSI的< CLK Lane0 Lane1 Lane2 Lane3>
csi_sr0_lane_pn_swap :对应原始PIN的 PAD_OUT<CH0 CH1 CH2 CH3 CH4>
,跟csi_sr0_lane_select无关
GC2053 Sensor的原理接线图如下,配置示例:
如上图clk 在CH2位置:
1、接线是2lane :所以csi_sr0_lane_num=<2>
2、D0在CH0位置,CLK在CH2,D1在CH1,对应上< CLK Lane0 Lane1 Lane2 Lane3>,所以csi_sr0_lane_select = <2 0 1>
3、原理图P/N是线序相同无交换,所以csi_sr0_lane_pn_swap = <0 0 0 >
3. Android camera_hal配置修改:camera_configuration.xml¶
Camera HAL是通过camera_configuration.xml来配置的,可以在里面添加删减支持的Camera信息,Camera HAL在初始化时会来读取这个配置文件,然后根据配置的Camera信息来配置对应的Pipeline。
配置文件所在目录:aosp/device/sigmastar/pioneer5/pioneer5_xxx/camera_configuration.xml
配置文件格式大致如下,根节点为CameraSettings,CameraInfo节点为设备上使用的Camera,Common节点为一些额外的功能项配置(目前是IQServer配置这一项),Settings name="xxx" 节点为添加的Camera的CameraStaticMetadata信息:
<CameraSettings> <CameraInfo> ... </CameraInfo> <Common> ... </Common> <Settings name = "xxx"> <CameraStaticMetadata> ... </CameraStaticMetadata> </Settings> <Settings name = "xxx"> <CameraStaticMetadata> ... </CameraStaticMetadata> </Settings> ... </CameraSettings>
3.1. CameraInfo节点¶
CameraInfo表示当前设备接入的Camera信息。实际要接入多少个Camera,就在这里添加。
参数 | 描述 |
---|---|
name | Camera名称,需要与下面setting节点的name匹配,不然会找不到CameraStaticMetadata信息。 |
cameraId | 即index,从0开始依次加1递增。目前默认支持两个sensor,0表示Back Camera,1表示Front Camera。 |
chmap | 根据实际接在哪个sensor填写,计算方法为chmap = 2^(sensor pad),比如接在sensor pad0,那么chmap是2的0次方1;接在sensor pad1,那么chmap是2的1次方2,以此类推。 |
sensorType | camera类型 |
frame.initialSkip | 由于AE收敛过程导致的颜色异常,可以通过这个值来Skip掉前面未收敛前的帧数。 |
3.2. Common节点¶
目前只有一项配置,IQServer.open,表示是否打开IQServer。
3.3. Settings节点¶
包含camera name和CameraStaticMetadata。
CameraStaticMetadata是描述Camera的静态能力属性,hal初始化时,上层会通过get_camera_info来获取这些能力属性值。
3.4. 新增camera的配置¶
以新增gc2053为例:
-
新增添加的camera的camerainfo节点信息
-
新增settings节点配置,添加CameraStaricMetadata信息
4. IQ调试¶
iq.bin所在路径:aosp/device/sigmastar/pioneer5/sdk
代码路径:aosp/vendor/sigmastar/hardware/camera/sstar_iqserver
可执行文件在板端的位置:/vendor/bin/sstar_iqserver
使用方式:
-
板子联网,确认和iqtool所在电脑互通;
-
打开iqserver;
cd /vendor/bin ./sstar_iqserver &
-
iq tool连接。