5.15. ISP - OTP 功能
5.15.1. 功能描述
每颗
5.15.2. 通路介绍

注:当前LSC OTP方案
5.15.3. LSC OTP
5.15.3.1. 准备工作
Golden模组挑选
由
Golden模组ISP效果调试
在
5.15.3.2. 数据标定
标定环境
Golden模组
| 名称 | 参数 | 备注 |
|---|---|---|
| Gain设置 | Digital Gain: 1x;Analog Gain: 1x | - |
| Mirror/Flip设置 | Mirror OFF; Flip OFF | - |
| WB设置 | OFF | - |
| PD设置 | OFF | - |
| DPC | OFF | 拍 |
| Raw图 |
Raw10 | - |
| 图像 |
常规 |
不 |
| G值 |
对于10bit RAW数据,G值 |
- |
| G值 |
中心 (1/5 width * 1/5 Height) | 对于G值有 |
| 模组 |
扣除BLC, G值 |
LSC支持 |
| 推荐 |
5000K | radom与golden模组 |
标定流程
将
模组 置于 光源 前1cm以内,调整 模组 方向 使 模组 镜头 的 光轴 垂直于 光源 平面,若 使用 积分球 光源 则 保证 模组 镜头 能 通过 窗口 完全 置于 积分球 内。 参照3.1节
表格 要求 设置 模组,调节 光源 功率 使 成像 中心 区域 扣除BLC之后 的G值 调整 到400-650左右,拍摄RAW图。 将
拍摄 的Raw图 导入OTP tool,会 计算 获得17*17和33*33的 LSC_table 数据,对Random样件,将 生成 的17*17 LSC_table写入EEPROM;对Golden样件,需要 将33*33的LSC_table,写入 到sensor驱动 中。数据 生成 示例 请 见 第5节。 以上
步骤 完成 后,请 图像 调试 工程师 确认 画面 表现 是否 符合 预期,若 符合 预期 再 进行 批量 烧录,完成OTP标定。
5.15.3.3. OTP数据生成工具
数据
不需要编译
将raw图
参数

ct_correct_flag:
是否
标定
模组

标定
挑选5个
随机 模组。 在
产线A(以产线A为 标准)的 色温 下,拍摄 获得5张raw数据,分别 命名 成std_lsc_otp_1.raw ~ std_lsc_otp_5.raw。 在
产线B的 色温 下,拍摄 同样 的5个 模组 获得5张raw数据,分别 命名 成ext_lsc_otp_1.raw ~ ext_lsc_otp_5.raw。 之后
在 对 产线B的 某 一Random模组 使用 工具 生成OTP参数 时,可以 将ct_correct_flag配置 成1,这样 工具 会 自动 将 两条 产线 的 差异apply到OTP参数 上。
例:在
注意:
如果
是 换成 另 一产线 则 需要 按照 同样 的 方法 再次 标定。 5个
随机 模组 需要 尽量 贴近 要 校正 的 模组,当 差异 过大(例如 光学 中心 位置 偏移 过大)时,校正 的 数据 会 也 与 理想 数据 存在 较大 偏差。
需要编译
OTP tool目前
5.15.3.4. 生成数据结果
数据
5.15.3.5. sensor驱动示例代码
在sensor初始化
#ifdef OTP_EN
{
int32_t rett = 0;
int32_t v,h;
sensor_otp_t pdata = {0};
uint16_t r_matrix[17*17] = R_CHN_MATRIX;
uint16_t gr_matrix[17*17] = GR_CHN_MATRIX;
uint16_t gb_matrix[17*17] = GB_CHN_MATRIX;
uint16_t b_matrix[17*17] = B_CHN_MATRIX;
uint16_t golden_r_matrix[33*33] = R_GOLDEN_MATRIX;
uint16_t golden_gr_matrix[33*33] = GR_GOLDEN_MATRIX;
uint16_t golden_gb_matrix[33*33] = GB_GOLDEN_MATRIX;
uint16_t golden_b_matrix[33*33] = B_GOLDEN_MATRIX;
pdata.otp_lsc_enable = 1;
// 目前仅支持设置成 1
pdata.lsc_ct_num = 1;
for (v = 0; v < SENSOR_OTP_LSC_EEPROM_SIZE; v++) {
for (h = 0; h < SENSOR_OTP_LSC_EEPROM_SIZE; h++) {
pdata.lsc_data[0].r[v][h] = r_matrix[v * SENSOR_OTP_LSC_EEPROM_SIZE + h];
pdata.lsc_data[0].gr[v][h] = gr_matrix[v * SENSOR_OTP_LSC_EEPROM_SIZE + h];
pdata.lsc_data[0].gb[v][h] = gb_matrix[v * SENSOR_OTP_LSC_EEPROM_SIZE + h];
pdata.lsc_data[0].b[v][h] = b_matrix[v * SENSOR_OTP_LSC_EEPROM_SIZE + h];
}
}
for (v = 0; v < SENSOR_OTP_LSC_H_GRID_NUM; v++) {
for (h = 0; h < SENSOR_OTP_LSC_H_GRID_NUM; h++) {
pdata.lsc_data[0].golden_r[v][h] = golden_r_matrix[v * 33 + h];
pdata.lsc_data[0].golden_gr[v][h] = golden_gr_matrix[v * 33 + h];
pdata.lsc_data[0].golden_gb[v][h] = golden_gb_matrix[v * 33 + h];
pdata.lsc_data[0].golden_b[v][h] = golden_b_matrix[v * 33 + h];
}
}
rett = ioctl(sensor_info->sen_devfd, SENSOR_OTP_PARAM, &pdata);
if (rett < 0) {
vin_err("ioctl SENSOR_OTP_PARAM fail\n");
}
printf("sc202cs otp3-D65 enable\n");
}
#endif
5.15.4. AWB OTP
5.15.4.1. 准备工作
Golden模组挑选
由
Golden模组ISP效果调试
在
5.15.4.2. 数据标定
标定环境
Golden模组
| 名称 | 参数 | 备注 |
|---|---|---|
| Gain设置 | Digital Gain: 1x;Analog Gain: 1x | - |
| Mirror/Flip设置 | Mirror OFF; Flip OFF | - |
| WB设置 | OFF | - |
| PD设置 | OFF | - |
| DPC | OFF | 拍 |
| Raw图 |
Raw10 | - |
| 图像 |
常规 |
不 |
| G值 |
对于10bit RAW数据,G值 |
- |
| G值 |
中心 (1/5 width * 1/5 Height) | 对于G值有 |
| 模组 |
扣除BLC, G值 |
LSC支持 |
| 推荐 |
3100K,4000K, 5800K | radom与golden模组 |
标定流程
建议
使用 灰卡 标定,若 使用 积分球 光源 则 保证 模组 镜头 能 通过 窗口 完全 置于 积分球 内。 参照3.1 标定
环境 章节 表格 要求 设置 模组,调节 光源 功率 使 成像 中心 区域 扣除BLC之后 的G值 调整 到400-650左右,拍摄RAW图。 将
拍摄 的Raw图 导入OTP tool,会 计算 获得R/GR/GB/B/rgRatio/bgRatio数据(数据 范围 取决于raw数据格式,建议 按照16bit烧录)。对Random样件,将 生成 的 数据 写入sensor EEPROM;对Golden样件,将 数据 写入 到sensor驱动 中。数据 生成 示例 请 见5. 数据 生成 章节。 以上
步骤 完成 后,请 图像 调试 工程师 确认 画面 表现 是否 符合 预期,若 符合 预期 再 进行 批量 烧录,完成OTP标定。
5.15.4.3. OTP数据生成工具
awb otp工具
使用方法
将
需要 计算 的raw图 命名 为“otp.raw”, 在“otp_data.txt”中
配置 相关 参数, 运行exe执行
文件 得到 计算结果,保存 在“otp_result.txt”文件 中。
参数说明
image_width:图像
标定
模组

标定
挑选5个
随机 模组。 在
产线A的 高中低 三个 色温 下,拍摄 获得raw数据,将std_rg_ratio_x等20个 参数 配置 成1后,使用 工具 可以 生成5个 模组 在 三个 色温 下 的rg_ratio和bg_ratio。 在
产线B的 高中低 三个 色温 下,拍摄 同样 的5个 模组 获得raw数据,将std_rg_ratio_x等20个 参数 配置 成1后,使用 工具 可以 生成5个 模组 在 三个 色温 下 的rg_ratio和bg_ratio。 之后
在 对 产线B的 某 一Random模组 使用 工具 生成OTP参数 时,可以 将std_rg_ratio_x等20个 参数 配置 对应 色温 的 结果,这样 工具 会 自动 将 两条 产线 的 差异apply到OTP参数 上。 例:在 使用 工具 生成 产线B的 参数 时,假设 对应 的 色温 为TL84。需要 将std_rg_ratio_1、std_bg_ratio_1分别 配置 成产线A,TL84色温 下 第一个 随机 模组 生成 的 数据rg_ratio和bg_ratio,std_rg_ratio_2、std_bg_ratio_2等 依此类推。需要 将ext_rg_ratio_1、ext_bg_ratio_1分别 配置 成产线B,TL84色温 下 第一个 随机 模组 生成 的 数据rg_ratio和bg_ratio,ext_rg_ratio_2、ext_bg_ratio_2等 依此类推。
注意:
如果
5.15.4.4. 生成数据结果
数据
5.15.4.5. sensor驱动示例代码
在sensor初始化
{
sensor_otp_t pdata = {0};
pdata.otp_awb_enable = 1;
pdata.awb_ct_num = 3;
pdata.awb_golden_ct_num = 3;
pdata.awb_data[0].color_temperature = COLOR_TEMPERATURE_3100K;
pdata.awb_data[0].r = 36;
pdata.awb_data[0].gr = 76;
pdata.awb_data[0].gb = 76;
pdata.awb_data[0].b = 49;
pdata.awb_data[0].rg_ratio = 10;
pdata.awb_data[0].bg_ratio = 10;
pdata.awb_golden_data[0].color_temperature = COLOR_TEMPERATURE_3100K;
pdata.awb_golden_data[0].r = 79;
pdata.awb_golden_data[0].gr = 159;
pdata.awb_golden_data[0].gb = 161;
pdata.awb_golden_data[0].b = 105;
pdata.awb_golden_data[0].rg_ratio = 2;
pdata.awb_golden_data[0].bg_ratio = 2;
pdata.awb_data[1].color_temperature = COLOR_TEMPERATURE_4000K;
pdata.awb_data[1].r = 36;
pdata.awb_data[1].gr = 76;
pdata.awb_data[1].gb = 76;
pdata.awb_data[1].b = 49;
pdata.awb_data[1].rg_ratio = 10;
pdata.awb_data[1].bg_ratio = 10;
pdata.awb_golden_data[1].color_temperature = COLOR_TEMPERATURE_4000K;
pdata.awb_golden_data[1].r = 79;
pdata.awb_golden_data[1].gr = 159;
pdata.awb_golden_data[1].gb = 161;
pdata.awb_golden_data[1].b = 104;
pdata.awb_golden_data[1].rg_ratio = 2;
pdata.awb_golden_data[1].bg_ratio = 2;
pdata.awb_data[2].color_temperature = COLOR_TEMPERATURE_5800K;
pdata.awb_data[2].r = 35;
pdata.awb_data[2].gr = 76;
pdata.awb_data[2].gb = 76;
pdata.awb_data[2].b = 49;
pdata.awb_data[2].rg_ratio = 25;
pdata.awb_data[2].bg_ratio = 25;
pdata.awb_golden_data[2].color_temperature = COLOR_TEMPERATURE_5800K;
pdata.awb_golden_data[2].r = 79;
pdata.awb_golden_data[2].gr = 159;
pdata.awb_golden_data[2].gb = 161;
pdata.awb_golden_data[2].b = 105;
pdata.awb_golden_data[2].rg_ratio = 23;
pdata.awb_golden_data[2].bg_ratio = 23;
printf("awb otp enable\n");
hbn_camera_enable_otp(cam_fd, &pdata); //cam_fd由hbn_camera_create创建
}