ZHCABH7 January   2022 TM4C129CNCPDT , TM4C129CNCZAD , TM4C129DNCPDT , TM4C129DNCZAD , TM4C129EKCPDT , TM4C129ENCPDT , TM4C129ENCZAD , TM4C129LNCZAD , TM4C129XKCZAD , TM4C129XNCZAD

 

  1.   摘要
  2.   商标
  3. 1实现
    1. 1.1 闪存引导加载程序项目
      1. 1.1.1 对示例项目 boot_serial 的变更
        1. 1.1.1.1 对 bl_config.h 的变更
        2. 1.1.1.2 添加的新函数
          1. 1.1.1.2.1 MyCheckUpdateFunc
          2. 1.1.1.2.2 MyReinitFunc
          3. 1.1.1.2.3 MyEndFunc
          4. 1.1.1.2.4 MyDecryptionFunc
    2. 1.2 映像创建项目
    3. 1.3 密钥映像工程
    4. 1.4 EK-TM4C129EXL 示例应用程序项目
    5. 1.5 DK-TM4C129X 示例应用程序项目
    6. 1.6 基于 RAM 的 EEPROM 擦除项目
  4. 2示例走查
    1. 2.1 编译环境
    2. 2.2 将示例导入 Code Composer Studio
    3. 2.3 设置密钥和变量
      1. 2.3.1 密钥
      2. 2.3.2 初始化矢量
      3. 2.3.3 应用程序起始地址和闪存大小
        1. 2.3.3.1 APP_BASE
        2. 2.3.3.2 APP_END
        3. 2.3.3.3 RAM_BASE
    4. 2.4 运行 shared_key_image_encrypt 工具
    5. 2.5 运行共享密钥串行引导加载程序
      1. 2.5.1 对引导加载程序进行编程
        1. 2.5.1.1 擦除现有代码和密钥
          1. 2.5.1.1.1 使用 Code Composer Studio 擦除闪存和 EEPROM
          2. 2.5.1.1.2 使用解锁程序擦除闪存和 EEPROM
        2. 2.5.1.2 使用 ROM 引导加载程序对共享密钥引导加载程序进行编程
      2. 2.5.2 使用共享密钥引导加载程序对应用程序代码进行编程
    6. 2.6 返回引导加载程序
  5. 3总结

运行共享密钥串行引导加载程序

尽管在非安全环境中可以对引导加载程序进行编程,但会导致初始化矢量暴露的风险。因此,最好的方法是在安全环境中同时对引导加载程序和密钥进行编程。如果在第一个扇区中对引导加载程序进行编程,而在 APP_BASE 的扇区中对密钥的映像进行编程,引导加载程序将把密钥复制到 EEPROM 中,然后擦除 APP_BASE 的扇区。如果使用“发布”版配置,引导加载程序会对其自身进行写保护并禁用 JTAG。

引导加载程序的“调试”版配置不应在现场发布。他人可以轻松使用仿真器连接到 JTAG 端口并编写公开密钥的代码。他们随后可以制作自己的程序,用这些密钥加载。

用户应考虑是否在其电路板上外露 JTAG 引脚。使用 ROM 引导加载程序对初始引导加载程序和密钥进行编程是可以实现的。因此,不需要访问 JTAG。使用引导加载程序的“发布”版配置将禁用 JTAG 接口,但他人仍可使用恢复锁定的微控制器方法来完全重置器件。这将擦除 EEPROM 中的引导加载程序、应用程序代码和密钥。之后,他们可以将自己的代码编程到该器件中。这与他们拆焊 TM4C 器件并用新器件进行替换的效果相同。对于球栅阵列(BGA)器件,可以通过不对 JTAG 球添加布线来隐藏 JTAG。对于四方扁平封装(QFP)器件,即使没有对引脚布线,它们也会暴露在外。

无法访问 JTAG 引脚的主要缺点是无法从外部恢复器件。因此,用户必须确保,在重新进入引导加载程序之前,需要通过一个经过验证的过程。此外,对于故障器件,如果不将其从印刷电路板上移除,就无法进行分析。