This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR6989:IPE 问题需要帮助

Guru**** 2864240 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/780153/msp430fr6989-ipe-issues-need-help

器件型号:MSP430FR6989

大家好、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 之后修改、这会给我带来一些麻烦。

你是否有更难解决这个问题的方法?

 

就这些。 谢谢。

 


 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    我们有一份有关 IPE www.ti.com/.../slaa685.pdf 的应用手册
    IPE 有一个代码示例
    1)无法在 IPE 中修改常量数据或代码,因为我们定义了常量数据和代码。 如需更多信息、请参阅 SLAA685的代码示例
    2)我认为您只需要按照代码示例的相同方式定义 ISR、这将起作用
    对于接下来的两个问题、您可以首先阅读 SLAA658、如果没有答案、请告诉我。

    此致
    Gary
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好  

    在此处添加更多信息

    1) 1)不能更改 IPE 区域中的常量数据或代码、这意味着常量数据和执行数据。 当您尝试更改它时、您将得到编译器的错误。 但变量可以在 IPE 区域中更改、您可以在中的演示代码中看到该变量  

    2)是,当 IVT 包括 IPE 区域时。 无法使用中断。 在我们的演示中、我们使用 IPE 区域中的计时器 ISR、但 IVT 不在 IPE 区域中。

    3)与#1一样、我们无法更改常量数组的值。 如果您将密钥定义为 变量值、并且复制操作代码位于 IPE 区域、我认为这是可行的。

    4)

    a)受保护的非易失性系统数据区域是 IPE 保护区域。 您知道签名2包含 IPE 的起始地址

    b)在应用程序运行之前 IPE 处于活动状态。 在 UG 中、它只显示"引导代码可以在应用程序代码开始之前预加载用户定义的设置。 这可确保在执行任何用户控制的内存访问之前封装处于活动状态。" 有关更多详细信息、请参阅"引导代码执行序列以确保 IPE 结构指针的完整性。 在执行引导代码时、有效的 IPE 签名1会触发 IPE 签名2 (IPE 结构指针源)到安全的非易失性系统数据区域(保存的 IPE 结构指针)的传输。" 有关更多详细信息、请不要说、我不知道。 很抱歉。

    C)如果 IPE 寄存器未被锁定、则该操作应该起作用。 但是、通过这种方式、您无法确保在应用程序代码运行之前 IPE 处于活动状态

    D)为什么您说"IPE 签名可以在 BOR 之后修改"?

    BR

    Gary

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Gary、
    感谢您的详细回答。 这很有帮助。
    我现在有一个 FR5969 LaunchPad、我将测试我的代码。

    再次感谢。