第二章:TC3xx平台介绍——从架构到外设,再到开发环境
好,咱们进入第二章。这一章我会带你看看TC3xx系列MCU到底长什么样。说白了,就是先搞清楚我们手里的“武器”是什么,有哪些关键部件,以及怎么把它用起来。
我个人习惯是,在动手写Bootloader之前,先把硬件平台摸透。你想想看,如果连Flash怎么操作、DMA怎么触发都不清楚,后面写代码肯定要踩坑。我在项目中就见过不少同事,上来就写逻辑,结果外设配置搞反了,调试好几天才发现是硬件初始化的问题。
2.1 TC3xx系列MCU架构概览
TC3xx是英飞凌的AURIX系列,主打汽车电子。它最牛的地方是——多核架构。嗯,这里要注意,不是简单的双核,而是TriCore内核,一个核里集成了RISC处理器、DSP和微控制器三种能力。
我刚开始接触时也觉得复杂,但用久了你会发现,这种设计特别适合Bootloader场景。为什么?因为你可以让一个核跑Bootloader,另一个核跑应用,互不干扰。
架构上,TC3xx有几个关键点:
- 多核CPU:通常有3个TriCore核,每个核有自己的本地内存(LMU、DSPR、PSPR)。
- 共享资源:Flash、SRAM、外设总线都是共享的,但通过SRI(系统资源互联)总线仲裁。
- 安全机制:有SMU(安全管理单元)和Lockstep模式,适合功能安全要求高的项目。
我记得第一次做TC3xx项目时,最让我头疼的是内存映射。每个核的地址空间不一样,稍不注意就访问到别人的地盘去了。后来我总结了一个经验:先看LMU(本地内存单元)的地址,再看全局地址,这样不容易乱。
2.2 关键外设简介
Bootloader开发中,有几个外设是绕不开的。我挑四个最重要的讲:Flash、DMA、CAN、GPT12。
2.2.1 Flash——Bootloader的“仓库”
Flash是Bootloader的核心。你要把固件写进去、读出来、擦除、校验,全得靠它。
TC3xx的Flash分两种:
- PFlash(程序Flash):存放代码,读取速度快,但擦写次数有限(通常10万次)。
- DFlash(数据Flash):存放配置参数、校准数据,擦写次数更多(100万次以上)。
操作Flash时,有个坑我必须要说:擦除前一定要确保没有正在执行的代码在Flash里。我曾经有一次在擦除PFlash时,忘了把中断向量表搬到RAM里,结果擦到一半,CPU去取中断向量,直接卡死。嗯,从那以后,我每次擦Flash前都会先检查代码位置。
下面是一个简单的Flash擦除示例(伪代码):
// 擦除一个PFlash扇区
void Erase_PFlash_Sector(uint32 sectorAddr) {
// 1. 检查是否在RAM中运行
if (IsCodeInFlash()) {
// 搬移到RAM
CopyToRAM();
}
// 2. 解锁Flash
Flash_Unlock();
// 3. 发送擦除命令
Flash_SendCmd(ERASE_CMD, sectorAddr);
// 4. 等待完成
while (Flash_IsBusy());
// 5. 校验
if (Flash_Verify(sectorAddr) != OK) {
// 错误处理
}
}
2.2.2 DMA——数据搬运工
DMA(直接内存访问)在Bootloader里主要用来搬数据。比如从CAN接收缓冲区搬到Flash,或者从Flash搬到RAM做校验。
TC3xx的DMA模块有多个通道,每个通道可以独立配置。我个人习惯把通道0留给CAN接收,通道1留给Flash写入,这样逻辑清晰。
配置DMA时要注意:源地址和目的地址的对齐。TC3xx的DMA支持8位、16位、32位传输,但如果你源地址是8位对齐,目的地址是32位对齐,性能会下降。我建议统一用32位传输,效率最高。
2.2.3 CAN——通信主力
CAN总线是汽车电子最常用的通信方式。TC3xx集成了多个CAN节点(MCMCAN),支持CAN 2.0和CAN FD。
Bootloader里,CAN的主要任务是:
- 接收上位机发来的固件数据包
- 发送应答帧(ACK/NACK)
- 处理诊断请求(比如UDS协议)
配置CAN时,我建议把波特率设为500kbps或1Mbps。为什么?因为这是汽车行业最常用的速率,兼容性好。我曾经试过用250kbps,结果上位机不支持,调试了半天才发现是波特率不匹配。
下面是一个CAN初始化示例:
// CAN模块初始化
void CAN_Init(void) {
// 1. 使能时钟
CAN_EnableClock();
// 2. 配置波特率(500kbps)
CAN_SetBitrate(500000);
// 3. 配置消息对象
CAN_ConfigMsgObj(MSG_OBJ_RX, 0x7E0, CAN_MSG_SIZE_8);
CAN_ConfigMsgObj(MSG_OBJ_TX, 0x7E8, CAN_MSG_SIZE_8);
// 4. 启动CAN
CAN_Start();
}
2.2.4 GPT12——定时器与看门狗
GPT12是通用定时器模块,在Bootloader里主要用来:
- 超时检测:比如等待CAN数据包时,超过一定时间没收到就报错。
- 看门狗:防止Bootloader卡死。
- 延时:比如擦除Flash后需要等待几毫秒。
TC3xx的GPT12有5个定时器单元,每个都可以独立配置。我一般用Timer 0做看门狗,Timer 1做超时检测。
2.3 开发环境搭建
好了,硬件看完了,咱们得把开发环境搭起来。TC3xx主要有两个开发环境:AURIX Development Studio(免费)和HighTec(商业版)。
2.3.1 AURIX Development Studio
这是英飞凌官方的免费IDE,基于Eclipse。优点是:
- 免费,不用破解
- 自带编译器(TASKING)
- 有例程和文档
安装步骤很简单:
- 去英飞凌官网下载安装包(约1.5GB)
- 双击安装,一路Next
- 安装完成后,导入一个例程试试编译
我个人习惯用AURIX Development Studio做原型验证,因为上手快。但如果你做量产项目,我建议用HighTec,它的优化更好。
2.3.2 HighTec
HighTec是商业编译器,支持TriCore架构。它的优势是:
- 代码优化更激进,生成的二进制更小
- 支持更复杂的调试功能
- 有技术支持
搭建HighTec环境时,要注意:
- 先安装HighTec IDE(基于Eclipse)
- 再安装编译器(需要License)
- 配置工程时,选择正确的芯片型号(比如TC397、TC364)
我记得第一次用HighTec时,编译一直报错,后来发现是编译器版本和芯片头文件不匹配。嗯,这里建议用HighTec v4.9.3.0以上版本,兼容性最好。
2.3.3 环境对比
| 特性 | AURIX Development Studio | HighTec |
|---|---|---|
| 价格 | 免费 | 商业收费 |
| 编译器 | TASKING | HighTec GCC |
| 优化等级 | 中等 | 高 |
| 适合场景 | 学习、原型验证 | 量产项目 |
小结
这一章我们看了TC3xx的架构、四个关键外设(Flash、DMA、CAN、GPT12),以及两个开发环境。说白了,就是让你对平台有个整体认识。
下一章,我们会深入Bootloader的启动流程,看看芯片上电后到底发生了什么。嗯,那部分更有意思。