KL25是一款主打低功耗的芯片。支持9种低功耗模式。而在一些非常低功耗的模式下,调试器是无法工作的。这样,如果不做调试,你自己也不知道写得代码是否正确;如果要调试,就只能把代码下载到片上执行,然后利用LED或者串口来做些指示,使用最原始的调试办法,因为J-link不能工作。
这个时候问题就出来了:如果片子进入低功耗模式,而唤醒的代码又不能正确执行,那么这块芯片基本上就废了。因为J-link根本连接不上芯片,我们就没法操控芯片,以后也没有办法下载新的代码。该怎么办呢?
我最近两天就遇到了这种情况。本来到手的比赛项目各个模块已经基本完工,为了提高性能,打算写低功耗模块。结果片子进入了低功耗模式之后,J-link不能工作,而我的中断唤醒又写得不正确,结果以后就失去了对片子的控制,这种情况,花了我整整一天才破解,而破解成功也仅仅只是侥幸而已。
破解的办法就是用J-link擦除flash,重新编程。我们先将芯片连上J-link下载器,如果直接用IAR下载代码,会提示无法连接,或者提醒得不到时钟周期。这是因为芯片进入了低功耗模式,J-link的引脚得不到供电。我们可以使用J-flash工具来进行擦除。我当时使用的是SWD模式,因为KL25只支持SWD模式控制。在J-flash配置中找到这款芯片,设置芯片工作为安全模式(不一定需要这么设置,不过我当时这么设置了一下,也不知道是不是必须的),然后选择整片擦除,如果仍然不能擦除,那么尝试在点击擦除同时,马上按下开发板上的复位键,这点很重要!因为当你按下复位键,系统就会重新启动,在未进入低功耗之前,J-link将可以得到供电,从而可以工作,对芯片进行控制。
后来我又多次碰到了这样的情况,每次直接在IAR界面中,点击擦除flash的时赶紧按下复位键,就可以擦掉flash重新编程。其他的操作是不是必须的我不知道,不过如果碰到了这种情况,那么一定要试一下擦除的同时按下复位。