一、pinmap介绍
- 三路电压
camera包含的三路电压为模拟电压(VCAMA),数字电压(VCAMD),IO口电压(VCAMIO)
- I2C信号
BB与Sensor端通过I2C来通信(读写寄存器),包含SCL(I2C clock)、SDA(I2C Data)信号
- mipi接口几条lane
mipi data是成对的差分信号,MIPI_RDN和MIPI_RDP,有几对这样的pin脚,则说明是几条lane,同一颗sensor由于register setting不同,输出的信号可能是2lane或者4lane等
- parallel接口高低八位
parallel接口一般data有10根pin,分别叫做Data0~Data9,Parallel sensor输出的data信号是8根pin时,这八根pin接到的是Data0~Data7还是Data2~Data9,需要配置正确,叫做接到高八位或者低八位,接错了可能产生如下现象。
- Data Format
Sensor输出的数据格式,对于YUV Sensor来说,Data Fomat一般有YUYV,YVYU,UYVY等,配置不对可能会导致颜色和亮度错掉,例如下图:
对于Raw Sensor来说,Data Format就是First Pixel的颜色,分为R,Gr,Gb,B,配置不对会导致颜色错误。
- MLCK
BB提供给Sensor的外部clock
- PLCK
Parallel接口的Sensor输出的clock,该clock变化一次,data更新一次
- mipi信号
mipi信号包括mipi clock和mipi data,该信号是高速信号,用来传输mipi数据包
二、具体说明
三、详细配置
MTK平台能给Sensor供电的部分,通常有GPIO和PMIC。GPIO供电还是REGULATOR供电 查看原理图与规格书。供电配置文件路径:
kernel-$(KernelVersion)/drivers/misc/mediatek/imgsensor/src/$(Platform)/camera_hw/imgsensor_cfg_table.c
struct IMGSENSOR_HW_CFG imgsensor_custom_config[] = {
{
IMGSENSOR_SENSOR_IDX_MAIN, //Main Sensor or Sub Sensor
IMGSENSOR_I2C_DEV_0,
{
/* pin脚的功能 由谁提供 */
{IMGSENSOR_HW_PIN_MCLK, IMGSENSOR_HW_ID_MCLK},
{IMGSENSOR_HW_PIN_AVDD, IMGSENSOR_HW_ID_REGULATOR}, //IMGSENSOR_HW_ID_REGULATOR, power by PMIC
{IMGSENSOR_HW_PIN_DOVDD, IMGSENSOR_HW_ID_REGULATOR},
{IMGSENSOR_HW_PIN_DVDD, IMGSENSOR_HW_ID_GPIO}, //IMGSENSOR_HW_ID_GPIO,power by GPIO
{IMGSENSOR_HW_PIN_PDN, IMGSENSOR_HW_ID_GPIO},
{IMGSENSOR_HW_PIN_RST, IMGSENSOR_HW_ID_GPIO},
{IMGSENSOR_HW_PIN_NONE, IMGSENSOR_HW_ID_NONE},
},
}
kernel-$(KernelVersion)/drivers/misc/mediatek/imgsensor/src/common/v1_1/sensor_pwr_seq.c 定义上电时序。
struct IMGSENSOR_HW_POWER_INFO {
enum IMGSENSOR_HW_PIN pin;
enum IMGSENSOR_HW_PIN_STATE pin_state_on;
u32 pin_on_delay;
enum IMGSENSOR_HW_PIN_STATE pin_state_off;
u32 pin_off_delay;
};
struct IMGSENSOR_HW_POWER_SEQ { //上电时序结构体
char *name;
struct IMGSENSOR_HW_POWER_INFO pwr_info[IMGSENSOR_HW_POWER_INFO_MAX];
u32 _idx;
};
根据hw 配置正确的电源,具体连接的哪一路需要在dts/dws 文件配置, 确保check到位。
struct IMGSENSOR_HW_POWER_SEQ sensor_power_sequence[] = {
#if defined(IMX576_MIPI_RAW)
{
SENSOR_DRVNAME_IMX576_MIPI_RAW,
{
/* pin, vol, delay 从上之下上电时序,从下到上下电时序*/
{RST, Vol_Low, 0},
{AVDD, Vol_2800, 1},
{DOVDD, Vol_1800, 1},
{DVDD, Vol_1100, 5},
{SensorMCLK, Vol_High, 0},
{RST, Vol_High, 2}
},
},
#endif
//从上到下是上电的sequence,根据sensor FAE提供的datasheet 来填写,供电正常是i2c通信的前提条件,因此每一项都需要准确无误。