OTP数据的获取方式
可参数模组厂提供的OTPguideOTP数据的存储位置
1)otp数据如果不大,为了节省成本,可以存储在sensor内部寄存器中。不过由于one time program,可能烧写出错,所以会有两到三组数据。
2)数据量大的情况存储在外挂eeprom中,所以该器件有独立的iic地址,并且eeprom和sensor的寄存器并不是统一编址。
在sensor端读取数据时有个读取规则,可能是需要配置sensor的当前工作模式什么的,eeprom没这么复杂,直接上电就可以读数据。-
OTP数据的正确性验证
第一步 看kernel层打印
该日志打印位置,eeprom_parse_memory_map。读出来的值是烧录的原始otp数据,可以验证厂家烧录的值是否正确
第二步 查看vendor打印
vendor打印打印一般看驱动的打印就够了,format_calibration_data中会对读取到的otp解析计算,比如分解出模组厂商信息,模组生产日期,awb计算出R/G,B/G的值,最后才用这些数据做校准。
OTP的校准方式
1)sensor端校准
如果在sensor端校准,一般校准函数为NULL。
2)平台端校准
调用平台自带的校准函数分别对awb,lsc,af和pdaf做校准。代码结构
文件:module_sensor.c eeprom.c msm_eeprom.c
OTP初始化步骤:
入口函数:module_sensor_init_eeprom
内核空间:
(1)设备驱动匹配,跑msm_eeprom_platform_probe
(2)解析设备树数据,保存
(3)注册v4l2子设备
vendor 用户空间:
/* (1) Open the eeprom sub module */
rc = func_tbl.open((void *)&s_bundle->eeprom_data,
&s_bundle->subdev_info[SUB_MODULE_EEPROM]);
/ (2) Load eeprom library /
eeprom_load_library(s_bundle->eeprom_data, bin_ctl.ctl.name_data.path);
/ (3) Powerup and parse the eeprom /
func_tbl.process(s_bundle->eeprom_data, EEPROM_INIT, NULL);
=>eeprom.c eeprom_init
cfg.cfgtype = CFG_EEPROM_INIT;
cfg.cfg.eeprom_info = eeprom_info;
rc = ioctl(ectrl->fd, VIDIOC_MSM_EEPROM_CFG, &cfg);
msm_eeprom.c :
eeprom_init_config->
msm_eeprom_power_up->eeprom_parse_memory_map->msm_camera_power_down
/ (4) Read the eeprom data from kernel /
rc = func_tbl.process(s_bundle->eeprom_data, EEPROM_READ_DATA, NULL);
/ (5) Format the cal data /
rc = func_tbl.process(s_bundle->eeprom_data, EEPROM_SET_FORMAT_DATA, NULL);
==> .format_calibration_data
/ (6) close the eeprom sub module */
rc = func_tbl.close(s_bundle->eeprom_data);
OTP调试笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 转载请注明出处(https://www.jianshu.com/p/5f538820e370),您的打赏是小编继续...
- 系列文章【Camera专题】Qcom-你应该掌握的Camera调试技巧1[https://www.jianshu....