亲爱的NXP,你好:
我们公司K148上有一个bootloader和app两个分区,在app里面有关闭jtag的功能,当在app中把jtag关了之后reset后bootloader起不来导致芯片变砖。经调查,bootloader有32K,从0x00到0x8000,关闭jtag是在0x408地址处写入了0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFCu, 0x7Fu, 0xFFu, 0xFFu,导致flash内容变化,reset后CSEc计算bootloader的boot_mac的值和原先的不一致导致变砖。请问NXP官方有没有什么成熟的方案来解决此问题?谢谢。
K148的key槽.png
根据上面的手册,BOOT_MAC是一次性不可逆写入的。还是说有官方专门的API能变更它的值?如果是 ,能提供这个API接口吗?
使用贵公司的FS32K144HFT0MLHT这款MC,IMG_20260718_141710.jpg 晶振为AV08000009这款8MHz的无源晶振,波形异常。请问这样的晶振波形 贵公司的MCU可以接受吗 是否会影响正常使用
通常的做法是在生产过程中禁用调试接口,而不是之后在应用程序中禁用。在这种情况下,该过程可以在一个生产步骤中完成:重新编程 Flash 配置字段 (FCF) 以禁用调试端口,然后配置正确的 BOOT_MAC 值(或者允许 CSEc 在下次 RESET 后自动计算该值)。
如果在产品生命周期的后期需要禁用调试接口,也是可以的。但是,一旦 FCF 被重新编程,BOOT_MAC 也必须更新,因为安全启动计算包括修改后的 FCF 内容。否则,安全启动验证将失败。
BOOT_MAC 可以使用标准的 SHE 内存更新协议进行更新,就像 CSEc 密钥的更新方式一样。在将 BOOT_MAC 更新为与新的 FCF 内容匹配后,禁用调试端口后,安全启动应该可以正常工作。
问候,
卢卡斯
你好,@ lukaszadrapa
我们公司使用贵公司的FS32K144HFT0MLHT这款MCU, 配合晶振为AV08000009这款8MHz的无源晶振,波形异常。请问这样的晶振波形,贵公司的MCU可以接受吗,是否会影响MCU的正常使用,谢谢 IMG_20260718_141710.jpg
你从哪里看出这是一项不可逆的操作?那不正确。BOOT_MAC 可以更新。
正如我之前提到的:
“BOOT_MAC 可以使用标准的 SHE 内存更新协议进行更新,就像 CSEc 密钥的更新方式一样。”
这意味着您可以使用 CMD_LOAD_KEY 命令,该命令与用于导入和更新常规 SHE/CSEc 密钥的命令相同。
要更新 BOOT_MAC,您需要按照标准 SHE 密钥更新程序生成 M1–M5 值。密钥计数器必须递增,并且可以使用 MASTER_ECU_KEY 或 BOOT_MAC_KEY 授权更新。
因此,更新 BOOT_MAC 是受支持的操作,并且不是不可逆的。
此致,
Lukas
请为此另开一个帖子。谢谢。
我也在secure boot开启的状态下实现关闭jtag的功能。
在开始正式工作之前,我进行了一项实验,流程是:
实验1:
1. secure boot设定为并行模式,BOOT_DEFINE时size设为0x8000
2. 手动计算CMAC并通过master key将CMAC导入BOOT_MAC,重启后板子启动正常BOK=1
3. 关闭watch dog(WDOG_DRV_Deinit)
4. 改写0xFFF0起的8个字节
5. 重新计算CMAC后通过secure boot key将CMAC导入BOOT_MAC
6. 开启watch dog (WDOG_DRV_Init)
再次上电时能看到BOK=1
在这一流程调试OK的情况下,我将第4步的修改内容改为改写0x408起的8个字节(实现关闭JTAG),即
实验2:
1. secure boot设定为严格模式,BOOT_DEFINE时size设为0x8000
2. 手动计算CMAC并通过master key将CMAC导入BOOT_MAC,重启后板子启动正常BOK=1
3. 关闭watch dog(WDOG_DRV_Deinit)
4. 改写0x408起的8个字节实现关闭JTAG的功能
5. 重新计算CMAC后通过secure boot key将CMAC导入BOOT_MAC
6. 开启watch dog (WDOG_DRV_Init)
执行这一流程时,发生了reset。执行后板子电流直接掉到0.0102A,并且第5步起始时我添加的log“calculate start"没有看到打印。所以我猜测是在第5、第6步之间发生了reset,导致flash确实发生了变化但是boot cmac还是旧值。
之后我改进了这一流程
实验3:
1. secure boot设定为严格模式,BOOT_DEFINE时size设为0x8000
2. 手动计算CMAC并通过master key将CMAC导入BOOT_MAC,重启后板子启动正常BOK=1
3. WDOG_DRV_Trigger
4. DISABLE_GLOBAL_IRQ
5. 改写0xFFF0起的8个字节
6. ENABLE_GLOBAL_IRQ
7. WDOG_DRV_Trigger
8. 重新计算CMAC后通过secure boot key将CMAC导入BOOT_MAC
这个流程成功了,没有发生reset
我想知道方案2中发生reset的原因..确保方案3中添加的关于中断禁止、WDOG_DRV_Trigger的步骤是有效的。