驱动调试-摄像头部分

news/2024/12/5 12:04:45/

调试

1.硬件部分

  • 根据原理图确定camera的接口是MIPI还是DVP,确定在哪路IIC上

  • 如果是MIPI,确定MIPI的的data lane数,哪路CSI上

  • 用万用表确定Camera的供电是否正常,是否需要软件控制

    1. AVDD:camera模拟电压,给芯片的模拟器件供电---->2.8V,主要给摄像头的感光区和ADC部分供电,一般功耗比较高
    2. IOVDD:为camera的GPIO口模拟电压,给芯片引脚供电---->1.8V:给I2C或者DVP部分供电,也会给MIPI供电,一般功耗最低。
    3. DVDD:是camera的数字电压,给芯片中的数字信号供电,camera的工作电压---->1.2-1.5V:主要给摄像头内部的ISP供电,还会给BPC remosaic shading等模块供电,一般功耗最高,由于其对摄像头内部ISP影响,而ISP又是摄像头内部图像处理单元,如果供电不稳定,可能会导致花屏等情况
  • 查看Camera的Spec文档,检查PWDN和RESET的管脚触发是否正常,是否需要在程序中进行控制;

2.软件配置

  • 先确认I2C地址,确认配置成7位还是8位,配置哪路CSI,配置CSI的data lane数,电源配置,一般在设备树中配置
  • 根据芯片规格书配置上电时序,reset和pwdn的状态
  • 根据寄存器初始化列表初始化sensor

出现问题

1.I2C通信失败

  1. 使用I2C工具探测设备,确认是否可以探测到
  2. 确认I2C地址,是否配置正确,以及配置的I2C通路是否正确
  3. 结合原理图确认dts中,关于模组的电源,csi id,reset,pwdn,mclk是否配置正确,包括电压引脚等
  4. 确认驱动中,在上电过程中电源的上电时序,以及reset和pwdn是否拉到对应的电平状态
  5. 使用示波器或者万用表测量电压和上电时序,以及MCLK是否有输出,I2C信号是否有上拉,如果MCLK过小,检查设备树中以及硬件关于MCLK的配置
  6. 如果确认以上都是正常的,更换硬件

2.MIPI没有数据

  1. 检查soc的mipi clk输出是否正常
  2. 确认sensor的mipi引脚是否有数据输出,如果有,则正常,如果没有则确认是否是存在虚焊,寄存器的配置是否有问题,确认sensor用的是soc的mipi clk还是外部器件的时钟源,确认sensor在复位之后写寄存器的延时时间是否符合要求
  3. 示波器测量MIPI的信号,看波形是否符合要求
  4. 由于soc的mipi接收器要检测到各个lane有LP11-LP10-LP00的状态切换后才会切换到高速模式准备接受图像数据,如果图像数据输出在soc的mipi控制器初始化之前,那么soc mipi会一直等待mipi信号切换,如果sensor支持非连续时钟模式,最好设置成非连续时钟模式,避免soc mipi错过第一次LP11-LP10-LP00的状态切换,导致不能切换成高速模式

参考:https://blog.csdn.net/weixin_41944449/article/details/112393312


http://www.ppmy.cn/news/145092.html

相关文章

vue 3 第二十六章:样式(scoped、深度选择器、全局选择器、css modules、自定义注入名称、css中v-bind)

文章目录 1. 介绍2. 基本使用3. scoped原理4. 深度选择器5. 插槽选择器6. 全局选择器7. 混合使用局部与全局样式8. CSS Modules9. 自定义注入名称10. CSS 中的 v-bind() 1. 介绍 在 Vue 中&#xff0c;我们可以使用 scoped 特性来给组件的样式添加作用域。通过为组件的 <st…

第六十一天学习记录:C语言进阶:C语言预处理1

程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第一种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境&#xff0c;它用于实际执行代码。 详解编译链接 翻译环境 ![在这里插入图片描述](https:/…

Flink SQL之Regular Joins

1.Regular Joins&#xff08;双流join&#xff09; 双流join是最通用的联接类型&#xff08;支持 Batch\Streaming&#xff09;&#xff0c;其中任何新记录或联接两侧的更改都是可见的&#xff0c;并影响整体的Join结果。 特点&#xff1a; 对于流式查询&#xff0c;双流join…

【线程、线程池】

notify() 一个线程调用共享对象的notify)方法后&#xff0c;会唤醒一个在该共享变量上调用wait系列方法后被挂起的线程。一个共享变量上可能会有多个线程在等待&#xff0c;具体唤醒哪个等待的线程是随机的。 此外&#xff0c;被唤醒的线程不能马上从 wait方法返回并继续执行&…

计算机专业基础知识(中)

大纲分专题讲解4. 操作系统的基本概念、功能、组成及分类概念理解主要功能组成和分类主流的操作系统推荐书籍和课程 5. Windows 操作系统的基本概念和常用术语&#xff0c;文件、文件夹、库等Windows 常用术语Windows 电脑品牌 6. 多媒体技术的概念与应用关键技术应用举例 7. 计…

超全,Selenium4自动化测试并行测试详解,进阶之路看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Selenium4 自动化测…

JAVA基础 - CLASSLOADER双亲委派机制?

类的生命周期 在JAVA中数据类型分为基本数据类型和引用数据类型。基本数据类型&#xff0c;由虚拟机预先定义&#xff0c;引用数据类型则需要进行类加载。 JAVA将引用数据类型分为&#xff1a;类、接口、数组和泛型参数&#xff0c;而「泛型参数」在编译时期会被擦除&#xff…

C++STL算法及容器学习

&#xff11;&#xff09;map容器的&#xff14;种初始化方式及常用操作: 插入,查找,删除; map<int,string> a; a.insert(map<int,string>::value_type(1,“one”)); //value_type a.insert(make_pair<int,string>(2,“two”)); //make_pair; a.insert(pair&…