QUICK 调试camera-xml解析
本文主要介绍如何在QUICK QCS6490使能相机模组。QCS6490的相机基于CameraX的框架,只需通过配置XML文件,设置相机模组的相关参数,就可以点亮相机。本文主要介绍Camera Sensor Module XML和Camera Sensor XML配置的解析,这中间需要camera的datasheet,查看对应的一些规格和参数。
Camera Sensor Module XML解析:
如下是调试imx219的module XML
<cameraId>0</cameraId> // cameraId与slot id一致,或者说与dts中的cell-index一致
<moduleName>sunny</moduleName> //模组厂商名字
<sensorName>imx219</sensorName> //sensor名称
<eepromName></eepromName> //eeprom名称
<actuatorName></actuatorName> //马达名称
<flashName>pmic</flashName> //flash名称
<chromatixName>default_c7project</chromatixName> //bin文件名称
<position>REAR</position> //模组位置,如前摄后摄
<CSIInfo description="CSI Information"> //CSI 信息,如lane分配,combo模式等
<laneAssign>0x10</laneAssign>
<isComboMode>0</isComboMode>
</CSIInfo>
<lensInfo description="Lens Information"> //镜头的参数设置
<focalLength>4.28</focalLength> //焦距
<fNumber>1.79</fNumber> //光圈
<minFocusDistance>0.08</minFocusDistance> //最小焦距
<maxFocusDistance>2.0</maxFocusDistance> //最大焦距
<horizontalViewAngle>66.3</horizontalViewAngle> //水平视角
<verticalViewAngle>52.4</verticalViewAngle> //垂直视角
<maxRollDegree>360</maxRollDegree> //翻滚角
<maxPitchDegree>360</maxPitchDegree> //俯仰角
<maxYawDegree>360</maxYawDegree> //偏航角
参数名称 | 值 | 说明 |
cameraId | 0 | cameraId与slot id一致,或者说与dts中的cell-index一致 |
moduleName | sunny | 模组厂商名字 |
sensorName | imx219 | sensor名称 |
eepromName | eeprom名称 | |
actuatorName | 马达名称 | |
flashName | pmic | flash名称 |
chromatixName | default_c7project | bin文件名称 |
position | REAR | 模组位置,如前摄后摄 |
CSIInfo | CSI 信息,如lane分配,combo模式等 | |
- laneAssign | 0x10 | lane分配 |
- isComboMode | 0 | 是否为combo模式,0表示否 |
lensInfo | 镜头的参数设置 | |
- focalLength | 4.28 | 焦距 |
- fNumber | 1.79 | 光圈 |
- minFocusDistance | 0.08 | 最小焦距 |
- maxFocusDistance | 2.0 | 最大焦距 |
- horizontalViewAngle | 66.3 | 水平视角 |
- verticalViewAngle | 52.4 | 垂直视角 |
- maxRollDegree | 360 | 翻滚角 |
- maxPitchDegree | 360 | 俯仰角 |
- maxYawDegree | 360 | 偏航角 |
Camera Sensor XML解析:
以下是从设备配置,包含型号,I2C,sensorID,上下电时序
<slaveInfo>
<sensorName>imx219</sensorName> //sensor型号
<slaveAddress>0x20</slaveAddress> //i2c地址
<regAddrType range="[1,4]">2</regAddrType> //地址类型
1 = Byte address 2 = Word address 3 = 3 byte address 4 = Address type max
<regDataType range="[1,4]">2</regDataType>//地址数据
1 = Byte data 2 = Word data 3 = Double word data 4 = Data type max
<sensorIdRegAddr>0x0000</sensorIdRegAddr> // sensor id 寄存器地址
<sensorId>0x0219</sensorId> // sensor id
<sensorIdMask>0xFFFFFFFF</sensorIdMask> //sensor id的掩码,如:0xFFFFFFFF <i2cFrequencyMode>FAST</i2cFrequencyMode> //I2C的操作模式,FAST
<powerUpSequence> //上电时序
<powerSetting> //电源配置
<configType>RESET</configType> //电源配置属性,如RESET,MCLK,VANA,VDIG等
<configValue>0</configValue> //电源配置数值
<delayMs>1</delayMs> //延时
</powerSetting>
<powerSetting>
<configType>RESET</configType>
<configValue>1</configValue>
<delayMs>500</delayMs>
</powerSetting>
</powerUpSequence>
<powerDownSequence> //下电时序
<powerSetting>
<configType>RESET</configType>
<configValue>0</configValue>
<delayMs>1</delayMs>
</powerSetting>
</powerDownSequence>
</slaveInfo>
寄存器信息节点包含各种传感器特征的配置寄存器地址,如
<regAddrInfo>
<xOutput>0x016C</xOutput> //sensor x寄存器
<yOutput>0x016E</yOutput>//sensor y寄存器
<frameLengthLines>0x0160</frameLengthLines> //height + VBlank寄存器
<lineLengthPixelClock>0x0162</lineLengthPixelClock>// width + HBlank寄存器
<coarseIntgTimeAddr>0x015A</coarseIntgTimeAddr> //sensor 曝光寄存器
<shortCoarseIntgTimeAddr>0x015A</shortCoarseIntgTimeAddr>// sensor 短曝光寄存器
<globalGainAddr>0x0157</globalGainAddr> // gain寄存器
<shortGlobalGainAddr>0x0157</shortGlobalGainAddr>//短gain寄存器
<digitalGlobalGainAddr>0x0158</digitalGlobalGainAddr> //数字gain寄存器
<testPatternRAddr>0x0602</testPatternRAddr> // R通道测试寄存器
<testPatternGRAddr>0x0604</testPatternGRAddr>// G通道测试寄存器
<testPatternBAddr>0x0608</testPatternBAddr> // B通道测试寄存器
<testPatternGBAddr>0x0606</testPatternGBAddr> // Gb通道测试寄存器
</regAddrInfo>
参数名称 | 值 | 说明 |
sensorName | imx219 | sensor型号 |
slaveAddress | 0x20 | i2c地址 |
regAddrType | 2 | 地址类型 |
1 = Byte address | ||
2 = Word address | ||
3 = 3 byte address | ||
4 = Address type max | ||
regDataType | 2 | 地址数据 |
1 = Byte data | ||
2 = Word data | ||
3 = Double word data | ||
4 = Data type max | ||
sensorIdRegAddr | 0x0000 | sensor id 寄存器地址 |
sensorId | 0x0219 | sensor id |
sensorIdMask | 0xFFFFFFFF | sensor id的掩码 |
i2cFrequencyMode | FAST | I2C的操作模式 |
powerUpSequence | 上电时序 | |
- powerSetting | 电源配置 | |
- configType | RESET | 电源配置属性 |
- configValue | 0 | 电源配置数值 |
- delayMs | 1 | 延时 |
- powerSetting | ||
- configType | RESET | |
- configValue | 1 | |
- delayMs | 500 | |
powerDownSequence | 下电时序 | |
- powerSetting | 电源配置 | |
- configType | RESET | 电源配置属性 |
- configValue | 0 | 电源配置数值 |
- delayMs | 1 | 延时 |
从sensor的datasheet中可以找到以下对应的寄存器
以下为分辨率设置的一些参数,可以设置为多种配置,下面为HD 30fps配置
<resolutionData>
<colorFilterArrangement>BAYER_RGGB</colorFilterArrangement> //色彩滤波阵列
<streamInfo>
<streamConfiguration> //stream配置
<vc range="[0,3]">0</vc> //虚拟通道
<dt>0X2b</dt> //数据类型 默认为0x2B (10 bit RAW)
<frameDimension> //指定框架尺寸
<xStart>681</xStart> //x坐标
<yStart>693</yStart> //y 坐标
<width>1920</width> //宽
<height>1080</height> //高
</frameDimension>
<bitWidth>10</bitWidth> //位宽
<type>IMAGE</type> //数据类型
</streamConfiguration>
</streamInfo>
<lineLengthPixelClock>2599</lineLengthPixelClock> //指定帧的像素时钟width + HBlank
<frameLengthLines>1771</frameLengthLines> //帧长height + VBlank
<minHorizontalBlanking>0</minHorizontalBlanking> //像素的最小水平间隔
<minVerticalBlanking>0</minVerticalBlanking> //像素的最小垂直间隔
<outputPixelClock>182400000</outputPixelClock> //输出像素clock
<horizontalBinning>1</horizontalBinning> //水平合并值
<verticalBinning>1</verticalBinning> //垂直合并值
<frameRate>30.01</frameRate> //帧率
<laneCount>2</laneCount> //lane 数量
<downScaleFactor>1.0</downScaleFactor> //缩小系数,理论上设置为1或者更大
<settleTimeNs>14</settleTimeNs> //稳定时间,camera与板子传输时间,接收端能稳定接收数据
<is3Phase>0</is3Phase> //1为CPHY, 0为DPHY
参数名称 | 值 | 说明 |
colorFilterArrangement | BAYER_RGGB | 色彩滤波阵列 |
streamInfo | ||
- streamConfiguration | stream配置 | |
- vc | 0 | 虚拟通道 |
- dt | 0X2b | 数据类型,默认为0x2B (10 bit RAW) |
- frameDimension | 指定框架尺寸 | |
- xStart | 681 | x坐标 |
- yStart | 693 | y坐标 |
- width | 1920 | 宽 |
- height | 1080 | 高 |
- bitWidth | 10 | 位宽 |
- type | IMAGE | 数据类型 |
lineLengthPixelClock | 2599 | 指定帧的像素时钟 (width + HBlank) |
frameLengthLines | 1771 | 帧长 (height + VBlank) |
minHorizontalBlanking | 0 | 像素的最小水平间隔 |
minVerticalBlanking | 0 | 像素的最小垂直间隔 |
outputPixelClock | 182400000 | 输出像素时钟 |
horizontalBinning | 1 | 水平合并值 |
verticalBinning | 1 | 垂直合并值 |
frameRate | 30.01 | 帧率 |
laneCount | 2 | lane数量 |
downScaleFactor | 1.0 | 缩小系数,理论上设置为1或者更大 |
settleTimeNs | 14 | 稳定时间,camera与板子传输时间,接收端能稳定接收数据 |
is3Phase | 0 | 1为CPHY, 0为DPHY |
以下是按照上述分辨率的参数,如下寄存器配置:
如下是设置寄存器前,需要设置如下权限,才能访问其他寄存器
<resSettings>
<regSetting>
<registerAddr>0x30EB</registerAddr> //sensor寄存器地址
<registerData>0x05</registerData> //sensor寄存器值
<regAddrType range="[1,4]">2</regAddrType> //地址类型
<regDataType range="[1,4]">1</regDataType> //数据类型
<operation>WRITE</operation> //读写操作
<delayUs>0x00</delayUs> //延时
</regSetting>
<regSetting>
<registerAddr>0x30EB</registerAddr>
<registerData>0x0C</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
<regSetting>
<registerAddr>0x300A</registerAddr>
<registerData>0xFF</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
<regSetting>
<registerAddr>0x300B</registerAddr>
<registerData>0xFF</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
<regSetting>
<registerAddr>0x30EB</registerAddr>
<registerData>0x05</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
<regSetting>
<registerAddr>0x30EB</registerAddr>
<registerData>0x09</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
sensor寄存器值 | Register Data | 地址类型 | 数据类型 | 读写操作 | 延时(us) |
0x30EB | 0x05 | 2 | 1 | WRITE | 0x00 |
0x30EB | 0x0C | 2 | 1 | WRITE | 0x00 |
0x300A | 0xFF | 2 | 1 | WRITE | 0x00 |
0x300B | 0xFF | 2 | 1 | WRITE | 0x00 |
0x30EB | 0x05 | 2 | 1 | WRITE | 0x00 |
0x30EB | 0x09 | 2 | 1 | WRITE | 0x00 |
可以从datasheet上找到对应的信息,要操作0x3000-0x5FFF的寄存器,需要先设置如下寄存器
后续就开始设置对应寄存器参数,如:
<regSetting>
<registerAddr>0x0114</registerAddr> <!-- D-Phy, 2-lanes -->
<registerData>0x01</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
<regSetting>
<registerAddr>0x0128</registerAddr>
<registerData>0x00</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
<regSetting>
<registerAddr>0x012A</registerAddr> <!-- 24 MHz INCK -->
<registerData>0x18</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
<regSetting>
<registerAddr>0x012B</registerAddr>
<registerData>0x00</registerData>
<regAddrType range="[1,4]">2</regAddrType>
<regDataType range="[1,4]">1</regDataType>
<operation>WRITE</operation>
<delayUs>0x00</delayUs>
</regSetting>
Register Address | Register Data | Address Type | Data Type | Operation | Delay (us) |
0x0114 | 0x01 | 2 | 1 | WRITE | 0x00 |
0x0128 | 0x00 | 2 | 1 | WRITE | 0x00 |
0x012A | 0x18 | 2 | 1 | WRITE | 0x00 |
0x012B | 0x00 | 2 | 1 | WRITE | 0x00 |
以下为datasheet里面的寄存器列表:
以上就是camera xml参数的一个解析,如需要集成或者调试其他camera sensor,可以参照如上配置去参照datasheet调试camera。
作者:
戴忠忠(Zhongzhong Dai),高通工程师