大家好、TI 人、
我有一个需要 进行质子处理的镇痛、我发现 IPE 是我实现这一目标的好选择。 我在这个论坛上介绍了用户指南和一些帖子、但仍然有一些疑问。
1) 1)我想知道 IPE 区域中的常量数据或代码是否 可以由同样位于 IPE 区域中的另一个代码修改。
MPU 已经打开了写入访问权限。
2) 中断矢量表(IVT)由 MPU 启用、可自动读取。 此外、如果 IVT 位于 IPE 区域内、则用户指示器会显示"、始终禁止执行。 "
那么、当 MSP430重新响应中断事件时、我有点困惑、它使用 它的"读取" 或 "执行"对吗? 它 "读取"IVT 或"执行"IVT。
3) 3)我仔细阅读了用户指南中的 IPE 字符、并且非常了解 IPE_INIT_structure。启动代码将指示 IPE Signature1 (0xFF88)是否为0xAAAA;如果是、则指示 IPE signature2 (0xFF8A)
已采取行动。 它指向 IPE_INIT_structure。 我相信 IPE_Init_structure 的内容将通过引导代码加载 NOO 寄存器、例如 MPUIPC0、MPUIPSEGB2、MPUIPSEGB。 示例的输出(.txt)
TI 提供的代码如下所示:
当此代码下载到芯片上时,重新启动 MSP430…… IPE 已激活。 但是...这种甲弦仅用于编码器确切知道 需要保护哪些数据的应用程序, 可能如下所示:
#progrma location ="IPEDATA16_C"//IAR 非 CCS
const char key[]={0x11、0x22、0x33、0x44…… };
如果开发人员自己不 知道 常量数据、他只知道在何处 以及如何获取这些数据。 例如、他希望使用 DIEXY 或 TLV 中的随机种子 作为密码。 和需求
将这些字节作为 密码复制到 IPE 区域。 他如何实现这一点?
我编写以下代码、但我不知道它是否起作用。 我没有 硬件/ LaunchPad 来验证它。 我将其粘贴在这里。
//传感是分配的@ IPE 区域 I 设计。 但请记住:IPE 还不存在。 在进行此功能之前。
void GenerateSortsOfKeysAndEnable_IPE (void)@"sensical" { uint16_t i; uint8_t* DieXY_ptr; uint8_t* RandomSeed_ptr; if (0xAAAA ==*((uint16_t*) IPE_SIG_VALID)) 返回; DieXY_ptr =(uint8_t*) 0x1A0A; RandomSeed_ptr =(uint8_t*) 0x1A30; for (i=0;i<8;i++){ Password_ToolAuthorize[i]=* DieXY_PTR++;} for (i=0;i<16;i++){ password_cryptImage[i]=*随机种子_PTR++;} IPE_Init_tmp.MPU_IPC0 = MPUIPENA; IPE_Init_tmp.MPU_IPB2 = IPE_END_ADR>4; IPE_Init_tmp.MPU_IPB1 = IPE_START_ADR>>4; IPE_Init_tmp.mpu_check = 0xFFFF ^(IPE_Init_tmp.mpu_IPC0)^(IPE_Init_tmp.mpu_ipb2)^(IPE_Init_tmp.mpu_ipb1); *(uint16_t*)(IPE_START_ADR)= IPE_Init_tmp.mpu_IPC0; *(uint16_t*)(IPE_START_ADR+2)= IPE_Init_tmp.mpu_IPB2; *(uint16_t*)(IPE_START_ADR+4)= IPE_Init_tmp.mpu_IPB1; *((uint16_t*)(IPE_START_ADR+6))= IPE_Init_tmp.mpu_check; /********* 启动 IPE ********* / *(uint16_t*)(IPE_STR_PTR_SRC)= IPE_START_ADR;//0xFF8A *(uint16_t*)(IPE_SIG_VALID)= 0xAAAA; //0xFF88 PMMCTL0 = PMMPW+PMMSWBOR; }
4) 用户引导程序说、引导代码会将 IPE Signature2传输到安全的非易失性系统数据区域、如副本 、并且 IPE 签名可以被覆盖。
我 在这里有4个问题:
a) 安全的非易失性系统数据区域位于何处?
B)正如我所知、当 MSP430上电时、引导代码首先运行、然后调用内存或 SP 初始化指令。 最后,是 Main()中的代码。
由于 IPE 签名在重新启动后不再起作用、我想知道如何擦除 IPE 区域。 它看起来像应用程序代码
无法实现这一点。 请援引这一机制。
c)如果我 直接写入寄存器 MPUIPC0、MPUIPSEGB2、MPUIPSEGB 而不是构建 IPE_INIT_structure、会发生什么情况?
当然、IPE Signature1将为0xAAAA。 IPE Signaute2在这种情况下看起来毫无用处。
D)您可以看到我不希望调用函数 GenerateSortsOfKeysAndEnable_IPE 两次。 因此、我使用 IPE Signature1作为标志。
if (0xAAAA ==*((uint16_t*) IPE_SIG_VALID))
返回;
如上所述、IPE 签名可以在 BOR 之后修改、这会给我带来一些麻烦。
你是否有更难解决这个问题的方法?
就这些。 谢谢。
。

