2. Stellar/SPC5硬件与软件架构解析

要理解UDS诊断与刷写为什么能在Stellar/SPC5上跑起来,必须先看清这颗MCU的“硬件骨架”和“软件分层”。诊断刷写不是孤立功能,它同时依赖内核、存储、通信外设和AUTOSAR基础软件四层支撑。本节从硬件资源讲到软件部署位置,帮助读者建立一张可对照的架构地图。

一、内核与运行域:诊断代码跑在哪里

Stellar/SPC5系列面向汽车域控制器与安全相关应用,典型结构包含多个处理单元:主核(如Cortex-M或Power Architecture内核,具体型号依SPC5子系列而定)、锁步核或校验核、以及用于安全监控的辅助模块。对诊断刷写而言,关键不是核的数量,而是代码运行域与权限边界。

通常,Bootloader(引导加载程序)驻留在受保护区域,拥有擦写Flash、跳转到应用、响应UDS刷写请求的权限;应用程序(App)运行在普通区域,只能通过特定接口请求进入编程会话。Stellar/SPC5的存储保护单元(如Flash保护寄存器、MPU)决定了哪些地址可写、哪些只能读。若Bootloader区域未加保护,刷写过程中一旦断电或误操作,就可能破坏引导代码,导致ECU“变砖”。因此,实际工程中会把Bootloader放在独立扇区,并设置写保护,只有通过特定解锁序列才允许擦除。

二、存储映射:诊断数据与刷写目标

存储映射是刷写工程的核心。Stellar/SPC5的地址空间通常划分为:

  • Bootloader区:存放引导代码、UDS服务处理、Flash驱动,起始地址常为0x0000_0000或0x8000_0000(依具体型号)。
  • 应用区:存放App代码,刷写时被擦除和重写。
  • 标定/配置区:存放DID(数据标识符)对应的参数、VIN、指纹信息,诊断读取和写入常发生在此。
  • NVM/EEPROM模拟区:存放故障码、自适应值,刷写时通常保留。

刷写流程中,Tester通过UDS的RequestDownload(0x34)告诉ECU目标地址和长度,ECU校验地址是否落在允许擦写的应用区。若地址越界或指向Bootloader区,ECU应返回否定响应(NRC 0x31 RequestOutOfRange)。这一判断逻辑就写在Bootloader的Flash驱动层。

Stellar/SPC5 存储映射与诊断刷写目标 0x0000_0000 0x0001_0000 0x0008_0000 0x0010_0000 Bootloader 区 UDS服务处理 / Flash驱动 写保护 · 不可被App擦除 刷写时禁止越界写入 应用区(App) 刷写目标 · 可擦写 RequestDownload 0x34 指向此区 地址越界 → NRC 0x31 标定 / 配置区 DID · VIN · 指纹信息 ReadDataByIdentifier 0x22 / WriteDataByIdentifier 0x2E NVM / EEPROM 模拟区 故障码 · 自适应值 · 刷写时保留 AUTOSAR 基础软件分层 应用层(App SWC) 诊断事件管理 · 刷写请求触发 RTE 运行时环境 基础软件 BSW DCM 诊断通信管理 UDS 0x10/0x27/0x34/0x36/0x37 DEM 故障管理 DTC 存储与读取 FIM 刷写集成 Flash 驱动调用 COM / PduR CAN/以太网报文路由 MCAL 微控制器抽象层 CAN驱动 · Flash驱动 · GPT · Port 映射

三、外设资源:诊断通信的物理通道

UDS诊断通常走CAN或CAN FD,部分新车型走DoIP(以太网)。Stellar/SPC5内部集成多路CAN控制器(如MCAN),每路对应一个物理通道。诊断报文通过CAN收发器进入MCU,由CAN驱动接收后交给PduR路由,再送到DCM(诊断通信管理)模块解析。

刷写时,数据量远大于普通诊断。以CAN FD为例,单帧可携带64字节,但完整刷写仍需要数千帧。此时CAN驱动的接收缓冲区、中断优先级、DMA配置都会影响刷写速度。实际工程中,Bootloader阶段常把CAN接收中断优先级设为较高,避免丢帧;同时使用DMA搬运数据,减少CPU占用。若刷写过程中出现帧丢失,Tester会因等待超时而中止,ECU应能通过NRC 0x21(BusyRepeatRequest)或0x24(RequestSequenceError)反馈异常。

四、AUTOSAR分层:诊断刷写部署位置

在AUTOSAR架构下,诊断刷写功能横跨多层:

  • 应用层:诊断事件管理、刷写条件判断(如车速为零、电压正常)。
  • RTE:连接应用层与BSW,传递诊断请求和状态。
  • DCM:解析UDS服务,管理会话状态(默认会话、编程会话、扩展会话),处理0x10、0x27、0x34、0x36、0x37等。
  • FIM:刷写集成模块,负责在编程会话中挂起应用、调用Flash驱动。
  • MCAL:Flash驱动直接操作寄存器,完成擦除、写入、校验。

Bootloader通常不依赖完整AUTOSAR栈,而是精简实现DCM和Flash驱动,以减小代码体积、提高可靠性。App则运行完整AUTOSAR,通过DCM响应常规诊断。两者通过共享内存或特定跳转标志协调:App收到0x10 0x02进入编程会话后,设置跳转标志并复位,Bootloader上电后检测标志,决定是否停留在刷写模式。

五、实操视角:一次刷写请求的路径

假设Tester发送0x34 RequestDownload,目标地址0x0008_0000,长度0x0002_0000。报文经CAN进入MCAL CAN驱动,PduR路由到DCM。DCM检查当前会话是否为编程会话,若不是则返回NRC 0x7F。若是,DCM调用FIM,FIM校验地址范围:0x0008_0000落在应用区,允许擦写;若地址为0x0000_1000(Bootloader区),则拒绝并返回NRC 0x31。校验通过后,FIM调用Flash驱动解锁、擦除目标扇区,并返回正响应0x74。后续0x36 TransferData逐块写入,0x37 RequestTransferExit结束,最后0x31 RoutineControl执行校验和跳转。

诊断刷写工程中,存储映射表、Flash扇区划分、DCM会话状态机、FIM调用关系是四个必须对齐的检查点。任何一处地址或状态不一致,都会导致刷写失败或ECU异常。