一次SKD生产异常

客户拿到我们板卡,直接装整机,装好整机后上电升级,有的板卡升级后无法开机。

一共寄回来19块板子,客户反馈的状态如下:

  • 有11片板子是如下两种状态:
  1. 上电 按键按一下 灯闪一下 但是不开机 –> 好多板卡都被升级了,此现象无法看到
  2. 按键灯一直是红灯 没反应 不开机 –> 确实有这个现象,有两种不同情况
  • 另外8片板子状态如下:
  1. 有4片是上螺钉时打坏器件 –> 硬件处理
  2. 有1片是指示灯插反 –> 硬件处理
  3. 有1片有时候能开机,有时候不能开机,老化两小时之后,都能开机了 –> 看到的现象是有时候能开机,有时候要自动开好几回才能开起来,后来flash被人换掉,换掉后都能正常开机,然后把旧的flash换回来,也能正常开机了,还不能明白准确原因,看之前的log信息,自动开好几回才能开起来像是DRAM没有跑起来,可是以前有现象的时候,没有量到DRAM电压和core power电压,就被换掉flash,现在也无法复测现象了,只能认为板子焊接有问题导致DRAM不能正常跑起来(如果外围没有问题,可以考虑更换IC尝试)
  4. 有1片3.3V对地短路 –> ???
  5. 有1片是上电不开机有1.8V –> 这里应该是core power,这片应该属于11片板那一类

无法开机的,硬件检查都没有异常,板卡都被人重新空片升级掉了,能用的板卡(我手上就两块),有两种情况:

  1. 上电后log信息提示“code is not complete”,此类可以重新上电升级。
  2. 上电后log信息只有“S2Tek_a35 08/15”,此类是boot坏掉了,需要进行空片升级。把flash拿下来,读一下,得到:

    0x00000000 ~ 0x0000FFF0: 全部0xFF
    0x00010000 ~ 0x00377490: 有数据
    0x003774A0 ~ 0x003EAFF0: 全部0xFF
    0x003EB000 ~ 0x003EB380: 有数据
    0x003EB390 ~ 0x003EBFF0: 全部0xFF
    0x003EC000 ~ 0x003EC270: 有数据
    0x003EC280 ~ 0x003ECFF0: 全部0xFF
    0x003ED000: 有数据
    0x003ED010 ~ 0x003EFFE0: 全部0xFF
    0x003EFFF0 ~ 0x003F0FF0: 有数据
    0x003F1000 ~ 0x003F1FF0: 全部0xFF
    0x003F2000 ~ 0x003FFFF0: 有数据

打开出货的ROM bin,发现:
0x3774a0
根据flash layout,0x003EB000此地址以上是Maincode分区,数据是连续的,以下则是模块分区,各模块之间并不是连续的。于是认为这是上电升级过程中,刚擦除boot的时候就断电了,所以后来上电也无法进行上电升级,更无法开机了,此种情况只能进行空片升级。(若升级前后boot版本相同,升级是不会擦除boot的,这种情况升级过程掉电,重新开机时也能做boot升级。若boot本身也要升级,原先boot code已被擦除而新的boot没能正常写入将会无法开机)

奇怪的地方在于,19片板卡中,给原厂送去3片分析,有一片是属于“code is not cpmplete”但是可以继续上电升级的情况,但是另外有一片,读出来的rom bin,0H3EC000H数据全部为FF,都被擦掉了,3EC000H3FFFFFH后面部分段落有数据。这个情况看起来属于MENU升级而不属于上电升级,因为MENU升级的升级方式是全部擦除之后再烧写,上电升级则是擦一点写一点,可是客户端的升级方式是上电升级!不过刚才那片被擦掉boot的板卡不能完全明确是上电升级的结果,也可以认为是MENU升级,因为可能是刚刚好擦到boot就掉电了。具体还得跟踪代码才能知道上电升级究竟是不是擦一点写一点,如果是,擦一点写一点是怎么个擦一点写一点法呢?

最后,开机异常的,基本都是flash里面code被擦掉,至于怎么被擦掉,基本认为是升级过程中掉电造成的(客户亦承认工厂会有停电情况,也不能保证工人操作是否规范),不过除此之外,在生产过程中,是否有其他操作环节会擦掉代码?在向客户工厂和我们工厂了解了生产流程后,感觉可能性不大,但是不能说完全没有可能,我没有完全跟踪所有流程,所以很难没有遗漏,抓到“元凶”有一定难度。至于不良板卡读到的flash数据为啥看起来像是菜单升级?先跟踪一下上电升级流程看看吧!