許多芯片支持低功耗模式(也常稱作 “睡眠模式” 或類似名稱)。當目標芯片進入此類模式后,會在等待事件、中斷等信號的過程中降低功耗。
低功耗模式的具體實現由芯片設計者決定,不同芯片之間存在差異。
例如在 Cortex?M 內核中,通常通過執(zhí)行 WFI(Wait For Interrupt,等待中斷) 和 WFE(Wait For Event,等待事件) 指令實現。
遺憾的是,低功耗模式在調試過程中常會引發(fā)問題。原因在于:多數低功耗模式的實現會限制甚至完全關閉芯片的調試邏輯:
部分芯片在低功耗模式下會關閉整個調試單元,導致 J-Link 與芯片斷開連接。
部分芯片雖保留調試單元開啟,但會關閉內部 Flash 和 RAM,導致目標處于低功耗模式時,J-Link 無法執(zhí)行后臺內存訪問。
這會讓RTT幾乎無法穩(wěn)定工作,因為內核運行時,目標內存大多數時間無法被訪問。當內核被暫停時,芯片會喚醒并退出低功耗模式,內存恢復可訪問狀態(tài)。
J-Link / Flasher 通過調試接口連接目標芯片時,需要在芯片調試邏輯中設置特定標志位。這些標志位的副作用,可能會導致目標無法進入低功耗模式。
在量產編程完成后,讓目標自動進入低功耗模式是很常見的需求,尤其對于電池供電設備。
因此,在關閉調試或編程會話后,J-Link 會清除之前設置的調試標志位。但這并不代表目標會立即進入低功耗模式,通常還需要對復位引腳進行一次翻轉操作。無法保證清除調試標志位后,芯片一定能回到被調試前原本的低功耗狀態(tài)。
推薦流程:
通過 J-Flash 對目標進行編程
確保在:
Options → Project settings → Production → Start application已勾選,并設置為 via reset pin(通過復位引腳)
或采用以下方式:
通過 J-Flash 等工具對目標編程
退出 J-Flash 等工具(會自動清除調試標志位)
啟動 J-Link Commander
依次執(zhí)行命令:r0 然后 r1
(不要執(zhí)行 connect 或其他連接命令!)
退出 J-Link Commander
注意
以上所有步驟均假設:目標芯片的復位引腳已連接至 J-Link,且可由 J-Link 控制。
總體而言,低功耗模式對調試的影響高度依賴于目標芯片的低功耗實現方式。因此,在對啟用了低功耗模式的目標芯片進行調試時,無法保證 J-Link 功能完全正常。
若在使用低功耗模式時與 J-Link 出現兼容問題,解決辦法是:關閉所有低功耗模式。