打印
[XMC™]

XMC4000 Flash的加密和解密

[复制链接]
122|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 IFX_Lingling 于 2024-3-6 10:51 编辑



对flash进行加密和解密有两种方法:
其中一种是通过Memtool进行加密和解密,另外一种是通过直接在代码中进行设置。

方法1:通过Memtool进行配置(Memtool可以通过这个地址进行下载:MEMTOOL_download

通过TMS和TCK电平的设置,让芯片进入ASC_boot模式。

可以通过在Dave中测试是否可以进入Debug进行判断硬件的连接是否是正常的。然后通过Power Down和Power Up,看是否可以跳到应用程序来判断是否确实进入ASC Mode,在ASC Mode 写在flash里面的代码是不运行的。
下面是具体的操作步骤:

目标设备选择和串口号选择:



确保硬件是在ASC bootstrap mode,然后可以点击tool部分的connect:


点击Open File,选择需要烧写的hex文件,click "Select All"可以选择所有需要被烧写的section,然后click右边的program(这一步可以先点击Erase)。这个时候可以通过进入Noramal Mode看程序状态,确认烧写是否成功。为了继续下面的步骤,芯片还需要继续保留在ASC bootstrap mode。


接着就可以点击HW Protection,勾选Enable global Read/Write Protection,然后点击下面截图的Setup



点击Setup以后就会进入下面截图,这一步是输入密码,点击check,然后点击Ok



回到Memtool的主界面,点击同一个界面的Start,出现下面截图点击OK,这个时候flash的protection就被设置了。


这个时候所有的操作都被禁止了:

重新修改TMS和TCK的配置,进入Noraml boot模式,代码可以正常运行。

这个时候Jlink也不能通过swd口访问内部flash。如果想进一步操作,必须先连接memtool进行解密,或者在芯片内部预留了解密的接口。


如果用Memtool解密,可以check ”Remove all Protection“


方法2通过代码进行配置:

通过代码加密的芯片,可以通过预留代码进行解密,也可以通过MEMTOOL进行解密。

/*
* main.c
*
*  Created on: 2016 Mar 18 10:13:58
*  Author: ZhangEdi
*/


#include "xmc_gpio.h"
#include "xmc_flash.h"

uint8_t Security;

/**

* [url=home.php?mod=space&uid=247401]@brief[/url] main() - Application entry point
*
* <b>Details of function</b><br>
* This routine is the application entry point. It is invoked by the device startup code.
*/
//extern void XMC_FLASH_lDisableReadProtectionCommand(uint32_t password_0, uint32_t password_1);

int main(void)
{

  XMC_GPIO_EnableDigitalInput(XMC_GPIO_PORT15,12);
  XMC_GPIO_EnableDigitalInput(XMC_GPIO_PORT15,13);

  /* Placeholder for user application code. The while loop below can be replaced with user application code. */
  while(1U)
  {
}
}
理论解释XMC4200_Reference_Manual
Flash 中有一个特殊的区域 UCB(User Configuration Block),用于 Flash 加密。UCB 区域分为 UCB0,UCB1,UCB2 这三个 1K 的区域,分别分配给 3 个用户使用。每个的权限有所不同,UCB0 用户有对芯片全局读保护和写保护权限,UCB1 用户有对芯片写保护权限,UCB2 用户有对芯片进行 OTP 保护权限。一般比较常用的是全局读保护,即把 PROCON0 的 bit15 值为 1,复位后 Flash 就被读保护了。PROCONx 寄存器是只读的,它会在复位后从 UCB 的对应位置把值 load 进来。


Flash 加密流程:
- 把 PROCNx 的内容配置好,先写 UC Page0
- 再把 confirmation code 设为 0x8AFE15C3,然后再写 UC Page2
- 复位后 Flash 就加密了
Flash 临时解密流程(例如读保护临时解除):
- 执行 Disable Read Protection 命令(需要输入正确的密码)
  

-读完 Flash 后,再执行 Resume Protection 命令
- 执行 Disable Read Protection 命令(需要输入正确的密码)
- 执行 Erase User Configuration Block (注意这个擦除动作只能最多执行 4 次,否者可能会
损坏芯片)
  

可以参考community thread 解决的问题1:https://community.infineon.com/t5/XMC/XMC4700-Flash-Protection/td-p/675201
如果是临时解密的话:
例如临时读写解密:
      XMC_FLASH_VerifyReadProtection(0x7E0, 0x7E0);
      XMC_FLASH_VerifyWriteProtection(0, 0x8000, 0x7E0, 0x7E0);
      XMC_FLASH_EraseUCB(XMC_FLASH_UCB0);

在做flash的加密的时候一定要知道自己的每一步是做什么的,不然会导致芯片被永久性lock。





使用特权

评论回复
沙发
yangxiaor520| | 2024-3-7 17:56 | 只看该作者
特殊应用场景有此需求,最后一行文字是怎么实现左右移动的?

使用特权

评论回复
板凳
IFX-Frank| | 2024-3-9 06:29 | 只看该作者
感谢分享~
使用UID加密验证才可靠。

使用特权

评论回复
地板
一路向北lm| | 2024-3-10 14:08 | 只看该作者
感谢分享,项目中需要用到

使用特权

评论回复
5
LOVEEVER| | 2024-3-27 18:19 | 只看该作者
英飞凌的软件加解密应该还是非常方便的

使用特权

评论回复
6
jf101| | 2024-3-29 09:12 | 只看该作者
使用加密验证才可靠安全

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:
简介:关于英飞凌——我们致力于打造一个更加便利、安全和环保的世界,在赢得自身成功发展的同时,积极践行企业社会责任。

62

主题

140

帖子

3

粉丝