这是大象嵌入式S32K144的原理图,现在的问题是程序跑不起来,flash一直是空的。RESET在复位按钮松开是对地电压为1V,这显然不对。
商家的意思是芯片锁住了,RESET会有输出,下面是RESET对地波形。
但我用GPT把烧录过程跑了一遍后,告诉我芯片没锁,flash能烧进去,但是马上就会被擦除。
当我把整个流程全部给gpt后,他给出的解释是:芯片的复位循环不是看门狗,而是 LOCKUP 复位——空 flash 的 CPU 在 0xFFFFFFFE 取指 → 总线错误 → HardFault(handler 也在 0xFFFFFFFE)→ 递归 → LOCKUP → 复位 → 再循环,周期几百微秒。
但是给出的解决办法都没有用,所以大佬们知道怎么解决吗
复位IO反复拉低?是不是你烧录的程序使用了PTA5(RST)这个IO,软件上把这个IO拉低了,然后软件上又没有屏蔽这个IO的复位功能,所以造成一直复位重启?换个正常的例程烧录进去试试
这个 1V 的 RESET 电压确实有问题。正常来说,复位按钮松开后 RESET 应该被内部上拉或者外部上拉电阻拉到接近 VCC(3.3V),1V 说明要么上拉太弱,要么芯片内部在持续拉低复位。
看你原理图,R7 2.2k 上拉应该够力,但注意 S32K144 的 RESET 引脚是双向的——芯片自己也能主动拉低复位。如果真的是 LOCKUP 循环,那芯片会每隔几百微秒自己复位一次,示波器上看到的 1.64kHz 锯齿波很可能就是这个。
先排查几个点:
-
量一下 R7 两端电压,确认上拉电阻确实接到了 VCC_MCU 且电压正常。有时候开发板电源虚焊或 LDO 输出不稳会导致上拉电压不够。
-
断开复位按钮,直接把 RESET 引脚用跳线接到 VCC,看程序能不能跑。如果能跑,说明问题在复位电路;如果还是不行,排除复位电路问题。
-
用 J-Link 或 PE 调试器直接连上去,不要经过板载的 OpenSDA,看看能不能识别芯片 ID。有时候板载调试器会干扰复位。
-
检查 VDDA 和 VREFH,S32K144 模拟电源没接或不稳也会导致奇奇怪怪的复位行为。
关于 GPT 说的 LOCKUP 循环,逻辑上是对的——空 flash 确实会这样。但关键是为什么 flash 会空?是烧录器没写进去,还是写进去又被擦了?建议用 J-Flash 或 S32 Design Studio 直接连芯片,看看 flash 内容到底是什么。如果 flash 确实全 FF,先写一个最简单的 blink 程序进去,看能不能跑起来。能跑说明芯片没锁,是烧录流程问题;不能跑再考虑芯片是否损坏或锁死。
GPT 的解释其实完全正确。S32K144 上的 Flash 为空会导致从无效地址取指,从而触发 HardFault,进而升级为 Lockup,最后导致系统复位。MCU 正在主动把复位引脚拉低,所以你看到的 1.64kHz 锯齿波就是这个原因。要修复这个问题,你需要一个支持“复位状态下连接”的调试器。如果你使用的是 J-Link,请打开 J-Link Commander,尝试执行 unlock kinetis 命令。它会在内核尝试执行那条错误指令之前将其暂停。
同款板子,我上个月刚踩过这个坑。你的GPT分析得其实挺准的,就是LOCKUP循环,但别被复位波形带偏了。
我当时的解决方法是:烧录时用手按住复位键,点Download后立刻松手,让芯片在复位释放前把代码写进去。因为一旦进入LOCKUP循环,SWD时序就乱了,调试器以为写成功了,其实根本没写进去,回头一读全是0xFF,看起来就像"被擦除"。
另外,检查一下你的启动文件是不是S32K144专用的。如果你是从STM32移植过来的代码,向量表位置或链接脚本可能不对。S32K144的Flash起始地址是0x0000_0000,但向量表必须包含合法的初始SP和Reset_Handler。如果这两个值是0xFFFFFFFF,芯片一释放复位就进HardFault。
还有,你测一下3.3V稳不稳,这板子USB供电有时带不动,电压掉到2.8V以下时Flash写入会静默失败,也会表现为"烧不进去"。换根短点的USB线或者外接5V试试。
是新板子吗?也有可能是没有程序造成的不断复位。
像我之前用ESP32S3也这样,新的模组,flash是空的,会不断触发复位,ESP32的解决办法是按照BOOT键上电进入烧录模式。
领导给的,他说没用过
用的官方例程,看了一下PTA5没有配置
试过,unlock kinetis是可以的,但是flash还是无法写进去,或者说写进去又被擦出了
感谢,我明早试一下

