Camera OTP/EEPROM 讀取與處理
文章目錄
Camera OTP/EEPROM 讀取與處理
- OTP概念
1.1 基本概念
1.2 OTP存儲(chǔ)類型
1.3 OTP燒錄信息類型
1.4 OTP 作用 - 配置準(zhǔn)備
2.1 基本認(rèn)識(shí)
2.2 OTP/EEPROM配置 - OTP/EEPROM datasheet理解 以及 讀取方式
3.1 data sheet 內(nèi)容
3.2 一般OTP/EEPROM(eg.imx系列)的讀取方式
3.3 GC系列 OTP 讀取方式 - Kernel dtsi配置
- 總結(jié)
這也不能算得上是指南吧,只是讀取OTP和EEPROM中的一些操作,希望可以給到大家可以學(xué)到一些有用的skills?!疽?yàn)橐恍﹩?wèn)題,所以就不分享圖了,本文的主要目的是去了解GC系列的sensor otp讀取方式】
1. OTP概念
1.1 基本概念
Camera Module一般會(huì)采取兩種方式來(lái)記錄該Sensor的一些信息,一種是OTP(One Time Programmable),另外一種是EEPROM (Electrically Erasable Programmable Read - Only Memory)。
OTP:是一次性可編程,程序或者數(shù)據(jù)燒入存儲(chǔ)器后,將不可再次更改和清除。
1.2 OTP存儲(chǔ)類型
目前主流的有2種:① OTP數(shù)據(jù)燒錄在sensor的寄存器中。 這種方案省錢(qián),不需要額外的存儲(chǔ)器件,但是存儲(chǔ)空間小,如果需要燒錄的數(shù)據(jù)量過(guò)大,就不適用。
② OTP數(shù)據(jù)燒錄在EEPROM中:EEPROM是指帶電可擦可編程只讀存儲(chǔ)器,是一種掉電后數(shù)據(jù)不丟失的存儲(chǔ)芯片。 該方案優(yōu)勢(shì)是存儲(chǔ)空間大,如果數(shù)據(jù)量過(guò)多,就需要這種方案,缺點(diǎn)是多一個(gè)獨(dú)立的EEPROM存儲(chǔ)器件。
1.3 OTP燒錄信息類型
OTP燒錄的數(shù)據(jù)類型 一般包括:
- AF:自動(dòng)對(duì)焦校準(zhǔn)數(shù)據(jù)
- AWB:白平衡校準(zhǔn)數(shù)據(jù)
- LSC:鏡頭陰影校準(zhǔn) (Lens Shading Calibration)
- Moudle Info:模組信息,包含模組的生產(chǎn)年月日,模組ID等
1.4 OTP 作用
OTP是用來(lái)給camera sensor做calibration(校準(zhǔn))用的。 因?yàn)槟=M生產(chǎn)出來(lái)會(huì)有很大的差異性,為了保證效果一致性, 模組廠會(huì)挑選一部分模組作為golden,然后將其他模組的相應(yīng)參數(shù)校準(zhǔn)到和這些golden一樣, (golden不是最好的模組,也不是最差的模組,而是各方面最平均的模組)。
2. 配置準(zhǔn)備
2.1 基本認(rèn)識(shí)
如果是高通平臺(tái),首先需要讀文檔:
Camera Sensor Driver Bring-up Guide 80-P9301-97 Rev. F.pdf
看bring up的文檔時(shí)可以參考一個(gè)camera sensor去看一下其對(duì)應(yīng)的sensor xml和eeprom xml。
2.2 OTP/EEPROM配置
- kernel/msm-4.14/arch/arm64/boot/dts/qcom/sm6150-camera-sensor-***.dtsi 中配置eeprom對(duì)應(yīng)的dtsi
- vendor/qcom/proprietary/chi-cdk/vendor/eeprom/.xml 配置eeprom對(duì)應(yīng)的xml
- 確認(rèn)vendor/qcom/proprietary/chi-cdk/cdk/tools/buildbins_***.yaml中的sensormodule一致【目的是為了生成.bin和.so文件】
- 如果需要,配置軟件驅(qū)動(dòng)
在eeprom//文件夾中添加.cpp
vendor/qcom/proprietary/chi-cdk/vendor/eeprom/****_eeprom.cpp
vendor/qcom/proprietary/chi-cdk/vendor/eeprom/Android.mk
這一部分修改會(huì)涉及到很多細(xì)節(jié)的地方。需要格外仔細(xì)!
- 確認(rèn)…/chi-cdk/vendor/eeprom/eepromname/default/android.mk內(nèi)名稱和路徑一致
- 確認(rèn)…/chi-cdk/vendor/android.mk 中eeprom的名稱和路徑一致
- 注意: 一般情況下各個(gè)sensor、eeprom、actuator等文件下的xml中的name一般和文件夾的名字一致,這樣一般不會(huì)出現(xiàn)編譯錯(cuò)誤和其他麻煩。
3. OTP/EEPROM datasheet理解 以及 讀取方式
3.1 data sheet 內(nèi)容
通常查看需要配置的OTP 的data sheet,查看字節(jié)存儲(chǔ)起始地址和需要讀取的字節(jié)數(shù)。例如imx582的起始地址為0x0000,讀取的字節(jié)長(zhǎng)度0x1FFF。
查看eeprom寫(xiě)入了哪些內(nèi)容以及對(duì)應(yīng)的地址,這些信息會(huì)在xml中formatInfo中使用地址和內(nèi)容。
3.2 一般OTP/EEPROM(eg.imx系列)的讀取方式
通過(guò)data sheet 查看eeprom的讀取方式,eeprom_XML中的slave-addr以及上下電的配置要根據(jù)硬件圖來(lái)設(shè)置。通常eeprom讀取是在memeorymap中設(shè)置讀取地址和讀取的字節(jié)長(zhǎng)度,camxeepromdata.cpp中會(huì)根據(jù)地址和偏移量將eeprom中的燒錄內(nèi)容直接放到buffer中。
在imx_eeprom.xml中,通過(guò)memorymap*的設(shè)置如下:
<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每次只讀取一個(gè)地址的內(nèi)容。
并且讀取之前需要進(jìn)行sensor system的初始化設(shè)置和otp初始話設(shè)置 【 注意: 這部分初始化相當(dāng)重要,如果沒(méi)有設(shè)置sensor system初始化的話,讀取出來(lái)的數(shù)據(jù)會(huì)都是0。所以一般如果可以讀取數(shù)據(jù),那么最好及時(shí)聯(lián)系sensor的FAE去取得sensor OTP默認(rèn)操作流程文件,來(lái)排查讀取失敗的原因。 】,每個(gè)讀取的地址要進(jìn)行寄存器設(shè)置。所以設(shè)置gc***_eeprom.xml時(shí),memorymap中所有需要讀取的地址都需要設(shè)置一遍,然后再通過(guò)0x6c得到一個(gè)地址內(nèi)容。
4. Kernel dtsi配置
在kernel層要配置camera的soc,其路徑是:
kernel/msm-4.14/arch/arm64/boot/dts/qcom/sm6150-camera-sensor-***.dtsi
如果是配置sensor otp對(duì)應(yīng)的eeprom dtsi,可以直接拿sensor的信息來(lái)用sensor的dtsi配置。
如果是單獨(dú)從EEPROM中讀取信息,那么根據(jù)規(guī)格書(shū)硬件圖來(lái)配eeprom部分的信息。
5. 總結(jié)
在GC**** OTP讀取過(guò)程中,最大的問(wèn)題是從CAMX中camxeepromdata.cpp到Kernel中cam_eeprom_core.c讀取數(shù)據(jù)都是零。如果通過(guò)各個(gè)模塊的檢查發(fā)現(xiàn)讀取到的數(shù)據(jù)不正確,這時(shí)候要及時(shí)聯(lián)系FAE確保讀取過(guò)程中沒(méi)有操作步驟和配置的失誤。
另外,要了解camx中eeprom的處理流程,這樣可以快速的排除問(wèn)題。
原文鏈接
OTP/EEPROM 讀取與處理