
和你一起终身学习,这里是程序员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.mk1.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.xml1.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
| 节点名 | 作用 |
|---|---|
| sensorDriverData | XML 中sensor 相关的解释可以查看API 文件;Sensor 驱动数据 chi-cdk/api/sensor/camxsensordriver.xsd |
| slaveInfo | sensor 附属信息 |
| sensorName | sensor 名称 |
| sensorId | sensor id |
| i2cFrequencyMode | i2c 频率类型: STANDARD (100 KHz) , FAST(400 KHz) , FAST_PLUS(1 MHz), Custom(dtsi 中客制化) |
| powerUpSequence | 上电序列 |
| configType | 配置上电类型,比如:VANA 、VIO、VAF、VDIG、RESET、MCLK 等 |
| powerDownSequence | 下电序列 上下电顺序相反 |
| regAddrinfo | Sensor 寄存器包含的各种信息以及Feature |
| frameLengthLines | 总共有多少行frameLength |
| lineLengthPixelClock | 每行有多少个pixelclock |
| testPatternRAddr | ITS test Pattern 相关 |
| resolutionInfo | sensor 所有resolution 的 setting 与 sensormode 相关 |
| resolutionData | sensor mode 0 for full size 第一个必须 Full 全尺寸size |
| VC | Virtual Channel of the data 数据传输的虚拟通道(0-31) |
| DT | Data type of the stream 数据流类型,默认 Raw10 |
| frameDimension | 出图 尺寸size |
| outputPixelClock | 输出的picxel clock |
| frameRate | 帧率 fps = outputPixelClock/(frameLengthLines*lineLengthPixelClock) |
| laneCount | 数据流传输通道数 |
| regSettings | FAE给的对应模式下的 多组寄存器setting |
| cropInfo | 每帧crop 参数信息 |
| capability | Feature 支持 比如QCFA |
| RemosaicTypeInfo | Remosaic 类型支持 比如:SWRemosaic HWRemosaic |
| ADCReadoutTime | Analog-to-digital sensor 模数转换时间 |
| exposureControlInfo | 曝光控制相关 |
| minLineCount | 最小曝光行数 |
| maxLineCount | 最大曝光行数 |
| streamOnSettings | sensor 启流的setting |
| streamOffSettings | sensor 关流 |
| masterSettings | 帧同步相关的master setting 仅当 HWRemosaic 开启的时候才可以生效 |
| initSettings | sensor 初始化的时候调用 |
| testPatternInfo | ITS 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 闪光灯等.
| 节点名 | 作用 |
|---|---|
| moduleGroup | module Group 可以包含1个或者两个module 比如双摄、stereo camera |
| cameraId | 模组id |
| moduleName | module 厂商名 |
| sensorName | 模组名 |
| actuatorName | 马达名 |
| oisName | OIS 名 |
| eepromName | eeprom名 |
| flashName | 闪光灯名 |
| pdafName | pdaf名 |
| position | 摄像头摆放位置 REAR、 FRONT 、REAR_AUX 、FRONT_AUX 、EXTERNAL |
| mountAngle | 挂载角度 |
| CSIInfo | CSI 信息 |
| 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 配置图:

参考文档:
- 80-p9301-97_p_camera_sensor_driver_bring-up_guide.pdf
- 【腾讯文档】Camera学习知识库
https://docs.qq.com/doc/DSWZ6dUlNemtUWndv
至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点个在看,为大佬点赞!
2028

被折叠的 条评论
为什么被折叠?



