每一种分辨率都必须有对应的chromatix库文件。这里对应2种分辨率,设置的是相应的库文件名称。
结构体sensor_lib_chromatix_t定义在sensor_lib.h中:
struct sensor_lib_chromatix_t {
char *common_chromatix;
char *camera_preview_chromatix;
char *camera_snapshot_chromatix;
char *camcorder_chromatix;
char *liveshot_chromatix;
};
其数据成员都是字符型指针,用来记录不同分辨率下不同模式的库文件名称。
7. MIPI接收器配置
7.1 、CSI lane参数配置
结构体 csi_lane_params_t定义在media/msm_camera.h中:
struct csi_lane_params_t {
uint16_t
csi_lane_assign;
//端口映射设置
uint8_t csi_lane_mask;//标识哪一个lane被使用
uint8_t csi_if;//未使用
uint8_t csid_core[2]; //csid硬件选择
uint8_t csi_phy_sel; //csi-phy设备选择
};
csi_lane_assign —— 有时候用户的MIPI lanes可能使用不同与MSM参考设置的端口映射。比如,sensor的lane0连接到MSM的数据lane4等。对于这种情况,csi_lane_assign参数能设置正确的端口映射。csi_lane_assign是一个16bit的值,每位的含义参见下表。lane1用于MIPI时钟,客户不可用它来映射到任何数据lane。
csi_lane_mask —— 用于表示哪些lane被使用,这是一个8位值,每一位含义如下:
Bit position
Represents
7:5
保留
4
数据lane4是否使用:
- 0 :不
- 1 :是
3
数据lane3是否使用:
- 0 :不
- 1 :是
2
数据lane2是否使用:
- 0 :不
- 1 :是
1
数据lane1是否使用:
- 0 :不
- 1 :是
注意:该位必须设置为1
0
数据lane0是否使用:
- 0 :不
- 1 :是
比如0x1F表示4条数据lane和时钟都被使用。
csi_if —— 暂不使用。
csid_core —— 设置哪个CSID硬件被该sensor使用。两个并发的sensor不能使用同一个CSID硬件。
csi_phy_sel —— 设置哪个CSI-PHY硬件被该sensor使用。对于每一个sensor来说必须是独一无二的,除非有额外的MIPI桥连接两个sensor到同一个PHY接口上。
7.2 、虚拟通道设置
CSI2传输的数据包包头部分的起始1byte为数据标志符(Data Identifier, DI),由VC[7:6](Virtual Channel)和DT[5;0](Data Type)组成。通过不同的VC和DT值来标志不同的数据流,占2个bit位的虚拟通道VC允许最多4个数据流交叉传输,其取值范围为0~3.
下表表示不同的TD的取值及对应的数据格式。
结构体 msm_camera_csid_vc_cfg用于保存虚拟通道的设置信息,在media/msm_camera.h中定义:
struct msm_camera_csid_vc_cfg {
uint8_t
cid;
//通道号
uint8_t
dt;
//数据类型
uint8_t
decode_format;
//解码格式
};
imx230的设置如下:
其数据类型和解码格式的值是宏定义的,其中数据类型的宏定义是根据上述DT表得来的。如下:
#define CSI_EMBED_DATA0x12
#define CSI_RESERVED_DATA_00x13
#define CSI_YUV422_80x1E
#define CSI_RAW80x2A
#define CSI_RAW100x2B
#define CSI_RAW120x2C
#define CSI_DECODE_6BIT0
#define CSI_DECODE_8BIT1
#define CSI_DECODE_10BIT2
#define CSI_DECODE_DPCM_10_8_105
7.3 、数据流设置
typedef struct _sensor_stream_info_t {
uint16_t vc_cfg_size;
struct msm_camera_csid_vc_cfg *vc_cfg;
//虚拟通道设置
struct sensor_pix_fmt_info_t *pix_fmt_fourcc;//像素格式
} sensor_stream_info_t;
typedef struct _sensor_stream_info_array_t {
sensor_stream_info_t *sensor_stream_info;
uint16_t size;
} sensor_stream_info_array_t;
7.4、 CSID和CSI-PHY参数设置
struct msm_camera_csid_lut_params {
uint8_t num_cid;//虚拟通道个数
struct msm_camera_csid_vc_cfg *vc_cfg;
//虚拟通道参数
};
struct msm_camera_csid_params {
uint8_t
lane_cnt;
//使用lane的数目
uint16_t lane_assign;
uint8_t phy_sel;
struct msm_camera_csid_lut_params lut_params;
};
struct msm_camera_csiphy_params {
uint8_t lane_cnt;
uint8_t settle_cnt;
uint16_t lane_mask;
uint8_t combo_mode;
uint8_t csid_core;
};
struct msm_camera_csi2_params {
struct msm_camera_csid_params csid_params;
//CSID参数
struct msm_camera_csiphy_params csiphy_params;
//CSI-PHY参数
};
lane_cnt ——有多少数据 lane 用于数据传输. 该值必须在 sensor 最大能力范围内,而且sensor 寄存器设置必须与该 lane 数匹配.
settle_cnt ——该值须和 sensor 的特性匹配, 保证 sensor 的 MIPI 传输和 MSM 的 MIPI 接收能同步.
客户可以对不同的分辨率模式使用不同CSI 参数设置。imx230采用两种分辨率,但是使用相同的CSI设置。
8、imx230_ofilm_open_lib