大学毕业被分配到某研究所工作,入职后先后跟着罗、高以及张师傅学习电子硬件设计以及汇编、C语言等编程。在各位老师的精心指导下,通过实践和培训,终于开始成长为一名电子技术工程师。
进所第二年,盛夏,开始参与一项系统的研发工作,项目当时很急,系统的技术负责人是张主任,其他的成员包括小柴、小倪等,都比较年轻。系统采用多DSP分布式控制,通过总线插卡扩展。我主要负责底层的数据采集、处理并存储到双口RAM中。
项目一开始进展良好,硬件设计调试和软件编写调试都按照预期进行。在进入系统联调后,项目被卡住了。我设计的板卡存储到双口RAM后,上位机读取错误,上位机通过双口RAM发给我的数据读取出来也不正确。这个问题整整折磨了我们好几天,期间做了大量的测试和仿真,始终找不出任何头绪。随着时间推移,项目组的气氛开始越来越紧张。问题是各自检查自己的设计和仿真数据都是正确的,一旦联调就不正确。开分析会时除了张主任依然是乐呵呵的调节气氛外,其他人都很焦虑。由于我的资历最浅,无形之中承担更大压力。
洛阳的夏天,白天很热,晚上没有空调的宿舍也是闷热难耐。夜里快12点了和老婆在宿舍楼下小花园乘凉。聊到项目被卡,数据总是出错时,老婆不经意说了一句“会不会是数据放错地方了”,突然灵光一现,马上骑上自行车直奔实验室,几分钟后就找到问题并得到验证,其实这只是因为系统设计中一个小疏忽导致的,很难说是谁的问题。问题找到了一切迎刃而解,第二天系统联调顺利过关,项目按照计划准时移交给需求方。
二十多年了,这件事始终萦绕在我脑海,让我获益良多:
1)项目越紧,项目负责人越要有定力,每当我负责的项目卡壳项目组人心浮动时,我就想起张主任的微笑,心情也马上会平静下来;
2)团队协助工作,涉及到系统级别的设计和联调时,表面上很奇怪的问题可能只是一点点的疏忽导致,既不能轻易怀疑别人的问题,也不能不信任自己的分析。遇到问题还是需要一点点抽丝剥茧,共同应对。现在不管遇到多么诡异的问题,我都会告诫团队成员,不要轻易说“绝不可能”等类似的话;
3)有时遇到技术上特别难理解和解决的问题,和所谓的外行聊聊天,没准会有意想不到的收获;其实在和外行解释的过程远比和内行解释困难,一件事情你能和外行解释清楚,必然要求你自己深入理解,在解释的过程中有些问题的答案自然就跑出来了。这些年来我经常采用打比方举例子等方式和非专业人士交流,效果往往很好。
4)勤奋真的很重要,特别是年轻人,不轻言放弃,遇事有钻研精神是技术上能有所成就的基本要求。只有亲身经历过一些磨难,才能终身受用。
2001年3月,因机缘巧合,我入职了A公司,主要从事指纹识别算法研究和相关产品开发销售。在美国911事件之前,指纹识别产品属于比较高冷的行业,属于很小众的高科技行业,单台产品售价和毛利率很高,但是销量很小。
我刚入职时是硬件工程师,参与指纹考勤门禁系统的研发工作,门禁系统研发完成后开始负责指纹门锁的软硬件研发工作。经过一段时间的研发后,基于指纹技术的门禁考勤机开始小规模生产销售。而且有两台销往东北地区,好像是沈阳的一家国企采购的。刚开始一切都很完美,毕竟有了客户而且每台有好几千元的利润。
没多久客户就打电话来投诉说考勤机坏了,因为涉及很多人的考勤问题,客户要求立即派人带上备用机器尽快赶过去更换。公司领导立即派了两个现场技术支持工程师乘飞机赶往东北,同时我们研发团队也紧急研讨故障的原因,但一时之间也没有头绪。
经过紧急处理更换后,两个人带着故障机赶回公司。拆开外壳后,大家发现原来是因为模具设计存在缺陷,电路板线缆的固定方式不太合理。加上装配工的疏忽,其中一根导线没有固定好,在扣上外壳时被压在卡槽里。由于卡槽扣合的力度很大,这根导线外皮已经破损,部分铜芯已经断裂,但没有完全断掉。因此出厂检验时一切正常。经过长途运输颠簸,加上考勤机是用在室外,东北地区的夜晚很冷,塑料外壳的收缩率远高于导线。就这样,一段时间后,这根导线就彻底断了,整个考勤机就坏掉了。
查明原因后,令人挠头的是没人知道刚刚更换的那台机器是否也存在同样的问题,不得已,公司领导又派人带着改进后的产品再赴东北进行更换。事后领导说这次两台机器的利润还不够人员两次往返的费用。
从此以后,但凡有电路板上接插件和导线需要和外壳配合时,我都会要求结构工程师一定要认真考虑线缆的走向和线束的固定问题,而且对于生产线的装配工艺反复核查,装配人员进行专业培训。
这些年来,看过很多故障电子产品,发现因结构装配不合理导致线缆松动、断裂等问题依然比较常见,电子产品的不良率中源于接插件和导线的部分占比很高。用过翻盖手机的很多人应该都有过换线的经历,家中的很多电器故障往往都是接插件松动接触不良。这类看似不起眼的小事从小处说可能是产品故障,客户投诉,从大处说可能导致机毁人亡。
作为电子工程师,这件事给我上了非常重要的一课,让我从此重视结构和线缆等小细节对产品的影响。
2005年,我在B公司担任hardware leader,负责宽带通信局端及终端设备硬件研发工作。B公司是日本C公司的全资子公司,也是它在国内设立的唯一的研发中心,日本C公司当时是全球最大的宽带通信设备供应商。
我们采用博通的方案成功开发出工业级ADSL局端和终端设备,该设备基于日本标准并主要应用于日本市场,当时已完成VCCI ClassA测试认证,正准备在日本工厂批量试生产。不过按照日本总部的要求,我们的任何设计或技术图纸改进完成后,都需要发送到总部进行资料初审,审核通过后再通过电话会议进行技术评审。VDSL项目设计图纸发到总部后很快收到一些改进要求和建议。记忆最深的一项是,总部工程师觉得得我们的保险丝熔断电流选择过大,要求更改保险丝规格,比如系统最大允许的工作电流是10A,我们的保险丝选择11A,而日方工程师建议选择9A。我们都知道保险丝的电流不能低于最大工作电流,因此我们团队成员包括我在内都觉得很不理解,甚至觉得提建议的工程师水平太低。
因为ADSL产品在日本工厂的试生产过程中发现有些问题,公司安排我立即赶赴工厂分析原因,经过现场分析测试后问题当天得到解决,而我也有机会见到那个提出保险丝建议的工程师。
提建议的是一位老工程师,据说在住友电工已经工作了几十年。当我说明来意后他带我到旁边的会议坐下后,又抱了好大一摞资料过来。他的英文水平在日本工程师中还算不错,不过日式发音确实比较难懂,而且有点磕磕巴巴,而我对日语的了解不超过从《地道战》等电影里鬼子军官说的几句话。好在大家都是工程师,技术资料有些是英文的,日文版本的很多汉字也能明白,再加上图表等,交流不存在障碍。
他很有耐心,不停的给我讲解各种资料,包括了保险丝供应商提供的规格书,不同系列的保险丝的工艺、特性、温度曲线等,可以看到很多资料关键点上都有标注。几乎整整一下午,从他那里我学习到大量的关于保险丝的知识及选取原则,技术沟通变成虚心讨教,对他的不屑变成了由衷的敬佩和尊重。
他是这么解释的:选取保险丝的目的是在系统工作状态异常时及时断开电源;保险丝因材料工艺不同种类各异,特性差异很大,我们选择的那款保险丝属于慢速响应性的热熔断丝,而热熔断的本质是流过保险丝的电流在期望的时间内热量的累积超过保险丝的熔断要求,这是一个关于电流的积分过程,而且重要的是熔断效应是非线性的,需要先根据期望熔断时间和规格书查找曲线图上合适的点后反推到合适电流;他经过仔细分析计算,我们这个项目最大电流持续时间极短,按照那个持续时间和最大电流的积分效应根本不足以熔断我们选择的保险丝,换句话说我们选择的保险丝根本达不到保险的目的;他是经过分析、查表最终计算出比较合适的规格并据此提出建议;
虽然这位老工程师的面容早已忘记,姓名也压根记不起,却唯独依旧记得那厚厚的资料,他详细的分析,严谨的推导计算,以及我当时的震撼和羞愧。从此之后,我努力去理解接触到的每一种元器件的基本原理,对别人设计中不理解的部分不敢妄加评议。
这些年,我接触过很多硬件工程师,也面试过许多硬件工程师,很遗憾很少有硬件工程师深入理解各种器件的原理和特性,每每看到那种无知而不屑的笑容,我仿佛就看到自己当年的影子。
2005年四月,我们研发的工业级ADSL局端和终端设备完成功能样机贴片和硬件测试,开始和软件团队进行系统联调。顺利开机、初始化完成、网络连接正常,一起顺利,大家纷纷开始憧憬起美妙的黄金周长假了。
不幸的消息很快从软件部反馈过来,经过初步测试,发现ASDL终端设备上行数据速率正常,但是下行数据速率远低于设计要求,和芯片规格书给出的指标相差甚远。按照常规流程,硬件团队马上进行电路测试,信号分析,供电检查等;软件团队进行驱动检查,特别是寄存器配置和数据分析等。大家乐观的认为,解决这种问题应该不算难事。
接下来几天,大家做了大量的工作。首先就是对问题进行定位,看看是因为硬件不良还是软件驱动存在问题。硬件方面首先对电路板进行完整的静态和动态测试,验证信号时序、逻辑、电平等,未发现明显异常。接着扩大硬件测试样品数量,确认同一批次的板子测试结果和不良现象高度一致,基本排除了因物料差异和贴装工艺导致的个体差异;软件工程师将各种可能导致Bug的问题进行模拟验证,对不同版本的驱动进行对比,对相关寄存器进行逐一排查,也未发现任何有价值的线索。一番折腾下来,没有什么进展,而五一长假开始了,没有什么好说的,取消一切出行计划,开始加班加点解决问题。
各种常规的方法无法突破后,我们开始进行各种交叉测试:将阿尔卡特和中兴等几家采用相同硬件方案的Flash芯片取下来,和我们板子上Flash芯片互换进行交叉试验,尽管采用的标准不一样,但除了启动时各家Logo不同外,其它功能基本没问题。别的公司的板子更换Flash前后均正常,而我们的板子更换前后下行速率始终不能达到指标要求。这基本确定了问题是出在硬件的设计上。
明确了问题范围,我们开始对硬件进行新一轮测试排查,测试的重点从时域转换到频域,果然通过频谱分析仪测试分析,发现在600KHz附近有严重的干扰,而这一频带正是是下行通道的主力通带范围,0到4KHz是音频通带,是低通滤波后接电话机用于语音通信的,25KHz到200KHz是数据上行频带,200KHz到1.1MHz是数据下行通带。
找到干扰频点后就继续追查干扰源,发现在距离通信驱动接口芯片比较远的的一颗DC-DC芯片的功率电感处存在2倍频600KHZ的较强干扰,继续分析发现该电源芯片的振荡频率为300KHz,而原来参考设计上的是同一家公司的非常接近的料号的一颗料,但原来的芯片振荡频率是600KHz,2倍频后是1.2MHz,已经超出了ADSL的1.1MHz的频带范围,但这颗料即将停产,所以后来电源供应商的FAE和我们的工程师沟通时极力推荐这颗新料,由于新老物料参数一致而且价格更低,工程师就选择了新料,由于料号几乎相同,工程师在送样测试时觉得输出电压、纹波系数和负载能力等指标都和老料一致,因而就选择了新料。
因为该芯片距离通信接口芯片较远,干扰源不是通过线间串扰过来而是通过空间耦合过来的,在时域范围内极难发现分析。问题定位后,通过在功率电感上增加屏蔽罩彻底解决了这个问题。但是七天长假已经过去了六天,而我也落下了腰肌劳损的毛病,直到几年后采用朋友的偏方才慢慢痊愈。
细细反思,至少有几方面的教训:细节真的很重要,任何物料的跟更换都要慎之又慎,每个参数都要搞清楚;基础知识真的很重要,如通信类的频带划分,调制方式,时域和频域的测试分析能力等;思路开阔、灵活应变,需要多维度思考问题。
在成长实录之教训系列之三中我有提到,2005年五一期间我们解决了ADSL局端及终端设备的频带干扰问题,初步测试下来功能正常,性能满足要求,终于可以交付到测试部门进行完整的测试。不出意料的,新问题来了。
测试工程师测试下来发现一个问题,设备正常工作一段时间后会莫名奇妙的自动重启,从开机到重启的时间每次不固定,而且手上的5台样机都存在同一问题。
接到测试报告后,软硬件团队开始联手进行系统调试。有系统开发经验的都知道,这个问题对工程师调试来说喜忧参半,喜的是这是一个必现的bug,相对来说问题比较容易复现和定位,问题是否得到解决比较好验证;忧的是这个问题出现的时间长短是随机的,功能都已实现,性能也达到要求,这种情况下的问题往往不简单,需要调试的工作量很大。
这个问题对于硬件部分比较常见的问题一般有电源设计不良、复位电路、晶振电路、过热保护、元器件不良、生产制程不良等;软件部分可能存在的问题有系统配置不正确、异常流程处理不当、内部看门狗不正确触发等。
硬件团队首先排查了可能存在制程问题,通过目视检查和X-ray照射,未发现明显异常;
全面监测复位、供电和晶振等,均未发现自动重启时存在异常状态,通过对电路板全面的热监测也未发现存在过热区域;软件团队也对可能存在的问题逐一排除,未发现任何异常。调试陷入僵局,项目一时无法进展。
没办法,软硬件团队再次回到对故障现象的分析梳理,重新拟定测试方案,寻找重启时的共同点。经常大量的测试,终于发现当系统传输大容量数据时出现重启概率要大很多,而那种很轻负载状态的设备重启几率较小,时间间距也会拉开更大。找到规律不代表就能找到确切问题点,甚至更加让人迷茫。
当所有的分析测试都没有结果时,我们重新回到对生产制程的分析,由于主控芯片和MAC芯片都是BGA封装,电路板本身是10层板,大部分走线都是走在内层,对我们的排查来说困难重重。经过不懈努力,发现主控芯片到MAC的16根地址线因走线和贴装工艺存在瑕疵而有虚短路现象,其中一根和地之间的阻抗由正常的10兆欧左右降为1兆欧左右,由于检查BGA贴装质量的X-ray主要检查是否存在短路或断路问题,对于虚短是很难检查出来的。由于该地址线并未短路,在初始化或低速率传输数据时问题不大,但当大容量数据高速传输时,地址线之间的差异就会显现出来,导致程序运行异常而触发内部看门狗,从现象上看就是系统自动重启。
经验教训:不是能够正常工作了硬件就万事大吉,还要关注压力测试和长时间测试;阻抗匹配很重要,对于很多问题,数据线和地址线等对地阻抗测试会告诉我们很多信息;嵌入式系统的调试一定要有系统概念,软硬件及测试团队的通力协作是快速发现问题、定位问题和解决问题的前提和保证,很多现象是多种因素引起的,只有经多细致分析,大胆推测、反复验证才能解决问题。
关注微信公众号『玩转嵌入式』,后台回复“128”获取干货资料汇总,回复“256”加入技术交流群。
本文分享自微信公众号 - 玩转嵌入式(micropoint8)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4676368/blog/4648521