如何解决单片机下载程序失败的问题(文末有彩蛋)
作为一个单片机开发人员,每天跟我们打交道的工具无非两种,一种是PC机上的开发环境,比如Keil MDK、IAR Embedded Workbench等等;而另外一种呢,无非就是集程序下载、调试功能于一体的编程器、这个叫法比较混乱、也可以叫编程器、下载器、仿真器(但我认为不叫烧录器,烧录器一般值批量烧录阶段所用的那种可以快速完成芯片批量烧录的玩意)。后文统称编程器。
常见的编程器有以下几种:
1、自然是老牌Jlink了;
其实拆开市面上常见的jlink,可以看到各种各样的板子:
这都是从某宝上买的,标注着正版、永不掉固件的jlink,这样的东西在我手里坏了2个,一开始我还有耐心去找个XP系统刷一下固件,但是刷了没几天就又坏了,而且身边的XP是越来越少了,想着再买一个也才几十块,完全没必要浪费这个时间去刷了。当然很多人喜欢动手挑战一下,但是当你的项目忙的不可开交,而这个时候你的编程器固件掉了,你还要跑去找个XP给他刷固件,想想都不爽。
有朋友告诉我,自己经常要去其他城市出差,调试自己的板子,SEGGER的原版太贵,只好从某宝买几十块的用,而且买一个又担心坏了耽误事,所以每次出差至少都带两个,然而这个硕大的体积是在让人不爽,出差的时候要在极其宝贵的行李空间里放两个jlink,也是够了。
也有人抱怨,jlink的接口太不方便了,虽然大多数时候调试的时候,只用了四五根杜邦线截出来,然而他的接口却保留了20脚,其中有一整排除了一个脚全是GND了。做个板子,入股只留几个排针,那样不好插线调试,如果想留一个和jlink一样的接口,又觉得会显得板子笨重,而且在一些对尺寸有严格要求的产品里,压根没有空间放下这个20脚的接口。
这时候有人提出了解决方案,也就是下文的第二种编程器:
2、ST-LINK
可是仔细看看这个并没有解决JLINK的一些缺点,接口还是笨,体积还是不小。那么万能的某宝上还有一种解决方案;
各种各样的颜色,而且价格比较便宜,十五块左右就能搞到,尝鲜买个试试,发现挺好用。和优盘一样大小的身板,出差带着也方便。但是某一天它突然不工作了,插上之后电脑没有人任何反应,我经过一系列的诊断,最后怀着沉重的心情给它下了死亡通知书。
然后再去买下载器,我又不想买太贵的,又想买个小体积的,想来想去,最终一次买了三四个这种小的STLINK,我知道他会坏,但是一次买好几个就不怕他坏了,而且好几个的价格也就是一个某版的jlink价格。
接下来无意发现了淘宝上有一款叫做elink的玩意:
3、elink32-pro
这个东西看起来很棒,因为它集成了串口调试,而且貌似速度很快,正好我和合泰半导体这个公司有业务往来,就请合泰的相关负责人寄我一个样品试用,试用效果很棒,唯二的缺点就是体积太大(和jlink差不多)、价格太贵。
那么有没有可能和合泰达成一个协议,共同作出一款符合以下需求的编程器(下载器、仿真器、调试器)呢?
a、能支持几乎所有32位ARM-CortexM内核单片机
b、小巧便携
c、不掉固件
d、去掉多余接口,只保留swd
e、增加虚拟串口功能
f、可对外供电、电流过大自动切断
g、低成本,大多数人买得起
h、无需驱动,即插即用
于是我和合泰的相关人员进行沟通(这个沟通大概是16年10月开始的)。
经过多次沟通,最终确定:以elink32-pro为原型,去掉一些无用的东西、增加相关功能、由合泰半导体提供固件,我提供硬件及生产。
沟通中争议最多的一个问题是RST引脚是否保留。由于我们使用stlink,jlink等时经常会发生以下问题:
这个问题可以通过一下方式解决:
但是还有很多问题是通过开发环境配置修改所不能解决的,这时候就需要保留RST,然后把RST接在开发板上,就能完成下载,这个功能主要是涉及以下几种使用场景:
1、swd引脚复用(例如STM32F103的PA13和PA14在程序中被设置为其他功能),这时候需要编程器能对开发板进行硬件复位。
2、芯片工作状态为低功耗或者睡眠模式,这时候需要编程器能对开发板进行硬件复位。
所以最终讨论结果是按照合泰半导体厂商提供的方案来,毕竟他们是半导体厂商,考虑问题很严谨、完善。
方案定稿之后,签订了软件使用合同与保密合同,接下来是合泰提供带固件的芯片,我来做整体设计并完成PCB设计、焊接调试等具体的工作。经过一个月的时间、出了几个样品,经过测试发现使用不顺手,等各种问题。比如第一次构思的是直接在板子上加一个usb公头,然后就可以插在电脑上了,但是后续使用发现,这样不是很方便,因为这样的话就会导致目标板距离电脑只有杜邦线长度的距离,如果杜邦线太短,移动不太方便,甚至现在有些电脑的USB口在后面,这样不方便用户下载程序后观察现象。而杜邦线太长则会不稳定,很多情况下,程序无法下载是与杜邦线连接不稳定有关系的(在使用优盘状的STLINK时,经常因为杜邦线太长或者接触不良导致下载失败,后来换成航空线直接焊接上去就可以下载,说明这种stlink的io口驱动能力欠佳)。
考虑以上的缺点,我决定使用现在最常见的micro-USB线来连接e-Link32和PC机。于是经过改版,e-Link32变成了下面这样(手工焊接调试版):
其中白色的SH1.0端子和右侧的5P弯针都是SWD接口。为啥要增加一个SH1.0端子呢,因为在有些电路里,保留2.54 的插针都是对空间的浪费,而且插针是要占用PCB的双面,对其他布线造成了影响。所以增加了SH1.0端子接口,以后大家做板也可以使用这样的端口、减小板子面积,方便调试。
这个版本e-Link32我赠送给五个人进行测试,大概是从16年12月份开始测试的、到17年8月份没有人任何问题,所以我才批量了1000个。选用的是最可靠的PCB提供商和贴片厂商,做出的板子如下:
一个产品必须有完善的文档。在量产的阶段我也进行了相关文档的编写
具体文档可以在淘宝宝贝详情下载。大概具体内容如下:
另外清晰的阐述了elink32如何连接开发板和电脑:
以及如何用elink32给带20脚jtag接口的开发板下载程序:
现在可以说完成了当时提出的这个需求,实现了具有以下功能的调试器:
经测试,可用于但不局限于以下芯片的调试:
STM32F0,STM32F1,STM32F2,STM32F3,STM32F4,STM32F7
STM32L0,STM32L4
LPC800XX,LPC1100XXX,LPC1200XXX,LPC1300XXX,LPC1500XXX,LPC1700XXX,LPC1800XXX,LPC4000XXX,LPC4300XXX,LPC5400XXX,
K60
HT32F16XX,HT32F52XXX
NV32F100XXX
EFM32XXX
W7500
列表有待完善。
这个东西在淘宝搜elink32即可找到,下图中标出的就是(美工跑路了,主图是程序猿搞的):
有人提出了:带串口的东西其实早有了,那么你可以去看看,网络上也有很多教程教大家做这样的下载器的,我可以花一两天时间根据教程完成这么一个下载器,但我肯定没有勇气把他批量了放在市场上给大家用。一款工具性的东西需要经过长期的稳定性测试、还需要对加工工艺进行测试、这些流程都增加了产品的成本,但是却是保证用户买到有保证的产品的一个必须的投入。
委托西安某军工企业进行了温冲测试与高低温测试。
兼容市面上绝大多数ARM Cortex-M 系列单片机。
500ma3.3v对外供电电流,加自恢复二极管保驾护航。
半导体原厂提供固件与技术支持。
一个USB口完成下载调试串口通讯,一遍单步一遍查看串口数据,为你的电脑节省一个宝贵的USB口。
上架两周销量破300,好评如潮,这样的产品你难道不需要拥有一个?
截止2017年9月25日留言本文并点赞人数最多的前三名可获得一个elink32.