1.背景
近期在做一个小产品,是基于S32K144为MCU的板子。在调试过程中发现,虽然采用Jlink可以连接上,但是无法用S32DS的Debug模式进行调试。也就是.elf文件无法下载进入FLASH,而错误提示总是如下:
(1)Failed to download RAMCode
(2)Failed to Read Memory xxx
而且让人崩溃的是焊接了10套板子,有百分之八九十会有这种现象,现象还是一模一样。
首先是怀疑焊接有问题,焊接了N次,也换过N次MCU,最终的结果都是一样的。
xxxxx:真是让人欲哭无泪
2.排除的N种方法
2.1 是否S32DS的Debug模式有问题
网上遍历了各种帖子,也搜寻了各种官方的文档,然而没有任何作用。并不是各位大牛不牛,只能说没有对症下药
2.2 怀疑复位和晶振问题
既然焊接确保了,电压也测量了,阻抗也测量了,Debug设置也没问题,那是否是复位和晶振的问题,一查复位,还真是有问题,出现了谜之一样的波形:三角波形状的复位信号。抱着试试看的心里,看各位广大的网友是否也遇到类似的情况,还真找到了一遍很相关的S32K1xx系列MCU应用指南之芯片锁死(lockup)复位原因分析与恢复方法详解 (qq.com)
刚开始以为看了希望,按照上面的步骤一步步稳扎稳打,通过SWD读取MDM-AP状态寄存器的命令:
(1)SWDWriteDP 2 0x01000000 //SELECT[31:24] = 0x01选择MDM-AP,且设置DPACC寄存器的SELECT[7:4] = 0x0
(2)SWDReadAP 0 //通过AP index(A[3:2]=0b00)读取MDM-AP状态寄存器
(3)SWDReadAP 0 //dump out真实的AP寄存器值
然后出现了如下界面:
根据读取的指令确定FLASH已经初始化成功,就开始给FLASH解锁,解锁指令就是unlock Kinetis,出现了比较友好的结果:unlock device ok
以为看到了未来,开始又尝试用S32DS的debug模式下载程序,然后问题依旧!!!!!!!令人很抓狂的。
是不是复位的RC值不对,换了几组RC后,问题依旧存在。
进一步抓狂!!!!!!!!!!!!!!!
2.3 FLASH Lock?
在尝试了N次 unlock Kinetis后,也没有成效,又研究了这个帖子S32K1xx系列MCU应用指南之芯片锁死(lockup)复位原因分析与恢复方法详解 (qq.com)
是不是没有mass erase的原因,但是直接输入mass erase没有任何反应,Jlink Command根本不识别,后参考Jlink command的Help ,发现Erase指令,如下图:
直接输入Erase,果真能Erase,然后S32DS Debug还是不行。愤慨了,再Erase下,结果再也连不上Jlink了,MCU变成砖了。愤慨没用,继续搬砖
令人跟崩溃的,换了MCU,采用Jlink的UI界面手动擦除,结果MCU又变成砖了。又一次躺倒在希望的道路上
3.N中死法后的重生
既然已经死了N次,再来一次,换了颗MCU后,尝试了下Jliink UI界面的如下指令,如下图所示
既然出现了奇迹,如下图所示,擦写、下载、验证都是OK的,重新上电,跑马灯起来了,整个世界都亮了。
4.重生后的回味
重生后的喜悦是必然的,但是到底是什么原因了,原来官方的手册写的很明白,当FLASH Memory的安全机制是激活的时候,仿真器是可以连上,但是没法读取Flash Memory的内容的,就出现了Debug模式下的:Failed to Read Memory xxx。
那需要怎么解除安装机制呢,官方手册也说了,就是trigger a mass erase。
那上文尝试的几次Erase怎么还变砖了,那就是擦除的方式不对,导致mass erase disable,这样无法连接上仿真器,这个时候的方法是采用后门钥匙,但这是天方夜谭,除非你找到原厂支持。
因此,不要随便擦除,还是按照Jlink自带的Production Programming就行擦除下载。
5.tips
当使用Jlink UI执行Production Programming没有证书,可以私信。