NDK 常见问题(FAQs)¶
Q1:为什么我使用 JLink (SWD) 烧录一个工程后,无法(或很难)再次烧录?¶
正常来说,如果 JLink 接线没问题的话,您是可以反复烧录 App 工程的,若您发现在空板上使用 JLink 烧录 App 工程很容易成功,但再次烧录则不容易成功,则有可能是以下两个原因:
您在 App 代码的初始化流程中修改了 P00/P01 引脚的功能,将其由默认的 SWD 功能切换为其他功能(如GPIO),那么当试图使用 JLink 进行烧录的时候,SWD 通信将无法正常进行
您的 App 工程会频繁地或长期地进入芯片的 DeepSleep 或 Standby 低功耗流程,在这两种低功耗模式下,SWD 通信将无法正常进行
若遇到上述情况,您可以尝试将 JLink 的 RESET 引脚接到 SoC 的 RESET 引脚上,然后再进行烧录,很多时候可以解决问题。
进一步地,若方案仍处于调试阶段,则还可以在 sdk_config.h
中使能 Log/Debug Cofnig - Enable Startup Long Delay 配置,这样在每次系统启动的初始化阶段会被插入一段约 1s 的延时,从而大大提高复位后 SWD 的通信成功率。
注:此处的长延时会显著增加系统的平均功耗和启动时间,因此在方案的产品量产阶段不建议开启。
若上述方法仍然无法成功或不方便使用,那么您还可以尝试以下两种方法:
执行 JLink 脚本 ForceEraseVectorTable_PAN107x.bat(位于:
<pan1070-ndk>\05_TOOLS\调试工具
目录下),此脚本会尝试将 Flash 上的启动代码擦掉,若成功,后续即可正常使用 JLink 重新烧录使用 Panchip 量产烧录工具 PANLINK 烧录固件或将 Flash 内容全部擦除
注:这两种方法也是需要将 SoC 的 RESET 引脚连接到 PANLINK/JLink 的。
Q2:为什么芯片在执行(软件)复位的时候会出现瞬间大电流?¶
当芯片工作的 DCDC(BUCK)模式的时候,BUCK 引脚(VOUT_BK
)输出电压为 1.45v 左右,而芯片复位的时候,芯片供电模式会切换回默认的 LDO 模式,此模式下 BUCK 引脚(VOUT_BK
)输出电压与 VBAT 引脚电压一致(通常为 3.3v),即复位瞬间 BUCK 引脚电平是有抬升的,这会导致 BUCK 引脚的电容充电,于是出现瞬间大电流(> 10mA)的情况。
由前面分析可知,复位的时候出现瞬间大电流是正常现象,不影响芯片使用,但方案中若确有需求希望避免此情况,则电路上可以将一个普通的 GPIO 引脚连接到 BUCK 引脚(VOUT_BK
)上,在程序触发软件复位(Chip Reset)之前,先将此 GPIO 引脚配置成推挽输出高电平的状态,提前给 BUCK 引脚电容充电,延时一段时间(如 10ms)后,再触发软件复位,这样即可避免复位瞬间的大电流。