YTM32Bx系列MCU Debug功能关闭与开启
-
在客户应用中,为了软件安全,可能需要关闭MCU JTAG(SWD) debug功能。YTM32Bx系列MCU可通过对CUS_NVR Flash指定地址写入规定数据(详见MCU用户手册)实现开启/关闭JTAG(SWD) debug功能。
以YTM32B1MD14为例,对CUS_NVR Flash地址0x10000408--0x1000040F中写入0x5A5A5A5A,0x5A5A5A5A及可禁用debug,将0x10000408--0x1000040F中值恢复至0xFF即可使能JTAG(SWD)debug功能。如下代码可实现CUS_NVR数据擦写功能,需注意这段代码需在RAM中运行,使用时应将其强制分配至RAM中。
void Test_CusterNvrErase(void) { EFM->CMD = 0U; EFM->STS = EFM_STS_FAIL_MASK | EFM_STS_ACCERR_MASK | EFM_STS_UNRECOVERR_MASK | EFM_STS_RECOVERR_MASK | EFM_STS_DONE_MASK; EFM->CUS_KEY = 0x4dff32; EFM->NVR_ADDR = 0x10000400U; EFM->CMD_UNLOCK = 0xfd9573f5; EFM->CMD = 0x41U; while ((EFM->STS & EFM_STS_DONE_MASK) == 0U) { } } void Test_DisableNvrDebug(void) { EFM->CMD = 0U; EFM->STS = EFM_STS_FAIL_MASK | EFM_STS_ACCERR_MASK | EFM_STS_UNRECOVERR_MASK | EFM_STS_RECOVERR_MASK | EFM_STS_DONE_MASK; EFM->CUS_KEY = 0x4dff32; EFM->NVR_ADDR = 0x10000408U; EFM->NVR_DATA[0] = 0x5A5A5A5AU; EFM->NVR_DATA[1] = 0x5A5A5A5AU; EFM->CMD_UNLOCK = 0xfd9573f5; EFM->CMD = 0x40U; while ((EFM->STS & EFM_STS_DONE_MASK) == 0U) { } }
JTAG(SWD) debug功能被禁用后,无法通过jtag将其恢复,仅能通过flash driver擦除CUS_NVR并复位MCU后,才能恢复JTAG(SWD) debug功能。因此,若用户需要在特定条件下恢复debug功能,则需在软件中预留Test_CusterNvrErase代码,并预留触发执行该代码的机制。
开启JTAG(SWD) debug功能时,因CUS_NVR被擦除,故导致该区域中存储的其他数据(ADDR_PROT寄存器默认值,用户CUS_KEY等)被清除,因此使用过程需根据实际情况保存其他数据。
附件所示代码为YTM31B1MD14 JTAG(SWD) debug禁用/使能测试代码。
Debug_Disable.zip
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...