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>0xA0slaveAddr>
      
      <registerAddr>0x00registerAddr>
      
      <registerData>0x1FFFregisterData>
      
      <regAddrType range="[1,4]">2regAddrType>
      
      <regDataType range="[1,4]">1regDataType>
      
      <operation>READoperation>
      
      <delayUs>0delayUs>
    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的处理流程,这样可以快速的排除问题。

你可能感兴趣的:(图像调试)