1. 英飞凌TC36x A/B分区功能深度解析
作为一名嵌入式开发工程师,我最近在调试英飞凌TC36x系列MCU时,深入研究了其A/B分区功能。这个功能在实际产品中非常实用,特别是在需要固件安全升级的场景下。下面我将结合自己的调试经验,详细解析这个功能的实现原理和实际应用中的注意事项。
TC36x的A/B分区功能通过HF_PROCONTP.SWAPEN寄存器配置启用后,PFlash会被自动划分为两个bank:BankA(0x80000000-0x802FFFFF)和BankB(0x80300000-0x805FFFFF)。这种设计允许我们在一个bank中运行程序的同时,在另一个bank中更新固件,实现无缝切换。
重要提示:启用A/B分区功能前,请确保你的工程链接脚本已经正确配置,否则可能导致程序无法正常运行。
2. 地址映射机制详解
2.1 两种地址映射模式
TC36x提供了两种地址映射方式:
- Standard Address Map (SAM)
- Alternate Address Map (AAM)
当前使用的映射模式可以通过读取UCB_SWAP_ORIG_MARKERLx寄存器来识别:
- 0x55表示Standard Address Map
- 0xAA表示Alternate Address Map
在实际调试中,我发现这个寄存器值的变化规律很有特点。每次系统复位后,会根据上次设置的映射模式自动切换。
2.2 地址映射的实际表现
在SAM模式下:
- 0x80000000-0x802FFFFF映射到BankA
- 0x80300000-0x805FFFFF映射到BankB
而在AAM模式下:
- 0x80000000-0x802FFFFF映射到BankB
- 0x80300000-0x805FFFFF映射到BankA
这里有个容易混淆的概念:无论当前是哪个bank在运行,CPU看到的统一虚拟地址都是0x80000000-0x802FFFFF。这种设计保证了代码在不同bank运行时地址引用的一致性。
3. 实际访问PFlash的两种方式
3.1 直接地址访问
直接通过内存地址访问PFlash时,需要注意以下几点:
| 地址映射模式 | 访问当前面 | 访问对面 |
|---
解锁全文
加入我们的会员,获取最新、最热、最精彩的开发者技术内容