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),高通工程师
相关文章:

QUICK 调试camera-xml解析
本文主要介绍如何在QUICK QCS6490使能相机模组。QCS6490的相机基于CameraX的框架,只需通过配置XML文件,设置相机模组的相关参数,就可以点亮相机。本文主要介绍Camera Sensor Module XML和Camera Sensor XML配置的解析,这中间需要c…...
【linux】shell脚本编写基础
shell 脚本关键字: 1、变量定义:前后不能空格 输入: zhao"Joe" echo ${zhao} echo "I am ${zhao}" 输出: yuxin I am Joe2、echo 输出 输入: echo "123" 输出: 1233、readonly 定义变…...
STM32 外设简介
STM32 外设简介 STM32 是由意法半导体 (STMicroelectronics) 开发的一系列基于 ARM Cortex 内核的微控制器,广泛应用于嵌入式系统中。STM32 系列的一个重要特点是其丰富而强大的外设模块,支持多种接口和功能,能满足工业控制、物联网、消费电…...
Django-Vue3-Admin - 现代化的前后端分离权限管理系统
项目介绍 Django-Vue3-Admin是一个基于RBAC(Role-Based Access Control)模型的综合性基础开发平台,专注于权限控制,支持列级别的细粒度权限管理。该项目采用前后端分离架构,技术栈包括: 后端: Django Django REST …...

Cesium K-means自动聚合点的原理
Cesium K-means自动聚合点的原理 Cesium 是一个开源的 JavaScript 库,用于在 Web 环境中创建 3D 地球和地图应用。它能够处理地理空间数据,并允许开发者对大规模的地理数据进行可视化展示。在一些应用中,尤其是当处理大量地理坐标点时&#…...
Vue 项目中如何解决组件之间的循环依赖
前言 在大型 Vue 项目中,组件之间的关系可能会变得非常复杂,甚至会出现循环依赖的问题。循环依赖是指两个或多个模块互相依赖,形成一个闭环。这类问题会导致项目无法正常编译或运行,甚至可能引发意想不到的错误。本文将通过通俗易…...

交通流量预测:基于交通流量数据建立模型
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

Hot100 - 搜索二维矩阵II
Hot100 - 搜索二维矩阵II 最佳思路: 利用矩阵的特性,针对搜索操作可以从右上角或者左下角开始。通过判断当前位置的元素与目标值的关系,逐步缩小搜索范围,从而达到较高的效率。 从右上角开始:假设矩阵是升序排列的&a…...
uart_pl011.c驱动API的zephyr测试
API概述 本次测试针对uart的uart_poll_in和uart_poll_outAPI进行测试, uart_poll_in static int pl011_poll_in(const struct device *dev, unsigned char *c)这是一个轮询方式的接收函数: 功能:检查 UART 是否有新数据到达,如…...

RPA:电商订单处理自动化
哈喽,大家好,我是若木,最近闲暇时间较多,于是便跟着教程做了一个及RPA,谈到这个,可能很多人并不是很了解,但是实际上,这玩意却遍布文末生活的边边角角。话不多说,我直接上…...

小程序 - 个人简历
为了让招聘人员快速地认识自己,可以做一个“个人简历”微信小程序, 展示自己的个人信息。 下面将对“个人简历”微信小程序进行详细讲解。 目录 个人简历 创建图片目录 页面开发 index.wxml index.wxss 功能实现截图 总结 个人简历 创建图片目录…...

MySQL自启动失败(MySQL不能开机自启)解决方案_MySQL开机自启疑难杂症解决,适用Win11/Win10
问题描述(MySQL 开机自启失败) 本文解决方法,在 windows10 、 windows11 系统中均可使用。 win11 安装 MySQL 后,不能开机自启。 在服务中,手动启动服务后,可正常使用,一点异常都没有。 或者…...
储存水..
问题描述: 给定m个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子下雨之后能储存多少水. 思路解析: 思考一下,什么样的位置能盛水?只有在当前柱子的左边和右边都比它高的情况下才能储存住水,而储水量和左侧最高柱及右侧最高柱有关.具体来说就是和左右两侧最矮的…...
Cmake 常用操作总结
CMakeLists.txt结构 总结该文件的主要结构 cmake_minimum_required(VERSION <version>) 指定CMake的最低版本,一般都是根据项目需要设定 cmake_minimum_required(VERSION 3.10) project(<name>) 定义项目的名称,放在CMake的开头 project(…...

Kylin Server V10 下 RocketMQ 主备自动切换模式部署
一、NameServer简介 NameServer 是一个注册中心,提供服务注册和服务发现的功能。NameServer 可以集群部署,集群中每个节点都是对等的关系,节点之间互不通信。 服务注册 Broker 启动的时候会向所有的 NameServer 节点进行注册,注意这里是向集群中所有的 NameServer 节点注册…...

DevOps工程技术价值流:GitLab源码管理与提交流水线实践
在当今快速迭代的软件开发环境中,DevOps(开发运维一体化)已经成为提升软件交付效率和质量的关键。而GitLab,作为一个全面的开源DevOps平台,不仅提供了强大的版本控制功能,还集成了持续集成/持续交付(CI/CD)…...
Vue 3 中实现页面特定功能控制
在开发 Vue 应用时,我们经常会遇到需要在特定页面启用或禁用某些功能的情况。本文将以 A父.vue 页面为例,探讨如何在点击汇总菜单时仅在该页面生效,而在其他页面不生效的问题。 1. 利用 Vue 3 的 provide 和 inject 实现状态传递 Vue 3 提供…...

VLC 播放的音视频数据处理流水线搭建
VLC 用 input_thread_t 对象直接或间接管理音视频播放有关的各种资源,包括 Access,Demux,Decode,Output,Filter 等,这个类型定义 (位于 vlc-3.0.16/include/vlc_input.h) 如下: struct input_thread_t {VLC_COMMON_MEMBERS };input_thread_t 是个抽象类型,VLC 中这个类…...

何时在 SQL 中使用 CHAR、VARCHAR 和 VARCHAR(MAX)
在管理数据库表时,考虑 CHAR、VARCHAR 和 VARCHAR(MAX) 是必不可少的。此外,使用正确的工具(例如dbForge Studio for SQL Server) ,与数据库相关的任务都会变得更加容易。它是针对 SQL Server 专业人员的强大的一体化解…...

学习笔记043——HashMap源码学习1
文章目录 1、HashMap2、Hashtable3、TreeMap4、HashMap 底层结构4.1、什么是红黑树? 1、HashMap HashMap key 是不能重复的,value 可以重复 底层结构 key-value 进行存储,key-value 存入到 Set 中,再将 Set 装载到 HashMap pack…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...