前言
在 STM32G0B1 的 FLASH_ACR 寄存器中有個(gè) DBG_SWEN 位,當(dāng)這個(gè)位的值為 0時(shí),設(shè)備就禁用調(diào)試能力,無(wú)法通過(guò)調(diào)試器連接到設(shè)備,反之則啟用調(diào)試能力。
問(wèn)題描述?
客戶(hù)使用的是 STM32G0B1 的 I2C bootloader,bootloader 版本是 0x92,在執(zhí)行完"Go"命令后使用 STM32CubeProgrammer 在"hot plug"模式下連接設(shè)備,但是連接失敗,提示無(wú)法找到設(shè)備。
問(wèn)題復(fù)現(xiàn)與分析
使用 NUCLEO-G0B1RE 板進(jìn)行測(cè)試,bootloader 版本與客戶(hù)的一致都是 0x92,通過(guò)配置選項(xiàng)字節(jié)將設(shè)備配置為從 system memoery 自舉(也就是復(fù)位后進(jìn)入片內(nèi)bootloader 中執(zhí)行)。
驗(yàn)證
在下載到設(shè)備的應(yīng)用程序中添加打印 FLASH_ACR 寄存器的 DBG_SWEN 位的操作,用來(lái)查看執(zhí)行完 I2C bootloader 的"Go"命令后的 DBG_SWEN 的狀態(tài)。
小結(jié)
在 STM32G0B1x 的 0x92 版本的 bootloader 中,通過(guò) I2C 接口執(zhí)行完"Go"命令跳轉(zhuǎn)到應(yīng)用程序時(shí),會(huì)將設(shè)備的 DBG_SWEN 位配置為 0,也就是禁用設(shè)備的調(diào)試能力。如果我們想要恢復(fù)調(diào)試能力的話,可以在應(yīng)用程序中添加設(shè)置 DBG_SWEN 位為 1 的操作。但是其它型號(hào)或者其它版本的 bootloader 執(zhí)行"Go"命令后,不一定會(huì)有這種設(shè)置,我們應(yīng)該具體應(yīng)用具體分析,詳細(xì)可以參考 AN2606,AN2606 是 STM32 bootloader 的說(shuō)明文檔。