S32K1xx 限制调试接口过程

目录

一、 问题描述

二、解决思路

2.1 进入安全状态,使能mass erase

2.2 进入安全状态,使能 backdoor 功能,禁用 mass erase

三、参考代码解析

3.1 修改 Flash Configuration Field 配置

3.2 LED 灯与按键功能

3.3 main 函数

四、调试心得与正确烧录安全代码

4.1 正确烧写安全代码

4.2 调试心得

五、参考文档

一、 问题描述

           在设计完代码之后,需要对调试接口访问进行限制,比如限制读取芯片代码,限制擦除编写功能。

二、解决思路

         打开参考手册,找到 Security 章节,发现里面有 CSEc 功能,但这个功能并不限制访问接口功能,且不是所有 S32K1xx 系列的芯片都有此功能。紧接着看到 Flash 安全功能,这个功能很符合要求。我们可以看到这个功能与 FSEC 寄存器有很大的关系,那就直接查询 Flash 模块里面的 FSEC ,发现其是只读寄存器,初始配置与 Flash Configuration Field 有关,即复位时会从 Flash Configuration Field 读取内容到相关寄存器,如图 1 。


                                                           图 1

         如图 2 ,是 FSEC 寄存器的内容。


                                                                  图 2

         然后仔细看安全描述 ,安全状态情形如下:

2.1 进入安全状态,使能mass erase

         FSEC[SEC]!=0b10 时,进入安全状态,此时有两种方式:

  • 可以通过 Jlink 直接连接,Jlink 会自动 mass erase 恢复调试接口功能;
  • 如果有使能 backdoor 功能,通过 backdoor 验证后,直接擦除 0x400 里面的内容,重新写入可以将 FSEC[SEC] 置为非安全状态的数据,此时复位后即可恢复调试接口功能。

          注意:backdoor 验证后会改变 FSEC[SEC] 为 0b10 ,但 Flash Configuration Field 里面的内容不会改变,也就是验证后不擦除重写,那么再次复位后也会进入安全状态。

2.2 进入安全状态,使能 backdoor 功能,禁用 mass erase

         FSEC[SEC]!=0b10 ,FSEC[KEYEN]==0b10,FSEC[MEEN]==0b10。

此时只有一种办法解决,就是通过 backdoor 验证后,直接擦除 0x400 里面的内容,重新写入可以将 FSEC[SEC] 置为非安全状态的数据,此时复位后即可恢复调试接口功能。

         警告:注意禁用 mass erase 功能且使能安全状态后,一定要开启 backdoor 功能,并且一定要保证在密钥正确的前提下可以通过 backdoor 验证,之后一定要擦除 0x400 所在的扇区 ,擦除之后 mass erase 在 Flash Configuration Field 里面的内容为使能,但为了一步到位或安全考虑,擦除之后重新编写 Flash Configuration Field 内容,使得 FSEC[SEC]==0b10 。另外要注意 Flash 保护功能,由于我这里用的是擦除扇区,如果 0x400 扇区启用了 Falsh 保护功能,擦除失败,那么芯片就再也无法重新擦写。

         注意:backdoor 验证后会改变 FSEC[SEC] 为 0b10 ,但 Flash Configuration Field 里面的内容不会改变,也就是验证后不擦除重写,那么再次复位后也会进入安全状态。

三、参考代码解析

3.1 修改 Flash Configuration Field 配置

         首先新建工程 ,打开 Project_Settings->Startup_Code->Startup_S32K1xx.S 文件(打开启动文件),找到 .FlashConfig section ,代码如下:

/* Flash Configuration */

.section .FlashConfig, "a"

.long 0x76543210 /* 8 bytes backdoor comparison key */

.long 0xFEDCBA98 /* */

.long 0xFFFFFFFF /* 4 bytes program flash protection bytes */

.long 0xFFFF7FAF /* FDPROT:FEPROT:FOPT:FSEC(0xAF = Backdoor key enabled, mass erese disabled, MCU secured) */

上面是对应2.2 的配置,0xAF(红色部分) 改为0xBF/0xFF 就是2.1 的配置 。

3.2 LED 灯与按键功能

         如图 3 ,这里使用了三个灯以及按键 SW3 ,SW3 注意有上拉。

         灯功能如下(调用 ledStatus() 函数) :

  • 处于不安全状态 :红灯亮
  • 处于安全状态且 backdoor 使能 :绿灯亮
  • 处于安全状态且 backdoor 禁止 :蓝灯亮

SW3 功能如下(调用 isSw3Press() 函数确认是否按下):

  • 按下按键,启动 backdoor 验证过程,验证通过直接擦除 0x400 所在扇区并且写入不安全状态内容。

 

                            图 3

3.3 main 函数

         再经历过初始化之后,首先调用 ledStatus(),这时绿灯亮,然后接下来的电容充电。

const uint8_t key[8] = {0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE};

/* 灯颜色决定状态 */
ledStatus();
/* 等待按键的电容充电 */
for(i=0;i<500000;i++){
;
}
while(1){
/* 按下按键,启动 backdoor 验证 */
if(true==isSw3Press()){
/* 获取安全状态,如果是安全状态启动 backdoor 验证 */
FLASH_DRV_GetSecurityState(&securityState);
if(FLASH_SECURE_BACKDOOR_ENABLED==securityState){
/* 验证 backdoor ,然后再继续用灯指示安全状态 */
ret=FLASH_DRV_SecurityBypass(&flashSSDConfig,key);
DEV_ASSERT(STATUS_SUCCESS == ret);
ledStatus();
/* 注意,这里擦除了从 0x0000 ~0x1000 共 4096 个字节 ,注意中断向量表是在哪里的
* 另外由于擦除的是代码区所以接下来的代码可能在 RAM 里面运行更加的保险,防止出现错误 */
/* 擦除 0x400 所在扇区并重新写入 Flash Configuration Field 数据 */
flash_secure_remove();
break;
}
}
}

 

四、调试心得与正确烧录安全代码

    由于 2.2 所示过程比较危险,所以一般要先进行 2.1 验证我们可以做到 正确验证 backdoor 并擦写 Flash Configuration Field 里面的内容 ,然后再配置成 2.2 的内容,这样就不会因为 2.2 过程出现问题导致芯片调试接口锁死。

4.1 正确烧写安全代码

在这里安全代码不可以用 Jlink 连接时通过 S32DS 进行烧写,这样是进入不了安全状态的,正确做法如下:

    Jlink 连接,打开 JFlash ,选择带有 allow security 的,然后将我们的 bin 或 hex 文件移至 JFlash ,这时就可以连接,擦除,编写了安全代码了,如图 4 。


                                                               图 4

4.2 调试心得

         如何确保 backdoor 已经在正确的密钥下通过验证且擦写 Flash Configuration Field 成功 ,如下:

  • 在这个代码里面,用了 led 灯指示安全状态 ,当 backdoor 通过验证后 ,FSEC[SEC]==0b10 ,此时读取的状态为 非安全状态,此时红灯亮,就知道验证已经通过。
  • 如图 5,当芯片处于安全状态且 mass erase 使能时,连接过程中 Jlink 会自动启动 mass erase ,JFlash Log 里面就会出现下面的提示,如果擦写 Flash Configuration Field 成功,即已经改为非安全状态,复位后就正确连接不会出现图 5 的内容。


                                            图 5

五、参考文档

(1) NXP:《S32K1XXRM.pdf》

(2) NXP:《AN4507.pdf》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论