事件的起因是用stm32l0系列单片机做了一批简单的传感器,原理也很简单,就是感知环境变化到一定阈值后变换高地电平。
程序为两个版本,一个用于测试(用于输出当前环境变量),一个正式使用的时候。
成品除了感知部分外全部用环氧树脂灌封,因为最终程序已经烧录好,所以只留了电源线和一条用于电平变化的信号线,这三根线长度50cm左右(这是重点)。其实还有SCLK和SWDIO这两根,已从引出位置根部减除。
后来客户使用过程中想要感知速度再快一点,我们就通过升级代码解决,客户把剩余产品寄回来,我们通过焊接方式把成品程序下载线引出来15cm左右。电源线用原来成品上的。
首先通过STM32 ST-LINK Utility配合st-link下载,发现能检测到单片机,而且还能读取单片机内部flash,点下载就出错。而且上电的时候检测单片机能正常运行,就是不能下载程序。
再用MDK5打开程序,在调试配制里面也能检测到单片机,配制也正确,无论下载或调试都出错,显示找不到flash。
到这尝试了各种方式,网上找原因可能是单片机电平变化导致芯片写保护了,那就想办法解除保护吧,还是不行。同事也帮忙找了不用方式,换了几台电脑还是不行。st-link都换了好几个。
后来想着是不是成品灌粉因为拉扯焊盘有虚短,所以检测到,写就不行。
最后是在没办法破除灌封胶,把下载线怼到板子上,此时用的板子另外一个GND点,一下就下载好了,因为布局原因,这两个GND之间用的线连接,以为是这边这个GND接口和另外一边铜皮断裂。用万用表测试连接良好,那不应该呀。
这下重点来了,我把引出线GND用短一点的线连接出来,连接电脑程序下载成功。到这还没完,我就把剩下产品GND线都从接口处剥开连接,最后都成功了。
总结:程序无法烧写单片机没有锁定情况下,有可能是电源GND线太长,导致干扰从而数据传送过程中干扰失效。
第一次在CSDN发布,记录开始入行电子圈踩过的坑。不足之处感谢各位道友指点