OTP/EEPROM 读取与处理

Camera OTP/EEPROM 读取与处理


这也不能算得上是指南吧,只是读取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的处理流程,这样可以快速的排除问题。

  • 14
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值