概念先知道
- Secure Debug(安全调试):给芯片调试口(JTAG)加“锁”,防止未授权调试访问固件与敏感数据。
- 密码模式:设密码并触发后,JTAG 连接必须提供密码;忘记密码且无备份时调试口可能永久受限。
- 烧录不受影响:UART/BSP 下载通道与 JTAG 密码保护无关,密码模式下仍可正常烧录固件。
例程功能简介
本页对应博流官方 SDK 的 sec_dbg_password 例程(examples/peripherals/sec_dbg/sec_dbg_password),演示安全调试(Secure Debug)密码保护:
- 启动时读取当前调试状态并打印:open mode(JTAG 可用)/ password mode(需密码)/ close mode(关闭);
- 延时 10 秒后写入 4 组调试密码并触发(
Sec_Dbg_Set_Dbg_Pwd+Sec_Dbg_Set_Dbg_Trigger),等待就绪后状态切换为 password mode; - 进入 password mode 后,通过 JTAG 调试器连接需要提供密码,防止调试口被未授权访问。
操作步骤
本页不需要额外接线。在终端进入 SDK 的安全调试例程目录(前提:已按快速开始(Linux)或Windows搭建好环境):
cd examples/peripherals/sec_dbg/sec_dbg_password执行编译命令。Ai-M62(BL616)与 Ai-M61(BL618)同属一个系列,统一填写引脚最少的 bl616 即可:
make CHIP=bl616 BOARD=bl616dk用 USB 线连接开发板,按住 BOOT 键(Ai-M61-32S-Kit 为 IO2)不放、短按 EN/RST 进入下载模式,然后执行烧录(把串口号换成实际值):
make flash CHIP=bl616 COMX=/dev/ttyUSB0打开串口助手(波特率 2000000)。例程先打印当前调试状态(Sec dbg is in open mode,此时 JTAG 可用);10 秒后写入 4 组密码并触发,再次打印状态变为 password mode(JTAG 需要密码才能访问)。
代码执行流程
例程从启动到运行的完整流程如下(图中的循环箭头表示反复执行):
注意
该例程会修改芯片安全调试状态。量产/交付前请按产品安全策略确认密码与状态,误操作可能导致调试口永久受限。
例程调用的 API 介绍
Sec_Dbg_Read_Dbg_State()
读取当前安全调试状态:SEC_DBG_STATE_OPEN_MODE / SEC_DBG_STATE_PASSWORD_MODE / SEC_DBG_STATE_CLOSE_MODE。
参数:无
返回值:调试状态枚举值
完整代码
以下为 sec_dbg_password/main.c 完整源码,与官方示例(examples/peripherals/sec_dbg/sec_dbg_password)一致;点灯引脚已适配 Ai-M61/62-32S-Kit 板载 RGB 灯,默认折叠,点击展开:
📜 点击展开 sec_dbg_password/main.c 完整代码
#include "bflb_mtimer.h"
#include "board.h"
#include "bl616_sec_dbg.h"
static void bflb_show_dbg_state(void)
{
uint32_t state;
state = Sec_Dbg_Read_Dbg_State();
if(state == SEC_DBG_STATE_OPEN_MODE){
printf("Sec dbg is in open mode\r\n");
printf("JTAG should be available\r\n");
}else if(state == SEC_DBG_STATE_PASSWORD_MODE){
printf("Sec dbg is in password mode, need password\r\n");
printf("JTAG should be unavailable\r\n");
}else if(state == SEC_DBG_STATE_CLOSE_MODE){
printf("Sec dbg is in close mode\r\n");
}else{
printf("Error! Not support!\r\n");
}
}
int main(void)
{
uint32_t pwd[4] = {0x12345678, 0x22345678, 0x32345678, 0x42345678};
board_init();
printf("password case:\r\n");
/* Password mode, JTAG can not be connected */
bflb_show_dbg_state();
bflb_mtimer_delay_ms(10000);
/* Set password */
Sec_Dbg_Set_Dbg_Pwd(pwd);
Sec_Dbg_Set_Dbg_Trigger();
Sec_Dbg_Wait_Ready();
/* Open mode, JTAG can be connected */
bflb_show_dbg_state();
while (1) {
bflb_mtimer_delay_ms(1000);
}
}FAQ
密码模式生效后还能烧录吗
烧录走的是 UART/BSP 下载通道,不受 JTAG 密码保护影响;但 JTAG 调试需要密码。忘记密码且未留存备份时,调试口可能无法恢复,请谨慎操作。
如何回到 open mode
本页例程只演示 open→password 单向切换。恢复 open mode 需按芯片安全规范执行解锁流程(通常需要烧录对应固件/校验密码),具体参考博流安全文档。
状态打印显示 close mode
说明芯片已被配置为调试关闭状态,JTAG 完全不可用;该状态一般由量产工具写入,属预期安全行为。
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

