AURIX SOTA功能入门指南:从基础原理到实战应用

1次阅读
没有评论

共计 2474 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

传统 ECU 刷写方式的局限性

在汽车电子控制单元(ECU)的开发中,传统的刷写方式通常需要将车辆开到 4S 店,通过 OBD 接口连接诊断设备进行软件更新。这种方式存在几个明显的痛点:

AURIX SOTA 功能入门指南:从基础原理到实战应用

  • 操作繁琐 :每次更新都需要专业设备和人员操作,车主需要专门安排时间前往 4S 店。
  • 耗时较长 :由于 CAN 总线带宽限制(通常最高 1Mbps),传输大型固件包可能需要数十分钟甚至更久。
  • 成本高昂 :4S 店的人力成本和设备维护成本最终会转嫁给消费者。
  • 覆盖范围有限 :偏远地区或老旧车型可能无法及时获得更新服务。

这些痛点促使汽车行业转向 SOTA(Software Over-The-Air)技术,实现远程、高效的 ECU 软件更新。

SOTA 与传统 CAN 刷写的技术对比

SOTA 与传统 CAN 刷写在协议栈上存在显著差异:

协议栈差异

  • 传统 CAN 刷写
  • 物理层:CAN 总线(ISO 11898)
  • 传输层:CAN TP(ISO 15765-2)
  • 应用层:UDS(ISO 14229)

  • SOTA

  • 物理层:以太网(IEEE 802.3)或蜂窝网络(4G/5G)
  • 传输层:TCP/IP
  • 应用层:HTTP/HTTPS 或 MQTT

性能对比

指标 传统 CAN 刷写 SOTA
带宽 ≤1Mbps ≥100Mbps
传输距离 车载局域网 全球范围
安全机制 基础认证 端到端加密

SOTA 核心实现

安全启动链(Secure Boot)配置

AURIX TC3xx 系列通过 HSM(Hardware Security Module)实现安全启动,主要配置步骤:

  1. 生成密钥对(RSA-2048 或 ECC-256):

    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem

  2. 将公钥烧写到 HSM 的密钥槽(Key Slot),以 Slot 0 为例:

    // 初始化 HSM 模块
    IfxHsm_Init(&hsmConfig);
    
    // 加载公钥到 Slot 0
    IfxHsm_LoadKey(0, public_key_der, sizeof(public_key_der));

  3. 在链接脚本(.ld)中配置受保护的内存区域:

    .secure_code : {KEEP(*(.boot_header))  /* Boot header 必须放在起始位置 */
        *(.secure_text)
        *(.secure_data)
    } > pflash0

差分更新算法(Delta Update)

差分更新通过比较新旧固件版本生成差异包(Delta Package),典型实现流程:

  1. 使用 bsdiff 算法生成差异包:

    import bsdiff4
    delta = bsdiff4.diff(old_firmware.bin, new_firmware.bin)

  2. 在 ECU 端应用差异包:

    // TC3xx 内存中执行补丁应用
    void apply_delta(const uint8_t* base, const uint8_t* delta, uint32_t delta_size) {uint8_t* output = (uint8_t*)0xA0000000;  // 双 Bank 切换的目标地址
        bsdiff_patch(base, output, delta, delta_size);
    }

示例代码:HSM 加密调用

以下代码展示 TC3xx 的 AES-128 加密流程(参考数据手册第 23 章):

#include <IfxHsm.h>

void hsm_aes_encrypt(const uint8_t* plaintext, uint8_t* ciphertext) {
    IfxHsm_Aes_Config aesConfig = {
        .keySlot    = 1,           // 使用预配置的密钥槽 1
        .mode       = IFXHSM_AES_ECB,
        .keySize    = IFXHSM_AES_128,
    };

    IfxHsm_Aes_Handle aesHandle;
    IfxHsm_Aes_init(&aesHandle, &aesConfig);

    // 执行加密(数据长度必须是 16 字节的整数倍)IfxHsm_Aes_encrypt(&aesHandle, plaintext, ciphertext, 16);
}

避坑指南

内存分区设计

双 Bank 切换失败是 SOTA 常见问题,推荐设计原则:

  • 保留至少 20% 的 Flash 空间作为缓冲区域
  • 使用 Linker Script 明确划分 Bank 区域:
    MEMORY {pflash0 (rx) : ORIGIN = 0x80000000, LENGTH = 1M
        pflash1 (rx) : ORIGIN = 0x80100000, LENGTH = 1M
        /* 必须保证两个 Bank 大小完全相同 */
    }

断点续传策略

应对网络中断的典型方案:

  1. 在 RAM 中维护下载进度表:

    typedef struct {
        uint32_t file_size;
        uint32_t received;
        uint8_t  crc32[4];
    } DownloadContext;

  2. 实现 HTTP Range 请求:

    GET /firmware.bin HTTP/1.1
    Host: ota.server.com
    Range: bytes=1024-2047

测试验证

刷写耗时对比

实测数据(1MB 固件包):

方式 传输时间 总耗时
CAN (500kbps) 16.8s 23.4s
Ethernet (100Mbps) 0.08s 1.2s

注:总耗时包含签名验证和写入 Flash 的时间(TC3xx 擦除 1MB Flash 约需 200ms,见数据手册第 15.5.3 节)

ISO 21434 合规性

关键安全要求实现情况:

  • 认证性 :通过 HSM 实现 ECDSA 签名验证
  • 完整性 :SHA-256 校验固件哈希
  • 机密性 :AES-128 加密传输通道
  • 可用性 :支持回滚到上一个有效版本

结语

通过 AURIX 的 SOTA 功能,开发者可以构建符合汽车行业标准的远程更新系统。实际项目中还需要注意:

  • 在 TC3xx 上启用 MPU(Memory Protection Unit)保护关键数据
  • 定期测试看门狗在刷写期间的超时处理
  • 遵循 AUTOSAR 标准定义诊断事件(DTC)

建议结合英飞凌的 AURIX Development Studio 和 MemTool 工具进行调试,可以显著提高开发效率。

正文完
 0
评论(没有评论)