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.

[参考译文] MSP430F5342:"器件安全"自定义 BSL 下载后的消息

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/748487/msp430f5342-device-secured-message-after-custom-bsl-download

器件型号:MSP430F5342

您好!

我最近尝试使用MSP430定制 BSL 包中的模板为 MSP430F5342器件创建定制 BSL。

我使用了 MSP430F543xA 器件的模板、并将存储器映射更改为 a)根据我的器件进行调整、b)将 BSL 代码加载到 BSL 部分(根据模板中的.map 文件、 代码从0x10000开始加载到闪存中、而不是从0x1000开始的 BSL 区域。) 当尝试将样本 BSL 代码加载到 BSL 区域时、空间不足、因此需要一个溢出区域。 为了适应这种情况、我对 lnk_msp430f5342.cmd 进行了以下修改

在存储器部分:

/*删除信息 MEM 部分
INFOA :origin = 0x1980、length = 0x0080
信息 :origin = 0x1900,length = 0x0080
信息系统 :origin = 0x1880、length = 0x0080
信息系统 :origin = 0x1800、length = 0x0080 //使用此区域进行 BSL 溢出
*/
//添加了 BSL & BSLOF (溢出)部分---
BSL:origin = 0x1042,length = 0x7AE
BSLOF:origin = 0x1880,length = 0x200
//--------------- 

在部分中:

//将所有输出段放置到新定义的存储器段中
.text :{}>> BSL | BSLOF//代码
.text:_ISR:{}>> BSL | BSLOF// ISR 代码空间
.cinit :{}> BSL | BSLOF//初始化表
.const :{}>> BSL | BSLOF //常量数据
.cio :{}> RAM // C I/O 缓冲器

.pinit :{}> BSL | BSLOF // C++构造函数表
二进制文件 :{}> BSL | BSLOF //引导时初始化表
init_array:{}> BSL | BSLOF // C++构造函数表
.mspabi.exidx:{}> BSL | BSLOF // C++构造函数表
.mspabi.extab:{}> BSL | BSLOF // C++构造函数表

#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc:{} load=BSL | BSLOF、run=RAM、table (BINIT)
#endif
#endif 

项目已成功编译、我能够将其加载到器件中。 但是、在加载几次之后、我无法再访问器件并获取该消息

"连接到目标时出错:
器件的调试接口已被保护"

我不明白为什么会这样做。 我检查了 BSL430_API.c 文件、并且在我的项目中锁定密钥仍然是0xFFFFFFFF、所以 JTAG 保险丝应该没有熔断。 导致此行为的原因是什么? 是否可以解锁器件?

谢谢、

svl123

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

    存储器地址0x17FC - 0x17FF 中的值是多少? 这是 JTAG 锁定密钥的存储位置、器件将在此处查找该密钥。 我不建议移动 JTAG 锁定密钥位置、因为这会使器件访问复杂化。 移动 JTAG 锁所在的位置并不是我们可以轻松支持的。

    您仍然可以通过清除正确的存储器地址来执行通过 BSL 解锁 JTAG 的过程。 这可能会让您返回访问权限、但也可能会占用您的器件、因为如果移动了 JTAG 锁定密钥并且其他 BSL 代码位于同一空间。 因为您将在执行 BSL 代码时覆盖 BSL 代码。 当然、您可以在 RAM 中执行 BSL、然后清除相应的存储器部分。

    有关 JTAG 锁定机制的更多信息、请参阅《MSP430F5342用户指南》中的"1.11.2使用电子保险丝的 JTAG 锁定机制"部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jace、

    根据您在上一个主题中有关存储器映射的建议、我没有触摸存储器中的 JTAGLOCK_KEY 区域。 它仍设置为:

    JTAGLOCK_KEY :origin = 0x17FC,length = 0x0004 

    我不知道0x17FC - 0x17FF 处存储了什么值、因为我不再能够访问该器件。 但是、正如我提到过的、BSL430_API 文件具有以下行:

    const unsigned char JTAGLOCKKEY [JTAGLOCKKEY _SIZE]={0xFF、0xFF、0xFF、0xFF}; 

    哪一项会让我相信钥匙没有改变? 当我重复将 BSL 代码加载到器件中而我没有更改它时、这个值与之前这里的值相同。

    我认为此器件不可恢复、因为目标应用只允许通过跳转到0x1000对 BSL 进行软件访问。 我想知道的是、发生这种情况的原因以及未来如何防止这种情况、因为我注意不要修改 JTAGLOCK_KEY 位置中的数据。 此外、根据您建议的文档中的第1.11.2节、必须设置保护寄存器、以便甚至可以访问保护密钥。 我没有修改这些寄存器(不确定模板 BSL 代码是否对它们执行了某些操作。) 即使 JTAGLOCK_KEY 段未被触发、重新映射存储器是否有可能触发某种锁定器件的安全机制?

    谢谢、

    svl123

    编辑:我刚刚注意到我的 BSLOF 段原点有一个排印错误-它应该从0x1800开始、而不是0x1880、这会导致它与 RAM 段重叠。 但是、BSLOF 中只使用了0xa4字节、所以它不应该已经向 RAM 写入任何内容并导致了一个问题、对吧?

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

    是的、存在保护位。 这些位用于防止您在编程或执行批量擦除或执行其他操作时意外写入 BSL 区域。 但是、如果你已经在写入 BSL 区域(正如你在芯片上放置 BSL 时所做的那样)、这些位被清除。

    如果不知道发生了什么、或者写入了该存储器地址中的内容、我不能建议您再次防止这种情况发生。 我可以建议您确保在开发过程中可以进入 BSL 或 JTAG 连接。 您仍然应该能够通过硬件条目进入器件 BSL、除非您已经在 BSL 代码内(我认为位于 BSL 低级 init 文件中)删除了该特定的检查序列。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、谢谢。 我将进一步调查代码、看看我是否可以了解器件的安全原因。