2396686_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2396686_zh-CN

2396686_zh-CN

S32K148有secureboot功能,但是bootloader在jtag关闭后起不来

亲爱的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官方有没有什么成熟的方案来解决此问题?谢谢。

Re: S32K148有secureboot功能,但是bootloader在jtag关闭后起不来

K148的key槽.pngK148的key槽.png

 Hi,@lukaszadrapa 

根据上面的手册,BOOT_MAC是一次性不可逆写入的。还是说有官方专门的API能变更它的值?如果是 ,能提供这个API接口吗?

Re: 晶振波形异常

使用贵公司的FS32K144HFT0MLHT这款MC,IMG_20260718_141710.jpgIMG_20260718_141710.jpg 晶振为AV08000009这款8MHz的无源晶振,波形异常。请问这样的晶振波形 贵公司的MCU可以接受吗 是否会影响正常使用

Re: S32K148有secureboot功能,但是bootloader在jtag关闭后起不来

嗨@vurtual

通常的做法是在生产过程中禁用调试接口,而不是之后在应用程序中禁用。在这种情况下,该过程可以在一个生产步骤中完成:重新编程 Flash 配置字段 (FCF) 以禁用调试端口,然后配置正确的 BOOT_MAC 值(或者允许 CSEc 在下次 RESET 后自动计算该值)。

如果在产品生命周期的后期需要禁用调试接口,也是可以的。但是,一旦 FCF 被重新编程,BOOT_MAC 也必须更新,因为安全启动计算包括修改后的 FCF 内容。否则,安全启动验证将失败。

BOOT_MAC 可以使用标准的 SHE 内存更新协议进行更新,就像 CSEc 密钥的更新方式一样。在将 BOOT_MAC 更新为与新的 FCF 内容匹配后,禁用调试端口后,安全启动应该可以正常工作。

问候,
卢卡斯

Re: 晶振波形异常

你好,@ lukaszadrapa

我们公司使用贵公司的FS32K144HFT0MLHT这款MCU, 配合晶振为AV08000009这款8MHz的无源晶振,波形异常。请问这样的晶振波形,贵公司的MCU可以接受吗,是否会影响MCU的正常使用,谢谢 IMG_20260718_141710.jpgIMG_20260718_141710.jpg

Re: S32K148有secureboot功能,但是bootloader在jtag关闭后起不来

嗨@vurtual

你从哪里看出这是一项不可逆的操作?那不正确。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

Re: 晶振波形异常

请为此另开一个帖子。谢谢。

Re: 晶振波形异常好的,谢谢。Re: S32K148有secureboot功能,但是bootloader在jtag关闭后起不来

我也在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的步骤是有效的。

标记 (1)
无评分
版本历史
最后更新:
星期三
更新人: