主题中讨论的其他器件: MSP-GANG
大家好,
请 说明 我的系统需要安全保护,并且我正在使用 BSL 对其进行编程,受密码保护 。
现在 我的 G2553 受到 32位密码的保护 ,所以在使用 BSL 时有问题 :
- 批量擦除命令 即使 不知道 密码也可能是问题 :我对吗?
-批量擦除命令 还会擦除 我的密码? 据我所知 ,我 对吗?
我担心 的是生产产品安装 G2533 , 并确保 没有人(不知道密码) 可以用不同 的 FW 对其进行重写。
谢谢你
此致
卡洛
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.
大家好,
请 说明 我的系统需要安全保护,并且我正在使用 BSL 对其进行编程,受密码保护 。
现在 我的 G2553 受到 32位密码的保护 ,所以在使用 BSL 时有问题 :
- 批量擦除命令 即使 不知道 密码也可能是问题 :我对吗?
-批量擦除命令 还会擦除 我的密码? 据我所知 ,我 对吗?
我担心 的是生产产品安装 G2533 , 并确保 没有人(不知道密码) 可以用不同 的 FW 对其进行重写。
谢谢你
此致
卡洛
[引用用户="Colombo Carlo"]
大家好,
请 说明 我的系统需要安全保护,并且我正在使用 BSL 对其进行编程,受密码保护 。
现在 我的 G2553 受到 32位密码的保护 ,所以在使用 BSL 时有问题 :
- 批量擦除命令 即使 不知道 密码也可能是问题 :我对吗?
-批量擦除命令 还会擦除 我的密码? 据我所知 ,我 对吗?
我担心 的是生产产品安装 G2533 , 并确保 没有人(不知道密码) 可以用不同 的 FW 对其进行重写。
谢谢你
此致
卡洛
您好、Carlo、
您是指您的32字节密码。
BSL 批量擦除命令不需要密码。 它将擦除所有内容、包括0xFFE0上的密码块和所有信息存储器、包括 INFOA 中的校准数据。 除非有办法重新写入校准数据、否则这将极大地破坏芯片。
如果发送需要密码的命令,但您提供的密码错误,则将自动执行相同的命令。
在 G2553中、您可以在0xFFDE 处对修改该行为的字值进行编程。 如果您在其中存储零(空)值、则不会对错误密码执行自动批量擦除。 如果您在这里存储0xAA55、BSL 将被完全禁用-适用于所有人、包括您。
TI 人会说、如果我有这种错误的话。 在我看来、这比真正有用的安全性更重要。 但我想如果有些未经授权的人没有密码、那么他使用 BSL 所能做的就是完全擦除芯片、使其无用。 但它对您也是无用的。
但不要忘记、除非 JTAG 保险丝熔断、否则 JTAG 编程可以解决所有这些问题。
您好、Carlo、
George Hug 是正确的、他提供的所有信息均可在 MSP430闪存器件引导加载程序(BSL)的第2.7节中找到。 总的来说、在不完全禁用 JTAG 和 BSL 访问的情况下、不能禁用 BSL 批量擦除命令。
此致、
Caleb Overbay
[引用用户="Colombo Carlo]Hi George、Caleb、
谢谢你们,我的案例中还有一些额外的问题(我的案例:我必须有一个器件,只有我可以报告,不能被任何人批量删除,以避免使用我的名字和被黑客攻击的软件的最终产品):
- Step1:我可以通过写入 BSLKEY 来阻止 BSL ->这样 BSL 就被禁用,所以不能进行批量擦除:我对吗?
- Step2:如果我在 Step1中说的是正确的,如果我阻止 BSL,我仍然可以通过我的软件应用程序调用 BSL 吗? 我的想法是器件不能从外部擦除,但我可以在需要时调用 ROM BSL,通过密码保护它并执行所需的固件升级。 我对吗? 我提出的原因是由于完全使用了闪存,所以我需要使用 ROM BSL。
谢谢你
此致
卡洛
Step1 -是的、我认为这对于 BSL 是正确的、但您还必须通过熔断保险丝来防止 JTAG 闪烁。
步骤2 -是的、您可以这么做。 以下是 G2553 ROM BSL 的开头:
。
ADDR 操作码指令
---- ---- ------------------------
0x0c00:0x0c06 .dw 0x0c06 ;冷启动矢量
0x0c02:0x0c1e .dw 0x0c1e ;热启动矢量
0x0c04:0x3fff JMP 0x0c04 ;(偏移:-2)无限循环
0x0c06:0x40b2 mov.w #0xa540、&FCTL3 ;切换 LOCKA、清除 FCLT3中的其他位
0x0c08:0xa540
0x0c0a:0x012c
0x0c0c:0x90b2 cmp.w #0xaa55、&0xffffff; 是否禁用 BSL?
0x0c0e:0xaa55
0x0c10:0xcde.
0x0c12:0x27ff jeq 0x0c12 ;是-无限循环
0x0c14:0x4031 mov.w #0x0220、SP ;no -设置堆栈指针等 -在此处输入 BSL
0x0c16:0x0220
0x0c18:0x430b mov.w #0、r11
0x0c1a:0x43c0 mov.b #0、0x0216
0x0c1c:0xf5fa
0x0c1e:0xc232 dint -- BIC.w #8,SR
0x0c20:0xc0f2 BIC.b #0x32、&IE1
0x0c22:0x0032
0x0c24:0x0000
0x0c26:0x40b2 mov.w #0x5a80、&WDTCTL
0x0c28:0x5a80
0x0c2a:0x0120
0x0c2c:0x40f2 mov.b #0x88、&BCSCTL1
0x0c2e:0x0088
0x0c30:0x0057
。
。
它会检查0x0C0C 处的 BSLKEY、因此您的入口点就在该点之后、即0x0C14处。 但您的代码需要包括:
MOV.w #0xa540、&FCTL3
在执行该条目之前-这是您要跳过的0x0C06上的指令。 此外、可能还有其他寄存器需要在进入 BSL 之前恢复到其启动状态。 SLAU319中的表22建议使用以下指令:
MOV.b #00h、&BCSCTL2
MOV.w #00h、SR
我可能不知道其他人。
[引用 user="Caleb Overbay">Hi Carlo、
这应该是可能的。 如果您可以向 MSP430发送一个命令来覆盖地址0xFFDE 的空密码、然后执行进入序列、BSL 应该按预期工作。
这与仅使用0x0000作为 BSL 密码没有太大不同。 我看到的与您方法的主要区别是、您可以通过密码保护通过 I2C、UART 等发送到 MSP430的自定义命令、该命令会覆盖0x0000密码。
此致、
Caleb Overbay
[/报价]
好的、Caleb、我知道你在这里是一个正式的"天才"、但这可能会令人困惑。 对于这个芯片、G2553、"密码"是指中断向量块的内容。 0xFFDE 处的字是... 其他的东西、也许是 BSLKEY。 无论如何、要在 0xFFDE 上覆盖空值或0xAA55、您必须首先擦除0xFE00处的整个段、包括所有中断矢量、然后用0xFFDE 处的新值恢复该扇区。 然后、您必须再次执行所有这些操作、以将其设置回原来的状态。 当您只能在不同的点进入 BSL 时、似乎会遇到很多问题。 我认为这种非 FR 芯片不实用。
此外、0xFFDE 处的 null 仅可防止错误密码导致批量擦除。 该空值不 会阻止 故意的批量擦除命令。 我的理解是、卡洛希望消除任何人擦除芯片的可能性。 为此、我认为必须在0xFFDE 上有一个0xAA55、然后他将在他的软件的较热点进入 BSL。
[引用用户="Caleb Overbay">George 和 Carlo、
George Hug ,我能不能问你在哪里得到了上面发布的代码? 据我所知、TI 不会将 ROM BSL 源公开用于 G2553。
此致、
Caleb Overbay
我从 slau319的表22中得到了 ROM BSL 的起始地址。 然后、我使用 TI 的命令行 Flasher MSP430Flasher.exe 读取从0x0C00开始的存储器部分、并将其保存到十六进制文件中。 然后、我使用了其中一个 NWK 汇编器实用程序来反汇编十六进制文件。 然后、我将 MultipleSearchReplace.exe 与 include 文件结合使用、将大多数绝对位置更改为有意义的名称、如 FCTL3。 然后我对其进行了一些清理、结果就是我的帖子中的内容。
这个过程已经足够好了、可以帮助我了解 BSL 是如何开始的、但不能弄清楚其他一切是如何工作的。 它不会生成在源代码中找到的变量名称和标签、这对于了解正在发生的情况而言是非常必要的、因此除了这类有限用途外、结果不是很有用。 在我看来,这可能是非法的。 是吗?
您好、Carlo、
在应用程序上发生一个事件时、您可以放入代码:
if (EVENT_EVENCENT)
{
_disable_interrupt ();
FCTL3 = FWKEY + LOCKA;
((void (*)() 0x0C14)();
}
如果要更改 BSLKEY、您可以将其添加到链接器命令文件中、
bslsignature:{}> BSLSIGNATURE
并在闪烁的 LED 上进行初始化、例如:
#define DEFAULT_BSLSKEY 0xFFFF
#define DISABLE_BSL 0xAA55
#define DISABLE_MASH_ERASE_WITH_WRONG_PWD 0x0000
#pragma RETAIN (bslKey)
#pragma DATA_SECTION (bslKey、".bslsignature)
const uint16_t bslKey = disable_BSL;
如果您仍然发现此实现存在问题、请告诉我。
您好、Georg、
非常感谢您对此主题的支持。
是的、要重写@FFDE、我们需要擦除整个扇区。 执行批量擦除时、已对其进行了注意。 因此、我更喜欢在应用程序代码中内置它、并按照我在上一篇文章中编写的那样定义 bslkey 设置的 pragma。
并且同意、我看到在 BSLKEY 处有0x0000只是在错误的密码中添加了禁用批量擦除的功能。 但它会继续通过 TST/RST 引脚进行调用。
通过使用0xAA55、我们消除了 TST/RST 引脚的调用、并且 只有软件条目可访问 BSL。
我们之所以在 ROM 中提供 BSL、是因为我们希望为用户应用保留小尺寸的闪存。 另一个原因是为了避免闪存器件中可能发生的意外 BSL 擦除。 当然、两个 BSL 都有各自的优缺点。 读取 ROM BSL 没有任何问题,这是合法的:)
如果将来有人遇到这个线程、为了完整性、我想说、如果连接有源 USB 适配器、在复位时可以自动进入 BSL。 这避免了连接 DTR 和 RTS 以在/Reset 上提供特殊的信令模式、并避免测试进入 BSL。
出于 BSL 的目的、G2553使用 P1.5作为其 RxD、您的引导代码可以首先在此引脚上启用下拉电阻器、然后读取其当前状态。 如果未连接任何设备、P1.5将为低电平、您将跳转到应用程序。 但是如果它是高 电平、这意味着 USB 适配器的 TXD 输出被连接和加电、并且您将跳转到 BSL -在标准冷入口点、或者 在一条指令之后保持 LOCKA 为高电平(在0C0C 处输入)。
您可以使用 G2553在每个项目固件的开头添加此代码、但更方便的选择是将此类代码放入 INFOA 的未使用部分。 事实证明、那里有足够的空间(到字节)来容纳特殊的引导代码。 安装后、它不太可能被擦除、您可以通过将0xFFFE 上的复位矢量设置为指向0x10C0 - INFOA 代码的开头来启动。 当然、应用也需要从某个常量位置开始、通常为0xC000。
以下是 Naken 汇编器中 INFOA 引导代码的源代码:
冷启动 equ 0x0C00 ;BSL 冷启动进入向量
BestWarmStart equ 0x0C0C ;跳过 LOCKA 切换和锁定复位
BSLPIN equ 0x20 ;BSL RxD - P1.5 (使用下拉)
Main equ 0xC000 ;应用程序从这里启动
org 0x10C0 ;BSL 启动代码。 -INFOA 底部
Part1: ;在此处重置矢量点
MOV.b #0、 &P1OUT ;将为下拉电阻器
MOV.b #BSLPIN、&P1REN ;使能电阻
bit.b #BSLPIN、&P1IN ;测试电流状态、高电平将调用 BSL
MOV.b #0 、&P1REN ;恢复 P1REN -禁用 PD 电阻器
Jnz Part2 ;引脚 P1.5为高电平- USB 已连接
BR #main ;引脚 P1.5为低电平-跳转至 APP
org 0x10EC ;跳转校准数据
第2部分: ;注释掉未使用的选项
; (不适合两者)
BR &COLDSTART ;引脚高电平-通过向量输入 BSL
; mov.w #FWKEY、 &FCTL3 ;保持 LOCKA 置位、但必须复位 LOCK
; br #BestWarmStart ;用于保留 Locka 集的备用条目
要将此代码写入 INFOA、您需要安装程序软件来混合代码映像和 RAM 中的现有校准数据、然后擦除并重新写入 INFOA。 我的 Github 上有这样的安装程序。 可执行十六进制文件是跳转到 BSL 冷启动的版本、但源代码提供了将其更改为 LOCKA 版本的指令。
https://github.com/gbhug5a/MSP430-BSL/tree/master/Installer-G2553-Entry
您可以使用 JTAG 或 BSL 将安装程序十六进制文件刷写到芯片中、但随后需要再次上电才能实际运行安装。 此后、INFOA 引导代码将在复位矢量指向0x10C0时生效。
我之所以开发这种模式、是因为我想使用具有 DTR 但不具有 RTS 的微型 USB 适配器模块、因此我无法使用特殊的信令模式进入 BSL。 使用 INFOA 中的代码、它实际上不占用任何空间。 如果复位矢量指向其他位置、则 INFOA 代码将永远不会干扰任何内容。
G 系列 BSL 的 REPO 中还有其他内容、包括用于将其添加到诸如 G2231等没有内置 BSL 的部件的系统、以及有关在电路中嵌入 USB 适配器或模块的讨论。 请参阅 PDF 文件。 有一个 VBScript 用于将 IntelHex 转换为 TI-TXT。
编辑: 此选项不适用于 Carlo、因为它只通过将器件连接到 PC 即可为任何人提供对功能正常的 BSL 的访问。 他需要将引导代码移动到他的应用程序中、以便有更多的访问限制。
您好、Carlo、
下面是我从 MSP-GANG 开发人员那里获得的一些信息。
在正在使用的试用版中、您使用的是哪个编程器?