工具/软件:Code Composer Studio
您好!
为了避免在 BSL 闪存过程中提供错误密码时进行批量擦除、我计划禁用此功能并为每次 BSL 固件升级使用永久密码。 为此、我需要修复 ISR 地址位置、其值构成 BSL 密码的数据。 到目前为止、修复 ISR 地址是唯一可用的选项、因为由于尺寸限制、无法使用定制 BSL。
那么、我们如何修复 ISR 地址位置呢?
我们将在 MSP FW 中使用以下 ISR。
端口1和2、ADC、计时器1、2、3和 i2c
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.
工具/软件:Code Composer Studio
您好!
为了避免在 BSL 闪存过程中提供错误密码时进行批量擦除、我计划禁用此功能并为每次 BSL 固件升级使用永久密码。 为此、我需要修复 ISR 地址位置、其值构成 BSL 密码的数据。 到目前为止、修复 ISR 地址是唯一可用的选项、因为由于尺寸限制、无法使用定制 BSL。
那么、我们如何修复 ISR 地址位置呢?
我们将在 MSP FW 中使用以下 ISR。
端口1和2、ADC、计时器1、2、3和 i2c
您好!
有关更详细的演示、我可以更详细地描述此解决方案。
两个步骤:
1) 1)在正式的链接器文件中、在内存{...}中定义新的 MyFRAM 和 MySection。 以下是一个示例:
FRAM:origin = 0x8000、length = 0x1000 //注意:由于 MyFRAM 占用 FRAM 空间、FRAM 长度将被更改。
MyFRAM:origin = 0x9002,length = 0x6F70 //注:新定义的段长度用于 ISR,该长度需要涵盖 ISR 函数内容
2) 2)在链接器文件中、定义新的.MySection 并将其分配给新的 MyFRAM 存储器空间。
MySection:{}>MyFRAM
3) 3)在用户代码中的中断函数之前添加"#pragma CODE_SECTION (ISR 函数名称、"new_section")。 下面是一个将 TB1_B0中断 ISR 函数分配给链接器文件中定义的.MySection 的示例。
#pragma vector = Timer1_B0_vector
#pragma CODE_SECTION (Timer1_B0_ISR、".MySection");
_interrupt void Timer1_B0_ISR (void)
{
…μ A
}
通过这3个步骤、您可以在0xFF80~0xFFFD 中为中断矢量表分配固定地址、以便 BSL 密码固定。
谢谢、
Lixin
您好!
在为 ISR 定义存储器部分时、上述方法需要计算 ISR 大小。 对于存储器大小较小的 MCU、编译器代码大小优化也会产生副作用。 因此、我们有另一种方法可以为您的可选选择修复 BSL 密码:
它使用 设置寄存器 SYSRIVECT=1的功能来将中断表映射到 RAM 的顶部区域。
1) 1)在链接器文件中、定义新的存储器以将中断矢量表映射到除复位矢量之外的这个新 FRAM 区域。 代码构建后、中断矢量将位于该新区域中。
2) 2)在用户代码中、将中断表复制到 RAM 顶部区域、并设置寄存器 SYSRIVECT=1。
3) 3)更改 0xFF80 ~ 0xFFFD 的内容以分配 BSL 密码(由于存在新定义的中断矢量、代码构建不会更改此区域)。 由于复位矢量0xFFFE 将在用户代码结构稳定后被固定、BSL 密码将被固定。
没有有关如何更改链接器文件的详细说明。 我们将在未来实现这一目标。
谢谢、
Lixin
您好、Lixin、
感谢您的更新。 我有几个疑问:
1) 1)如您所述。
[引用用户="Lixin Chen1"]
1) 1)在正式的链接器文件中、在内存{...}中定义新的 MyFRAM 和 MySection。 以下是一个示例:
FRAM:origin = 0x8000、length = 0x1000 //注意:由于 MyFRAM 占用 FRAM 空间、FRAM 长度将被更改。
MyFRAM:origin = 0x9002,length = 0x6F70 //注:新定义的段长度用于 ISR,该长度需要涵盖 ISR 函数内容
[/报价]
我们将如何找到中断处理程序函数大小。 由于存在多个 ISR、并且我的 MSP FRAM 剩余空间小于1KB、因此在为每个 ISR 定义存储器时、我无法给出随机长度。
2) 2)另外、 在您建议用于修复 MSP BSL PW 的第二种方法中:
[引用用户="Lixin Chen1"]
2) 2)在用户代码中、将中断表复制到 RAM 顶部区域、并设置寄存器 SYSRIVECT=1。
[/报价]
如何将 ISR 地址复制到 RAM 顶部区域?
您能否给出一个代码示例、此示例显示 RAM 存储器的所有地址映射到每个 ISR 地址。 我已经尝试按照0xFF88到0xFFFF 中使用的相同顺序复制 ISR 地址并将其放置在 RAM 区域的末尾(<= 0x2FFF (0x2000到0x2FFF 的4KB RAM)。 但由于某种原因、我的固件会挂起。
您好!
1) 1)要查找 ISR 占用的存储器大小、您可以检查 CCS 中生成的编译输出.map 文件或.txt 文件。 如果您的代码已完成、则应最终确定代码大小、以便您可以更改链接器文件的起始地址和新 MyFRAM 存储器空间的长度。
2) 2)对于第二种方法、代码构建更灵活、因为它将中断矢量表重新映射到 RAM 中、因此无需计算 ISR 大小。 它只需更改链接器文件中的 RAM 大小(以复制中断矢量表)和 FRAM 大小(用于新的中断矢量表)。 我们有随附的代码示例。 还有用户指南文档可指导您如何使用参考代码。 在 Utilities 文件夹中、有一些小工具(读取 Utilities\Linker_Gen\Readme.txt)可为您生成链接器文件。
如果您通过 BSL 从 PC 或其他主 MCU 下载代码、您能告诉我吗?
谢谢、
Lixin
e2e.ti.com/.../BSL_5F00_FixPassword_5F00_UART_5F00_DemoSoftware_5F00_.zip