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.

[参考译文] MSP430G2553:安全性、BSL -密码和批量擦除

Guru**** 2609895 points
Other Parts Discussed in Thread: MSP430G2553, MSP-GANG

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/650811/msp430g2553-security-bsl---password-and-mass-erase

器件型号:MSP430G2553
主题中讨论的其他器件: MSP-GANG

大家好,

请 说明  我的系统需要安全保护,并且我正在使用  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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只想补充一点、我认为每个人都应该在每个 G2553项目的0xFFDE 上存储一个空字。 这至少可以防止由于密码问题而意外擦除整个芯片、包括校准数据、而不会影响安全性。 密码错误仍然无法让您进入、但至少不会擦除芯片。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,George,Caleb,
    谢谢你们,我的案例中还有一些额外的问题(我的案例:我必须有一个器件,只有我可以报告,不能被任何人批量删除,以避免使用我的名字和被黑客攻击的软件的最终产品):
    - Step1:我可以通过写入 BSLKEY 来阻止 BSL ->这样 BSL 就被禁用,所以不能进行批量擦除:我对吗?
    - Step2:如果我在 Step1中说的是正确的,如果我阻止 BSL,我仍然可以通过我的软件应用程序调用 BSL 吗? 我的想法是器件不能从外部擦除,但我可以在需要时调用 ROM BSL,通过密码保护它并执行所需的固件升级。 我对吗? 我提出的原因是由于完全使用了闪存,所以我需要使用 ROM BSL。
    谢谢你
    此致
    卡洛
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="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

      我可能不知道其他人。

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

    这应该是可能的。 如果您可以向 MSP430发送一个命令来覆盖地址0xFFDE 的空密码、然后执行进入序列、BSL 应该按预期工作。

    这与仅使用0x0000作为 BSL 密码没有太大不同。 我看到的与您方法的主要区别是、您可以通过密码保护通过 I2C、UART 等发送到 MSP430的自定义命令、该命令会覆盖0x0000密码。

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

    [引用 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。

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

    我对这种混乱表示歉意。 我的想法已经一笔勾销了、忘记了需要擦除中断矢量才能更改0xFFDE 的值。 我更注重 FRAM 器件、这当然是您不想尝试使用基于闪存的器件的事情。

    最好的办法是乔治所概述的办法。 不过、我需要确认正确的地址、以便与我们的 BSL 团队一起使用。

    ,我能不能问你在哪里得到了上面发布的代码? 据我所知、TI 不会将 ROM BSL 源公开用于 G2553。

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

    [引用用户="Caleb Overbay">George 和 Carlo、  
     
    ,我能不能问你在哪里得到了上面发布的代码? 据我所知、TI 不会将 ROM BSL 源公开用于 G2553。

    此致、
    Caleb Overbay

    [/报价]

    我从 slau319的表22中得到了 ROM BSL 的起始地址。  然后、我使用 TI 的命令行 Flasher MSP430Flasher.exe 读取从0x0C00开始的存储器部分、并将其保存到十六进制文件中。  然后、我使用了其中一个 NWK 汇编器实用程序来反汇编十六进制文件。  然后、我将 MultipleSearchReplace.exe 与 include 文件结合使用、将大多数绝对位置更改为有意义的名称、如 FCTL3。  然后我对其进行了一些清理、结果就是我的帖子中的内容。

    这个过程已经足够好了、可以帮助我了解 BSL 是如何开始的、但不能弄清楚其他一切是如何工作的。  它不会生成在源代码中找到的变量名称和标签、这对于了解正在发生的情况而言是非常必要的、因此除了这类有限用途外、结果不是很有用。  在我看来,这可能是非法的。  是吗?

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

    您好,George,Caleb

    非常感谢 。  以获得您的强大支持。

    我对如何正确跳转至我的代码中的 BSL 感到有点失落:  我有一个 Launchpad 并运行基本的 LED闪烁, 您能 提供一个软件示例还是 一个流程来 从 代码调用 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 没有任何问题,这是合法的:)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Fatmawati_Santosa
    非常感谢,我将在下周进行测试并告诉您。
    如果您在 Launchpad 上有一个工作示例,那将会很好。
    此致
    卡洛
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果将来有人遇到这个线程、为了完整性、我想说、如果连接有源 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 的访问。  他需要将引导代码移动到他的应用程序中、以便有更多的访问限制。

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

    Caleb、你在最后的这个线程上有点消失了  您是否可以回答后续帖子、包括我在哪里得到 BSL 代码的问题?

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

    很抱歉我的答复很晚。 我刚从假期开始回到办公室。

    我在 Fatma 中转到这个帖子、因为她在 MSP430G2553 BSL 方面有更多的经验、并且可以验证您发布的 BSL 代码。 我同意她的所有帖子、感谢您提供的详细解释。 我认为这无疑将帮助论坛上的其他人、他们可能会在通过应用程序而不是硬件进入序列进入 BSL 的方法上遇到困难。

    希望你有一个美好的假期,再次感谢你的帮助!

    此致、
    Caleb Overbay
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Caleb,George,
    我取得了进展,但仍需要您的支持。
    我是在你的建议下跳了一跳,它正在工作! :-)!!! 谢谢(此处附上简单代码)
    我只需在按下 S1后通过 FW 跳转到 BSL、就可以了
    现在我的最后一步...

    我需要通过 BSL 使用 Gang 编程器(因为我已经在生产中使用了这种程序,所以首先通过 JTAG 进行编程,然后我转到 BSL,但使用相同的 Gang)。
    我只想使用这些引脚

    - VCC
    - GND
    - BSL TX
    - BSL RX

    使用附加的代码我无法挂起...
    是否有任何关于正确顺序或群组是否需要某种解决方案的建议? 有什么想法吗?

    非常感谢
    此致
    卡洛

    PS 这是我的简单代码:

    //
    // MSP430G2xx3.
    // --------
    // /|\| XIN|-
    // || |
    // -|RST XOUT|-
    // | |
    // S1---- |P1.7 |
    // | P3.7|--> LED
    //

    //

    #include

    const unsigned int BSL_LOCK @ 0xFFDE = 0xAA55;//禁用 BSL
    #pragma required=BSL_LOCK

    void main()

    WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
    P3DIR |=(0x80);
    while (1)

    如果((P1IN & 0x80)==0)

    P3OUT |=(0x80); // LED 亮起
    _disable_interrupt ();
    FCTL3 = FWKEY + LOCKA;
    ((void (*)() 0x0C14)();


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

    Carlo、我真的不知道 Gang 编程器的任何信息。  但我相信 Caleb 或 Fatma 可以帮您解决问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只想说、如果标准 Gang BSL 连接器包含转至/Reset 和 Test 的线路、那么 Gang 编程器将尝试使用/Reset 和 Test 上的特殊模式进入 BSL、这将使其进入&0x0C00、并且您的代码将被忽略。 但是、如果您已经将0xAA55存储在0xFFDE 中、BSL 将不会运行。 如果是这种情况、您可以尝试断开连接到 Test 引脚的线路。

    此外、您的代码将要求关闭所有 S1开关(P1.7)才能进入 BSL。

    但正如我说过的、我对 Gang 编程器一无所知、因此问题可能是其他问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Carlo、

    我将此案例转发给负责 MSP-GANG 的同事。

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

    您好、Carlo、

    下面是我从 MSP-GANG 开发人员那里获得的一些信息。

    1. MSP-GANG 的第一件事是在 TST 和 RST 引脚上发送 BSL 硬件进入序列
    2. 不会检查这一尝试是否成功完成--也就是说进入了 BSL 模式
    3. 通过发送 BSL 命令(RX 密码后跟发送固件映像)、MSP-GANG 检查是否进入 BSL 模式的方法
    4. 如果 BSL 没有应答、则 MSP-GANG 应用将被终止

    在正在使用的试用版中、您使用的是哪个编程器?

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

    您好、Carlo、

    有没有 MSP-GANG 随您一起更新?

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

    您好 Fatma,  

    很抱歉延迟答复,但客户在介绍中使用了 Gang (现在使用 JTAG) , 我们只能不时得到。

    我将尽快回来,这对于确保引导加载程序在生产中的安全以及 我们正在执行的所有测试至关重要。

    再次感谢您的支持  

    此致

    卡洛