共计 1148 个字符,预计需要花费 3 分钟才能阅读完成。
AURIX 双 Bank 架构与 IS_ACTIV 标志位
AURIX 微控制器的双 Bank 架构是其 SOTA 功能的核心设计。这种架构将 Flash 存储分为两个独立的 Bank(通常是 Bank0 和 Bank1),允许在一个 Bank 运行当前固件的同时,在另一个 Bank 下载或更新新固件。IS_ACTIV 标志位用于指示哪个 Bank 是当前活跃的(即正在运行的)固件。

- Bank 切换机制 :当新固件下载并验证完成后,通过修改 IS_ACTIV 标志位来切换活跃 Bank,实现固件更新。
- IS_ACTIV 的作用 :该标志位通常存储在特定的 Flash 区域或寄存器中,系统启动时会读取该标志位决定从哪个 Bank 启动。
传统单 Bank 与 Alternative Mapping 方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| 传统单 Bank | 实现简单,资源占用少 | 更新时需要擦除整个 Bank,风险高 |
| Alternative Mapping | 支持并行操作,更新过程更安全 | 配置复杂,需要处理标志位同步 |
IS_ACTIV 状态配置代码示例
#include "IfxScu_reg.h"
#include "IfxFlash_reg.h"
// 检查当前活跃 Bank
uint32_t get_active_bank() {return (FLASH0_FCON.B.IS_ACTIV == 1) ? 1 : 0;
}
// 设置 IS_ACTIV 标志位
void set_active_bank(uint32_t bank) {
// 解锁 Flash 配置寄存器
FLASH0_FCON.U = (FLASH0_FCON.U & ~(1 << 31)) | (0x5A << 24);
// 设置 IS_ACTIV 位
if (bank == 1) {FLASH0_FCON.B.IS_ACTIV = 1;} else {FLASH0_FCON.B.IS_ACTIV = 0;}
// 锁定 Flash 配置寄存器
FLASH0_FCON.B.LCK = 1;
}
错误配置的后果
- 启动失败 :如果 IS_ACTIV 指向的 Bank 没有有效固件,系统将无法启动
- 版本回退 :错误设置可能导致系统回退到旧版本固件
- 数据损坏 :在 Bank 切换过程中断电可能导致标志位与实际固件不匹配
生产环境关键检查点
- CRC 验证 :在切换 Bank 前必须验证新固件的 CRC 值
- 超时处理 :设置合理的超时机制,防止更新过程卡死
- 异常恢复 :实现回滚机制,当更新失败时能自动恢复到之前的稳定版本
动手实验
在 TC3xx 评估板上验证 IS_ACTIV 配置:
- 连接评估板并启动 AURIX Development Studio
- 创建新工程,包含上述代码示例
- 编译并下载到评估板
- 使用调试器观察 FLASH0_FCON 寄存器的变化
- 尝试修改 IS_ACTIV 位并重启系统,验证 Bank 切换效果
通过这个实验,您可以直观地理解 Alternative Mapping 的工作机制,为实际项目中的 SOTA 实现打下坚实基础。
正文完
