问题分析与心态

上周拿到一块新板子,调试485通信,程序反复检查都没发现问题,示波器抓波形抓得手软,从单片机引脚一路追到转换芯片——信号都正常,可就是收不到数据。直到发现A、B差分线只有一根有信号时,才意识到应该是硬件问题

最终,问题是一个电感内部损坏或虚焊。

1. 问题排查记录

  • 因为通信故障,优先确认接线问题,AB线是否接反?USB转485是否正常?——尝试换了一个USB转485并用正常的板子测试、通信正常工具没有问题
  • 核对串口助手配置——波特率、校验位等没有问题
  • 检查代码通信流程,增加日志——没有有明显问题
  • 尝试构建最简单的测试环境,只发数据——收不到结果。反复检查,查看芯片手册,检查引脚配置、时钟源、使能位——几乎都检查了一边,有点红温了
  • 上示波器,检查MCU UART输出——没有问题,有输出
  • 检查485芯片输入——没有问题,有输入
  • 检查485芯片使能脚状态——没有问题,高电平
  • 检查485芯片输出——没有问题,AB线都有信号
  • 从485转换芯片到板子输出端口器件较多,故直接检查板子输出端口信号——检查端口A,没有问题,有信号输出
  • 检查485通信电压是否符合标准——看起来符合,因为是差分信号要和端口B确认下,有点崩溃
  • 直接检查板子端口B输出——B没有信号?!
  • B端逐级向上检查——发现电感后端无信号,经过电感前信号正常
  • 用万用表测量电感和相邻电阻通断——有问题,一端断开
  • 结论:电感内部损坏或虚焊

2. 总结

其实这里就是一个小问题,也不是什么技术难题。但是像镜子,照出了自己在问题分析中的一些焦虑和焦躁、自我怀疑。

在定位软件部分还是相对冷静,知道自己能力的边界,问题再可控范围内。在定位硬件过程中,测量波形、操作不熟练、找工具,增加了时间的压力。当测量的所有点位都有信号,为什么还是没有数据?思维开始涣散?是否是那一步漏掉了?逐渐红温和自我怀疑。每一执行一步,都有很多可以怀疑的点,是否是硬件出现了干扰?是否是中断电阻有问题?甚至怀疑工具,但是这些我都没有测试方法,所以只能验证能验证的,这种无力感无止境地消耗意志。幸运还是找到了突破口,找到突破点的时候,开始焦虑开始缓解。找到问题后痛骂硬件!🙃

相比之前的话,如果发现了一个问题需要部门间协作,有上位机、有中间层、驱动、FPGA、硬件等等,我作为驱动也无法掌控全局,只能求爷爷告奶奶,沟通成本较高。上位机不懂硬件、硬件不懂业务,所有的事情还是自己来推进。不过多是驱动先推断大概方向,然后向上或向下继续找同事配合定位,虽然之前比较心累,而且有的时候大家也都互相甩锅,但是感觉压力并不是特别大,分散到了每个人身上,即使推进不了也可以找领导求助和协调。

反而是现在,虽然目前项目硬件相对简单,一个人需要掌控全局,责任都在自己。而且一个人更容易焦虑,一旦陷入死胡同就出不来。

工作几年渐渐发现,真正的“技术难题”很少,更多的是精度精度、效率瓶颈、内存泄漏、无法复现等这类工程顽疾、甚至是一些信号干扰、泄露导致的问题,而这些问题表象往往都在软件层面。为什么这批料测试都失败了,但是复测通过了?简直是灵魂拷问。其他的大多只是一些细节上的问题,总能解决的。在问题定位的过程中更重要的是心态,保持冷静才是最难的。有些细小的点没有排查仔细,一旦漏过去排查的精力就会翻倍。也无数次遇到现场接线问题、导致异常。

通常能够稳定复现的都是最简单的问题,至少你知道敌人在哪里,反而是那种难以复现的问题,才是最折磨的。现场接线不良、极端条件未考虑、不敢下电怕丢失现场…

最好的办法用流程替代对意志力的依赖。当我有了预设的步骤、重新定义的“进展”,焦虑也就能大大缓解。

  • 设计实验步骤,证明结果,控制变量,每次只改一个点,记录每次的状态。
  • 需要重新定义什么是“进展”,进展不是找到问题的根因,而是缩小问题空间。
  • 保持冷静,肯定不是什么大问题,只是某个细节疏忽了。

这次总结,只是为了提醒自己应该时刻保持冷静,危险的不是问题,而是焦虑导致的大脑短路。不要最后像无头苍蝇一样四处乱撞,靠本能行动,进而心态崩塌。

results matching ""

    No results matching ""