Camera OTP/EEPROM 读取与处理

Camera OTP/EEPROM 读取与处理

文章目录

Camera OTP/EEPROM 读取与处理

  1. OTP概念
    1.1 基本概念
    1.2 OTP存储类型
    1.3 OTP烧录信息类型
    1.4 OTP 作用
  2. 配置准备
    2.1 基本认识
    2.2 OTP/EEPROM配置
  3. OTP/EEPROM datasheet理解 以及 读取方式
    3.1 data sheet 内容
    3.2 一般OTP/EEPROM(eg.imx系列)的读取方式
    3.3 GC系列 OTP 读取方式
  4. Kernel dtsi配置
  5. 总结

这也不能算得上是指南吧,只是读取OTP和EEPROM中的一些操作,希望可以给到大家可以学到一些有用的skills。【因为一些问题,所以就不分享图了,本文的主要目的是去了解GC系列的sensor otp读取方式】

1. OTP概念

1.1 基本概念

Camera Module一般会采取两种方式来记录该Sensor的一些信息,一种是OTP(One Time Programmable),另外一种是EEPROM (Electrically Erasable Programmable Read - Only Memory)。

OTP:是一次性可编程,程序或者数据烧入存储器后,将不可再次更改和清除。

1.2 OTP存储类型

目前主流的有2种:① OTP数据烧录在sensor的寄存器中。 这种方案省钱,不需要额外的存储器件,但是存储空间小,如果需要烧录的数据量过大,就不适用。
② OTP数据烧录在EEPROM中:EEPROM是指带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片。 该方案优势是存储空间大,如果数据量过多,就需要这种方案,缺点是多一个独立的EEPROM存储器件。

1.3 OTP烧录信息类型

OTP烧录的数据类型 一般包括:

  • AF:自动对焦校准数据
  • AWB:白平衡校准数据
  • LSC:镜头阴影校准 (Lens Shading Calibration)
  • Moudle Info:模组信息,包含模组的生产年月日,模组ID等
1.4 OTP 作用

OTP是用来给camera sensor做calibration(校准)用的。 因为模组生产出来会有很大的差异性,为了保证效果一致性, 模组厂会挑选一部分模组作为golden,然后将其他模组的相应参数校准到和这些golden一样, (golden不是最好的模组,也不是最差的模组,而是各方面最平均的模组)。

2. 配置准备

2.1 基本认识

如果是高通平台,首先需要读文档:
Camera Sensor Driver Bring-up Guide 80-P9301-97 Rev. F.pdf
看bring up的文档时可以参考一个camera sensor去看一下其对应的sensor xml和eeprom xml。

2.2 OTP/EEPROM配置
  • kernel/msm-4.14/arch/arm64/boot/dts/qcom/sm6150-camera-sensor-***.dtsi 中配置eeprom对应的dtsi
  • vendor/qcom/proprietary/chi-cdk/vendor/eeprom/.xml 配置eeprom对应的xml
  • 确认vendor/qcom/proprietary/chi-cdk/cdk/tools/buildbins_***.yaml中的sensormodule一致【目的是为了生成.bin和.so文件】
  • 如果需要,配置软件驱动
    在eeprom//文件夹中添加.cpp
vendor/qcom/proprietary/chi-cdk/vendor/eeprom/****_eeprom.cpp
vendor/qcom/proprietary/chi-cdk/vendor/eeprom/Android.mk

这一部分修改会涉及到很多细节的地方。需要格外仔细!

  • 确认…/chi-cdk/vendor/eeprom/eepromname/default/android.mk内名称和路径一致
  • 确认…/chi-cdk/vendor/android.mk 中eeprom的名称和路径一致
  • 注意: 一般情况下各个sensor、eeprom、actuator等文件下的xml中的name一般和文件夹的名字一致,这样一般不会出现编译错误和其他麻烦。

3. OTP/EEPROM datasheet理解 以及 读取方式

3.1 data sheet 内容

通常查看需要配置的OTP 的data sheet,查看字节存储起始地址和需要读取的字节数。例如imx582的起始地址为0x0000,读取的字节长度0x1FFF。
查看eeprom写入了哪些内容以及对应的地址,这些信息会在xml中formatInfo中使用地址和内容。

3.2 一般OTP/EEPROM(eg.imx系列)的读取方式

通过data sheet 查看eeprom的读取方式,eeprom_XML中的slave-addr以及上下电的配置要根据硬件图来设置。通常eeprom读取是在memeorymap中设置读取地址和读取的字节长度,camxeepromdata.cpp中会根据地址和偏移量将eeprom中的烧录内容直接放到buffer中。
在imx_eeprom.xml中,通过memorymap*的设置如下:

<memoryMap>
    <regSetting>
      <slaveAddr>0xA0</slaveAddr>
      <!--Register address that is accessed -->
      <registerAddr>0x00</registerAddr>
      <!--If operation is WRITE, registerData is the data value to be written into the specified register address
          If operation is READ, registerData is the number of bytes to be read from the specified register address -->
      <registerData>0x1FFF</registerData>
      <!--Register address / data size in bytes -->
      <regAddrType range="[1,4]">2</regAddrType>
      <!--Register address / data size in bytes -->
      <regDataType range="[1,4]">1</regDataType>
      <!--Type of the operation
          Valid values are: WRITE, READ, POLL -->
      <operation>READ</operation>
      <!--Delay in micro seconds. Delay is 0 if not explicitly provided -->
      <delayUs>0</delayUs>
    </regSetting>
  </memoryMap>

3.3 GC系列 OTP 读取方式

但是GC这类OTP的读取方式与其他OTP的读取方式不同,查看GC的data sheet,GC每次只读取一个地址的内容。
并且读取之前需要进行sensor system的初始化设置和otp初始话设置注意: 这部分初始化相当重要,如果没有设置sensor system初始化的话,读取出来的数据会都是0。所以一般如果可以读取数据,那么最好及时联系sensor的FAE去取得sensor OTP默认操作流程文件,来排查读取失败的原因。 】,每个读取的地址要进行寄存器设置。所以设置gc***_eeprom.xml时,memorymap中所有需要读取的地址都需要设置一遍,然后再通过0x6c得到一个地址内容。

4. Kernel dtsi配置

在kernel层要配置camera的soc,其路径是:
kernel/msm-4.14/arch/arm64/boot/dts/qcom/sm6150-camera-sensor-***.dtsi
如果是配置sensor otp对应的eeprom dtsi,可以直接拿sensor的信息来用sensor的dtsi配置。

如果是单独从EEPROM中读取信息,那么根据规格书硬件图来配eeprom部分的信息。

5. 总结

在GC**** OTP读取过程中,最大的问题是从CAMX中camxeepromdata.cpp到Kernel中cam_eeprom_core.c读取数据都是零。如果通过各个模块的检查发现读取到的数据不正确,这时候要及时联系FAE确保读取过程中没有操作步骤和配置的失误。
另外,要了解camx中eeprom的处理流程,这样可以快速的排除问题。
原文链接
OTP/EEPROM 读取与处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • OTP数据的获取方式可参数模组厂提供的OTPguide OTP数据的存储位置1)otp数据如果不大,为了节省成本,...
    窝窝蜗牛阅读 7,162评论 0 0
  • 和你一起终身学习,这里是程序员 Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Kernel...
    程序员Android1阅读 6,702评论 0 3
  • 和你一起终身学习,这里是程序员 Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Camera...
    程序员Android1阅读 6,020评论 0 0
  • 1、问题背景 通过最近做的一些项目,发现 Tuning 一款 Camera 产品前,要考虑到的事情有很多,不是简单...
    木东_Camera阅读 2,890评论 0 1
  • 前言 OTP加载是摄像头驱动开发中必不可少的一部分,初学者可能会觉得这一概念晦涩难懂,或者不知道其具体用途,本章节...
    窝窝蜗牛阅读 11,867评论 0 5

友情链接更多精彩内容