调试,是一件有挑战的事情

简介: 如果你不是工程师,你应该享受不到加班调试的乐趣吧,我记得在大学的时候,我第一次调试I2C时序,当时用的芯片是24C02的存储芯片,用51单片机模拟I2C时序,怎么整也整不出来,时序这个东西,一通百通,一不通那就是几个通宵熬夜都有可能。先量电压,量电压了看波形,波形反反复复的看了之后,就是没有从设备的应答信号,再去看看硬件设计,该上拉电阻的地方有没有接上上拉电阻。关于上拉电阻和下拉电阻这个自行百度,可以理解为一个默认的能力把,就像弹簧默认是有一个力的,你需要一个>弹簧的默认力才能驾驭弹簧,上拉和下拉就是保持它的默认能力。作为一个电子工程师,调试通信时序应该是基本操作,就好

如果你不是工程师,你应该享受不到加班调试的乐趣吧,我记得在大学的时候,我第一次调试I2C时序,当时用的芯片是24C02的存储芯片,用51单片机模拟I2C时序,怎么整也整不出来,时序这个东西,一通百通,一不通那就是几个通宵熬夜都有可能。

先量电压,量电压了看波形,波形反反复复的看了之后,就是没有从设备的应答信号,再去看看硬件设计,该上拉电阻的地方有没有接上上拉电阻。

关于上拉电阻和下拉电阻这个自行百度,可以理解为一个默认的能力把,就像弹簧默认是有一个力的,你需要一个>弹簧的默认力才能驾驭弹簧,上拉和下拉就是保持它的默认能力。

作为一个电子工程师,调试通信时序应该是基本操作,就好比,如果你是一个厨师,那么你会做蛋炒饭应该也是默认的能力。

我在TCL的时候,我就跟欢哥用一个单片机调试TVP5150的时序,那叫一个头疼,我们整整调试了一周。

如果你是一个app端的开发码农,哪里有问题,就在哪里加日志,但是如果你是一个驱动工程师,如果你是一个单片机工程师,很多时候,你是没有办法加日志调试的,可以了就满声欢喜,不行就埋头苦干,即使是工作很多年的工程师,也只能给你一些建议,但是解决问题,还是需要你自己上阵杀敌。

如果你调试过很多低速的通信时序,经过多年的积累,慢慢有了经验,就觉得调试没什么意思了,那么你可以试试去调试下mipi时序看看。

好了,这里应该很多读者都是干这个的,你可能心里会想,调试mipi也是一把过,没有遇到什么非常棘手的问题,那么恭喜你,你此生路途平坦,没有遇到什么难事,可以说在工作上,没有遇到太难的事情,可能这也是一种缺憾,你享受不到加班孤独的快感,你也享受不到末班地铁的速度,你应该找点有挑战性的项目给自己的人生添砖加瓦。

……………………………………

这几天在调试一个mipi屏,刚开始一点头绪都没有,折腾了很久,一点图像也没有显示,我们量了电压,mipi供电的每一路电压,没有发现有什么不对的,而且,mipi通路,我们得出来的手机靓号出售结果也是正确的,因为我们买的是开发板来验证开发,用我们的mipi时序init code驱动开发板的LCD,虽然显示不正确,但是是有图像出来的,从这个现象可以知道,mipi是工作了,主控应该通过mipi把一些鬼东西传送到了开发板的mipi屏幕上。所以也可以验证mpi这个通路是正常的。

经过一个晚上的折腾和排不了忧愁也解不了困难,我们一致把问题定位在发送指令的组包格式上。

mipi的长包和短包前面的包头都是不一样的。

mipi有两种组包模式

一种是DCS,一种是Generic模式,分别如上图所示。

不同的组包方式,发送的格式都不同,比如DCS模式,长包的包头是0x39,但是是Generic模式的话,长包的包头是0x29。

给大家看看mipi的波形,以及对应的解析

这个波形我相信很多人都没有见过

……………………………………

注意

第一个波形是无效的,所以不要记录第一个波形。

解析出来的下面111000……后,每个字节,低位在前,高位在后

第一个字节一定是0x87,所以每个包的mipi波形都是一样的。

我们一直想让屏厂IC的FAE给我们说明清楚他们用的是哪种格式,或者我们需要适配哪种格式的时序给屏IC,屏才能正常工作起来。但是屏厂的FAE不是很配合,他一直纠结是平台这边没有发送正确的时序给屏,但是是哪里没有正确,或者说需要发送什么正确的格式过去,他也不能给出一个肯定的回复。

我们后面,想到的两个思路就是

1、用一个已经点亮这个屏的平台过来,跟这个屏对接,用示波器抓取波形,再修改我们发送的指令时序。

2、跟屏厂借一个主板,可以跟屏模组调试时序的,用那个主板可以给屏发送指令,然后我们再用示波器抓波形,按照这个波形发送指令给屏。

3、屏IC的FAE过来支持我们,如果直接有工程师过来支持,我们就可以当面沟通,有问题也可以很快的解决了。

我们后来冷静下来开会梳理了下

1、复位脚,这个是很多屏都需要的,我们刚开始也花费了很长时间在复位脚上,最后终于搞定了复位脚,可以正常开机复位了,所以这部分不是问题了。

2、使能脚,我们的屏没有这个,默认用硬件供电使能了,所以也排除了,但是rockchip的同学说有遇到其他屏使能脚上电时序不对亮不了的。

3、初始化参数,我们初始化参数是屏厂提供的,刚开始因为mipi模式不对,和屏厂不同,后面调整后和屏厂对应的,而且我们发现屏厂的IC是可以同时兼容两种模式的,我猜想他们也是想匹配所有的mipi模式。

4、11 29 指令,这个指令是用来开启屏幕的,就是所有初始化结束后,延迟几毫秒后就写入 1129 ,这个是mipi屏通用的指令,我们测量了波形,是正常的,但是屏幕还是没有任何东西。

5、mipi 时钟,这个因为我们用的是开发板,开发板驱动的也是mipi屏,这个应该没有问题,通过测量也没有问题。

6、屏对应的各路电压,这个前面pin to pin确认了好多次,也没有发现异常。

……………………………………

最后的最后,软件这边实在没有办法了,硬件在一次常规排查后发现屏有一路供电没有,硬件修改后,我拿到手上,说出了那句说了无数次的话,这是见证奇迹的时刻了,然后,看到android界面缓缓升起的时候,心中那个嗨啊~

所以,根本的问题是接线口的一个位置,焊接员没有焊接好导致电压没有传到屏上。

ps:感谢rockchip林工对我们的大力支持。

目录
相关文章
|
6月前
|
设计模式 算法 程序员
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
作为开发者,我们在日常开发过程中,往往会遇到反复修改bug的情况,而且不能一次性把代码写的完美无瑕,其实开发项目是一项复杂而富有挑战性的任务,即使经验丰富的程序员也难以在一次性编写完美无瑕地完成代码,我个人觉得一次性写好代码是不可能完成的事情。虽然在设计之初已经尽力思考全面,并在实际操作中力求精确,但程序员仍然需要花费大量时间和精力来调试和修复Bug。那么本文就来分享程序员需要反复修改Bug的原因,以及在开发中所面临的复杂性与挑战。
167 1
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
|
6月前
|
机器人 程序员 C++
Scratch3.0——助力新进程序员理解程序(难度案例一、节奏大师)
Scratch3.0——助力新进程序员理解程序(难度案例一、节奏大师)
93 0
|
6月前
|
存储 程序员 编译器
VS实用调试技巧(检验程序的法宝)
VS实用调试技巧(检验程序的法宝)
32 0
|
6月前
|
程序员 Python
揭秘单步调试:掌握这一技能让你代码无懈可击
揭秘单步调试:掌握这一技能让你代码无懈可击
52 0
|
程序员
编程终极技能-调试(下)
编程终极技能-调试
|
算法 程序员 编译器
当程序遇上困难:程序调试的艺术(VS)
当程序遇上困难:程序调试的艺术(VS)
68 0
|
程序员 编译器
编程终极技能-调试(上)
编程终极技能-调试
|
测试技术 API
怎么在日常中提高你的编程找bug的能力
编程是一门需要细致入微和耐心的艺术。在编写代码的过程中,我们经常会遇到各种各样的错误和bug。因此,掌握一定的找bug能力对于提高代码质量和开发效率至关重要。本文将分享一些在日常中提高编程找bug能力的实用技巧。
142 0
|
存储 程序员 编译器
【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?
【C/调试实用技巧】—作为程序员应如何面对并尝试解决Bug?
145 0
|
编译器 C++
还在因为写项目函数太多而烦恼?C++模板一文带你解决难题
还在因为写项目函数太多而烦恼?C++模板一文带你解决难题
下一篇
无影云桌面