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总结

闪存引导加载程序项目

闪存引导加载程序项目 shared_key_boot_serial 是一个基于当前闪存串行引导加载程序实现的示例,具有以下附加特性:

  • 引导加载程序位于闪存空间的前 16KB 中。
  • 引导加载程序将检查存储在两个 EEPROM 块中的 256 位密钥。
  • 如果未找到有效密钥(全部为 FF 的密钥无效):
    • 引导加载程序将进入等待上传映像而不解密该映像的模式。如果从地址 0x4000 开始的映像仅包含 1 到 4 个有效密钥,这些密钥将被复制到 EEPROM,并且 0x4000 处的扇区将被擦除。
    • 引导加载程序将检查 JTAG 是否被禁用。如果未被禁用,它将禁用 JTAG 并对闪存的第一个扇区进行写保护(仅限发布版配置)。
  • 如果找到了有效的密钥映像:
    • 引导加载程序在对数据进行编程前,将使用带有 256 位密钥的 AES 解密来解密传入的数据流。
    • 传入的映像应包含从地址 0x4000 开始的完整闪存映像,闪存末尾的 16 个字节包含身份验证签名。
      • 闪存结束地址 APP_END 在头文件 linker_defines.h 中定义。该文件由密钥创建项目和引导加载程序项目使用。可以将闪存应用结束地址定义为小于实际的闪存结束地址,以减少更新器件的时间,但一旦在引导加载程序中进行了定义,这个值就将成为可以上传到该器件的映像的最大尺寸。
    • 引导加载程序将根据地址 0x4000 到闪存末尾减去 16 个字节的数据,计算 AES-CBCMAC 签名。
    • 如果该签名与存储在闪存末尾的签名匹配,引导加载程序将隐藏包含密钥的 EEPROM 块并跳转到应用程序代码。
提示: 更改加密密钥的方法是添加一个新函数,该函数可以使用具有当前密钥和特定命令的有效散列来撤销当前密钥。