高通 Sensor Bringup流程

98c6043285b909f43a93374f2b0e87ed.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、相机Sensor 点亮相关的文件
二、Sensor 驱动文件详解

一、相机Sensor 点亮相关的文件

1.1 Sensor 点亮相关的文件

Sensor Setting 文件路径如下:\chi-cdk\oem\sensor\sensor_name,这颗 Sensor 目录里面会有Sensor厂商提供或者别的项目copy过来或者参考同厂家成熟的 sensor.cpp 、 sensor.xml 、sensorpdaf*.xml、Android.mk文件等文件

比如:

vendor\qcom\proprietary\chi-cdk\oem\sensor\imx586
   vendor\qcom\proprietary\chi-cdk\oem\sensor\imx586\imx586.cpp
   vendor\qcom\proprietary\chi-cdk\oem\sensor\imx586\imx586.xml
   vendor\qcom\proprietary\chi-cdk\oem\sensor\imx586\imx586_pdaf.xml
   vendor\qcom\proprietary\chi-cdk\oem\sensor\imx586\Android.mk
1.2 sensor 其他文件

sensor 其他 xml 配置文件,比如: actuator、EEPROM、Flash、module、PDAF等文件存放的目录chi-cdk\oem\qcom\下对应的目录下。这些xml 通过android.mk 或者 buildbins_*.yaml会被编译成sensor bin 文件(生成bin文件 路径:/vendor/lib64/camera),主要编译的xml 如下:

CAMX_LOCAL_BIN := sensor.bin
CAMX_LOCAL_BIN_INPUTS:= sensor/sensor_setting.xml
                         module/sensor_module.xml
                         flash/sensor_flash.xml
                         actuator/sensor_actuator.xml
                         eeprom/sensor_eeprom.xml
                         sensor/sensor_pdaf.xml
1.3 sensor 代码编译
sensor bin 文件编译

不同的公司编译方法不一样,具体参考内部编译指令。
1.如果是在.mk 文件中控制,可以执行mm编译命令
2.如果是通过python yaml 文件控制,bin文件编译脚本命令参考如下: ./buildbins_*.py --yaml-file-name buildbins_*.yaml
buildbins_.yaml 文件中需要把对应的senesor.xml 以及module.xml 编译起来,yaml 文件中有指定。
执行py脚本后会生成com.qti.sensor*.bin文件。

sensor so 文件编译

sensor*.cpp 编译生成so 文件 ,so可以按正常的mm 编译库文件编译,或者参考自己公司客制化的编译方法

1.4 dtsi 设备树文件

dtsi 设备树文件路径如下:
\kernel\msm-4.19\arch\arm64\boot\dts\vendor\camera
比如target_name-camera-sensor-platform.dtsi

需要编译dtboimage 编译生成dtbo.img ,另外需要编译bootimge 生成 boot.img, 使用fastboot flash dtbo dtbo.img 刷入手机中(需要跟bootimage一起刷入)

二、Sensor 驱动文件详解

2.1 sensor*.xml 文件详解

sensor*.xml
会包含 power settings,resolution, initialization settings, and exposure settings等详细请看下面距离。

XML 中sensor 相关的解释可以查看API 文件
vendor\qcom\proprietary\chi-cdk\api\sensor\camxsensordriver.xsd

节点名作用
sensorDriverDataXML 中sensor 相关的解释可以查看API 文件;Sensor 驱动数据 chi-cdk/api/sensor/camxsensordriver.xsd
slaveInfosensor 附属信息
sensorNamesensor 名称
sensorIdsensor id
i2cFrequencyModei2c 频率类型: STANDARD (100 KHz) , FAST(400 KHz) , FAST_PLUS(1 MHz), Custom(dtsi 中客制化)
powerUpSequence上电序列
configType配置上电类型,比如:VANA 、VIO、VAF、VDIG、RESET、MCLK 等
powerDownSequence下电序列 上下电顺序相反
regAddrinfoSensor 寄存器包含的各种信息以及Feature
frameLengthLines总共有多少行frameLength
lineLengthPixelClock每行有多少个pixelclock
testPatternRAddrITS test Pattern 相关
resolutionInfosensor 所有resolution 的 setting 与 sensormode 相关
resolutionDatasensor mode 0 for full size 第一个必须 Full 全尺寸size
VCVirtual Channel of the data 数据传输的虚拟通道(0-31)
DTData type of the stream 数据流类型,默认 Raw10
frameDimension出图 尺寸size
outputPixelClock输出的picxel clock
frameRate帧率 fps = outputPixelClock/(frameLengthLines*lineLengthPixelClock)
laneCount数据流传输通道数
regSettingsFAE给的对应模式下的 多组寄存器setting
cropInfo每帧crop 参数信息
capabilityFeature 支持 比如QCFA
RemosaicTypeInfoRemosaic 类型支持 比如:SWRemosaic HWRemosaic
ADCReadoutTimeAnalog-to-digital sensor 模数转换时间
exposureControlInfo曝光控制相关
minLineCount最小曝光行数
maxLineCount最大曝光行数
streamOnSettingssensor 启流的setting
streamOffSettingssensor 关流
masterSettings帧同步相关的master setting 仅当 HWRemosaic 开启的时候才可以生效
initSettingssensor 初始化的时候调用
testPatternInfoITS testPattern 纯色图片 测试相关 不支持 off ,常用 SOLID_COLOR 支持 纯黑,纯白,纯红,纯绿,纯蓝
// XML  中sensor 相关的解释可以查看API 文件
//chi-cdk/api/sensor/camxsensordriver.xsd

<sensorDriverData>
   // sensor 附属信息
   <slaveInfo>
       //sensor 名称
       <sensorName>s5k***_rear</sensorName>
       <slaveAddress>0x5a</slaveAddress>
       // Sensor ID
       <sensorId>0x38</sensorId>
       //i2c 频率类型: STANDARD (100 KHz) , FAST(400 KHz) , FAST_PLUS(1 MHz), Custom(dtsi 中客制化) 
       <i2cFrequencyMode>FAST</i2cFrequencyMode>
       //上下电顺序相反
       //上电类型以及配置的值
       <powerUpSequence> 
           <powerSetting>
               //配置上电类型,比如:VANA 、VIO、VAF、VDIG、RESET、MCLK 等待
               <configType>VANA</configType>
               <configValue>1</configValue>
               <delayMs>0</delayMs>
           </powerSetting>
           ... ...
           <powerSetting>
               //配置上电类型,比如:VANA 、VIO、VAF、VDIG、RESET、MCLK 等
               <configType>MCLK</configType>
               <configValue>19200000</configValue>
               <delayMs>10</delayMs>
           </powerSetting>
       </powerUpSequence>
       
       //下电类型以及配置的值 上下电顺序相反
       <powerDownSequence> 
           <powerSetting>
               //配置上电类型,比如:VANA 、VIO、VAF、VDIG、RESET、MCLK 等待
               <configType>MCLK</configType>
               <configValue>19200000</configValue>
               <delayMs>0</delayMs>
           </powerSetting>
           ... ...
           <powerSetting>
               //配置上电类型,比如:VANA 、VIO、VAF、VDIG、RESET、MCLK 等
               <configType>VANA</configType>
               <configValue>1</configValue>
               <delayMs>0</delayMs>
           </powerSetting>
       </powerDownSequence>
   </slaveInfo>

   //Sensor 寄存器包含的各种信息以及Feature
   <regAddrinfo>
       <!--Register address to program width -->
       <xOutput>0x0b20</xOutput>
       <!--Register address to program height -->
       <yOutput>0x0b22</yOutput>
       
       //总共有多少行frameLength以及每行的 PixelClock
       <frameLengthLines>0x050c</frameLengthLines>
       <!--Register address to program Line length pixel clock -->
       <lineLengthPixelClock>0x03a0</lineLengthPixelClock>
   
       <!--Register address to program gain channel -->
       <globalGainAddr>0x050A</globalGainAddr>
       
       // ITS  test Pattern 相关
       <!--Register address to program manual test pattern value for Red channel -->
       <testPatternRAddr>0x0c0c</testPatternRAddr>
       <!--Register address to program manual test pattern value for Green Red channel -->
       <testPatternGRAddr>0x0c0e</testPatternGRAddr>
       <!--Register address to program manual test pattern value for Blue channel -->
       <testPatternBAddr>0x0c10</testPatternBAddr>
       <!--Register address to program manual test pattern value for Green Blue channel -->
       <testPatternGBAddr>0x0c12</testPatternGBAddr>
   </regAddrinfo>
   
   //sensor 所有resolution 的 setting 与 sensormode 相关 
   <resolutionInfo>
   //指定sensor 版本
   <sensorVersion>0</sensorVersion>
   // sensor mode 0 for full size  第一个必须 Full 全尺寸size
   <!-- Res 0 8160*6144 10fps -->
   <resolutionData> 
       // stream 流信息
       <streamInfo>
           <streamConfiguration>
           // VC:  数据传输的虚拟通道(0-31)
           //Virtual Channel of the data
           <vc range="[0,3]">0</vc>
           // DT:数据流类型,默认 Raw10
           //Data type of the stream. Default value is 0x2B (10-bit RAW) 
           <dt>0x2B</dt>
           
           //出图 50M Full Size   
           <frameDimension>
               <xStart>0</xStart>
               <yStart>0</yStart>
               <width>8160</width>
               <height>6144</height>
           </frameDimension>
           
           <!--Bit width of the data -->
           <bitWidth>10</bitWidth>
           <type>IMAGE</type>
        </streamConfiguration>
       </streamInfo>
       //每行有多少pixel clock  主要是用来计算帧率
       <!--Line length pixel clock of frame
         Typically this value is the active width + blanking width -->
       <lineLengthPixelClock>8688</lineLengthPixelClock>
       //总共有多少行frameLength 
       <!--Frame length lines of frame
         Typically this value is the active height + blanking height -->
       <frameLengthLines>6400</frameLengthLines>
       <!--Output pixel clock -->
       <outputPixelClock>556800000</outputPixelClock>
       // 帧率 fps  = outputPixelClock/(frameLengthLines*lineLengthPixelClock)
       // 10fps =556800000/(6400*8688)=10.013
       <!--Maximum frame rate -->
       <frameRate>10.07</frameRate>
       
       //数据流传输通道数
      <laneCount>4</laneCount>
       // FAE给的对应模式下的 多组寄存器setting 
       <regSettings>  
       //
           <regSetting>
               <registerAddr>0x0204</registerAddr>
               <registerData>0x4008</registerData>
               <regAddrType range="[1,4]">2</regAddrType>
               <regDataType range="[1,4]">2</regDataType>
               <operation>WRITE</operation>
               <delayUs>0x00</delayUs>
           </regSetting>
          ... ...
       </regSettings>
       
       // 每帧crop 参数
       <cropInfo>
           <left>0</left>
           <right>0</right>
           <top>0</top>
           <bottom>0</bottom>
       </cropInfo>
       
       // Feature 支持 比如QCFA ,软硬件Remosaic 等
       <capability>QUADCFA</capability>
       <RemosaicTypeInfo>SWRemosaic</RemosaicTypeInfo>
       <ADCReadoutTime>-6</ADCReadoutTime>
   </resolutionData>
       
   // sensor mode 1  binning size相机最常用的size 之一
   <!-- Res 1 4080*3072 30fps 4:3 -->
   <resolutionData>
       <streamInfo>
       <!--Information for a stream data -->
       <streamConfiguration>
           // VC:  数据传输的虚拟通道(0-31)
           //Virtual Channel of the data
           <vc range="[0,3]">0</vc>
           // DT:数据流类型,默认 Raw10
           //Data type of the stream. Default value is 0x2B (10-bit RAW) 
           <dt>0x2B</dt>
           
           // 12.5M 出图 binning size 
           <frameDimension>
               <xStart>0</xStart>
               <yStart>0</yStart>
               <width>4080</width>
               <height>3072</height>
           </frameDimension>
       </streamConfiguration>
       ... ...
       
       // Feature 支持 NORMAL
       <capability>NORMAL</capability>
       <ADCReadoutTime>0</ADCReadoutTime>
       </streamInfo>

   </resolutionData>
    ... ...
   </resolutionInfo>
   
   //曝光控制相关
   <exposureControlInfo>
       <!--Maximum analog again supported by sensor -->
       <maxAnalogGain>64</maxAnalogGain>
       <!--Maximum digital again supported by sensor -->
       <maxDigitalGain>1</maxDigitalGain>
       <!--Minimum offset to be maintained between line count and frame length lines -->
       <verticalOffset>16</verticalOffset>
       //最小 最大曝光行数
       <!--Minimum line count supported by sensor -->
       <minLineCount>9</minLineCount>
       //长曝光需要
       <maxLineCount>0xFFFFFF</maxLineCount>
       ... ...
   </exposureControlInfo>
   
   //sensor 启流 通过寄存器控制
   <streamOnSettings> 
       <regSetting>
         <!--Register address that is accessed -->
         <registerAddr>0x0b00</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>0x0100</registerData>
         <!--Register address / data size in bytes -->
         <regAddrType range="[1,4]">2</regAddrType>
         <!--Register address / data size in bytes -->
         <regDataType range="[1,4]">2</regDataType>
         <!--Type of the operation
             Valid values are: WRITE, READ, POLL -->
         <operation>WRITE</operation>
         <!--Delay in micro seconds. Delay is 0 if not explicitly provided -->
         <delayUs>0</delayUs>
       </regSetting>
   </streamOnSettings>
   //sensor 关流
   <streamOffSettings> 
       <regSetting>
           <!--Register address that is accessed -->
           <registerAddr>0x0b00</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>0x0000</registerData>
           <!--Register address / data size in bytes -->
           <regAddrType range="[1,4]">2</regAddrType>
           <!--Register address / data size in bytes -->
           <regDataType range="[1,4]">2</regDataType>
           <!--Type of the operation
               Valid values are: WRITE, READ, POLL -->
           <operation>WRITE</operation>
           <!--Delay in micro seconds. Delay is 0 if not explicitly provided -->
           <delayUs>0</delayUs>
       </regSetting> 
   </streamOffSettings>
   
   //帧同步相关的master setting
   //仅当 HWRemosaic 开启的时候才可以生效
   <masterSettings>
     <regSetting>
       <registerAddr>0x0326</registerAddr>
       <registerData>0x2240</registerData>
       <regAddrType range="[1,4]">2</regAddrType>
       <regDataType range="[1,4]">2</regDataType>
       <operation>WRITE</operation>
       <delayUs>0x00</delayUs>
     </regSetting>
    ... ...
   </masterSettings>
   
   //sensor 初始化的时候调用
   <initSettings>
       <initSetting>
       <regSetting>
           <registerAddr>0x0790</registerAddr>
           <registerData>0x0100</registerData>
           <regAddrType range="[1,4]">2</regAddrType>
           <regDataType range="[1,4]">2</regDataType>
           <operation>WRITE</operation>
           <delayUs>0x00</delayUs>
       </regSetting>
       ... ...
       <regSetting>
           <registerAddr>0x9C60</registerAddr>
           <registerData>0x79 0x68 0x00 0x01 0xDA 0x04 0x00 0x01 0xA6 0x40 0x00 0x00 0xDE 0x6C 0x00 0x01 0xDE 0x58 0x00 0x01 0xDE 0x44 0x00 0x01 0xA6 0x98 0x00 0x00 0xA6 0x84 0x00 0x00 0xA6 0x70 0x00 0x00</registerData>
           <regAddrType range="[1,4]">2</regAddrType>
           <regDataType range="[1,4]">1</regDataType>
           <operation>WRITE_SEQUENTIAL</operation>
           <delayUs>0x00</delayUs>
       </regSetting>
   </initSettings>
   // ITS  testPattern 纯色图片 测试相关 不支持 off ,常用 SOLID_COLOR  支持 纯黑,纯白,纯红,纯绿,纯蓝
  <testPatternInfo>
   <testPatternData>
     <!--Test pattern mode
         Supported modes are: OFF, SOLID_COLOR, COLOR_BARS, COLOR_BARS_FADE_TO_GRAY, PN9, CUSTOM1 -->
     <mode>OFF</mode>
     <settings>
       <regSetting>
         <registerAddr>0x0C0A</registerAddr>
         <registerData>0x0000</registerData>
         <regAddrType range="[1,4]">2</regAddrType>
         <regDataType range="[1,4]">2</regDataType>
         <operation>WRITE</operation>
         <delayUs>0</delayUs>
       </regSetting>
     </settings>
   </testPatternData>
 </testPatternInfo>

</sensorDriverData>
2.2 module.xml 文件详解

module.xml主要用来存储camera一些特殊信息,比如 lens镜头,mountangles挂载角度,actuator马达,OIS光学防抖,Flash 闪光灯等.

节点名作用
moduleGroupmodule Group 可以包含1个或者两个module 比如双摄、stereo camera
cameraId模组id
moduleNamemodule 厂商名
sensorName模组名
actuatorName马达名
oisNameOIS 名
eepromNameeeprom名
flashName闪光灯名
pdafNamepdaf名
position摄像头摆放位置 REAR、 FRONT 、REAR_AUX 、FRONT_AUX 、EXTERNAL
mountAngle挂载角度
CSIInfoCSI 信息
lensInfo镜头信息
<cameraModuleData>
// module Group 可以包含1个或者两个module 比如双摄、stereo camera 
<moduleGroup>
    <moduleConfiguration description="Module configuration">
      // Camera id 
      <cameraId>0</cameraId>
      // module 厂商名
      <moduleName>sunny</moduleName>
      //sensor 名
      <sensorName>s5***_rear</sensorName>
      
      //马达名 OIS eepromName 闪光灯 PDAF
      <actuatorName>gt9768</actuatorName>
      <oisName> </oisName>
      <eepromName> </eepromName>
      <flashName> </flashName>
      <pdafName> </pdafName>
      <!--Chromatix name is used to used to open binary.
          Binary name is of the form sensor_model_chromatix.bin -->
      <chromatixName>s5_rear</chromatixName>
      
      // 摄像头摆放位置 REAR、 FRONT 、REAR_AUX 、FRONT_AUX 、EXTERNAL
      <position>REAR</position>
      // 挂载角度
      <mountAngle>0</mountAngle>
     
      //CSI 信息
      <CSIInfo description="CSI Information">
          <laneAssign>0x3210</laneAssign>
          <isComboMode>0</isComboMode>
      </CSIInfo>
     
     //镜头信息
      <lensInfo description="Lens Information">
        <!--Focal length of the lens in millimeters. -->
        <focalLength>4.05</focalLength>
        <maxYawDegree>180</maxYawDegree>
      </lensInfo>
    </moduleConfiguration>
</moduleGroup>

</cameraModuleData>

如果chi-cdk/oem/qcom/module/module*.xml 中 actuatorName 、oisName、eepromName、flashName、pdafName 等还没有修改好,可以先空着,等后续修改好后在添加上,上述module引用的 路径在chi-cdk/oem/qcom 下 的actuator,ois,eeprom,flash,pdaf等自己定义的文件。

2.3 camera devicetree dtsi 设备树文件详解
  • camera devicetree

Camera客制化DTSI 参考文档目录vendor/qcom/proprietary/camera-devicetree
主要配置camera电源LDO, camera IIC通讯配置,根据硬件原理图配置出相应的电压给camera,包括AVDD,DVDD, 和IOVDD

2.4 dtsi camera drivers 文件详解

camera drivers 主要存放修改 三路(AVDD,DVDD,IOVDD)电相关的文件,路径如下:vendor/qcom/opensource/camera-kernel/drivers

ldo pin configure 配置图:

35eb84d17cd2c106918c08cbe1510676.jpeg
ldo pin configure 配置图

参考文档:

  1. 80-p9301-97_p_camera_sensor_driver_bring-up_guide.pdf
  2. 【腾讯文档】Camera学习知识库
    https://docs.qq.com/doc/DSWZ6dUlNemtUWndv

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

e0697e75dfea35e429f5c2d56f694328.jpeg

点个在看,为大佬点赞!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值