1、课程导学与硬件准备:MTK8676芯片概览、座舱域控制器硬件架构、CAN收发器选型与电路设计要点
1.1 为什么选MTK8676做座舱?
说实话,市面上做座舱域控制器的芯片不少。高通、瑞萨、NXP都有成熟方案。但我个人习惯,在项目选型时最看重三点:成本、生态、以及量产经验。
MTK8676这颗芯片,我最早接触是在2021年。当时一个客户要做中低端车型的智能座舱,预算卡得很死。高通方案太贵,瑞萨的交期又跟不上。最后我们选了MTK8676,结果效果出乎意料的好。
这颗芯片有几个硬指标:
- 制程:12nm FinFET,功耗控制不错
- CPU:4核Cortex-A76 + 4核Cortex-A55,算力够用
- GPU:Mali-G57 MC3,支持3K分辨率
- AI算力:2 TOPS,做语音助手和DMS够用
- 显示:支持双屏异显,1920x1080@60fps
核心优势:MTK8676内置了CAN控制器,支持CAN 2.0和CAN FD。这意味着你不需要外挂独立的CAN控制器芯片,省成本也省PCB面积。
我在项目中遇到过一个问题:某Tier1用MTK8676做座舱,发现CAN通信偶尔丢帧。查了两周,最后发现是内核里CAN驱动的中断优先级配错了。嗯,这种坑后面我会专门讲。
1.2 座舱域控制器的硬件架构长什么样?
你想想看,一个座舱域控制器要管多少东西?仪表盘、中控屏、HUD、空调面板、方向盘按键、360环视...这些设备通信方式五花八门。
典型的座舱域控制器硬件架构,我画个简图给你看:
+------------------+ +------------------+
| MTK8676 SoC | | MCU (安全岛) |
| (主控 + CAN FD) |<--->| (CAN/LIN/GPIO) |
+--------+---------+ +--------+---------+
| |
| CAN FD | CAN 2.0
| |
+--------v---------+ +--------v---------+
| CAN收发器 | | CAN收发器 |
| (TJA1043等) | | (TJA1040等) |
+--------+---------+ +--------+---------+
| |
v v
CAN FD总线 CAN 2.0总线
(仪表+中控) (车身控制)
这里有个设计思路我要强调:为什么需要双CAN总线?
说白了,就是安全隔离。仪表和中控属于高速多媒体域,数据量大但实时性要求没那么变态。而车身控制域(车窗、门锁、灯光)对实时性和安全性要求极高。混在一起,万一多媒体域出问题,车身控制也跟着瘫痪,那就麻烦了。
我建议的做法是:
- CAN FD总线:连接仪表、中控、HUD,速率5Mbps
- CAN 2.0总线:连接BCM、网关、空调面板,速率500kbps
- MCU做安全网关:MTK8676和MCU之间通过SPI或UART通信,MCU负责过滤和转发CAN消息
个人经验:MCU选型我推荐NXP的S32K1系列或者瑞萨的RH850。别用太便宜的,安全网关一旦出问题,整车都可能失控。我曾经见过一个项目用STM32F4做网关,结果CAN消息风暴时直接死机...嗯,后来全换了。
1.3 CAN收发器选型,别踩这些坑
CAN收发器,说白了就是SoC的CAN控制器和物理总线之间的桥梁。它负责把逻辑电平转换成差分信号,同时提供总线保护。
选型时,我一般看这几个参数:
| 参数 | 说明 | 推荐值 |
|---|---|---|
| 工作电压 | 收发器供电电压 | 3.3V或5V(看SoC的IO电平) |
| 速率 | 支持CAN 2.0还是CAN FD | CAN FD最高8Mbps |
| 待机功耗 | 休眠模式下的电流 | < 10μA |
| 总线保护 | ESD、浪涌、短路保护 | ±8kV接触放电 |
| 唤醒功能 | 支持远程唤醒 | 必须支持 |
市面上常见的CAN收发器,我列几个:
- TJA1043:NXP的经典款,支持CAN FD,待机功耗极低,带唤醒功能。我项目里用得最多。
- TJA1145:带选择性唤醒功能,适合做网关。价格贵一点。
- SN65HVD230:TI的,3.3V供电,适合和低电压SoC配合。但注意它不支持CAN FD。
- MCP2562:Microchip的,便宜,但稳定性一般。小批量玩玩可以,量产我不推荐。
避坑指南:我曾经在一个项目中,为了省几毛钱选了某国产CAN收发器。结果EMC测试时,辐射发射超标了6dB。查了半天,发现是收发器的共模抑制比不够。最后全部换成TJA1043,一次通过。所以,CAN收发器这种关键器件,别省那点钱。
1.4 电路设计要点,照着做就行
CAN收发器的外围电路,说简单也简单,说复杂也复杂。我总结几个要点:
1. 终端电阻
CAN总线两端必须各加一个120Ω终端电阻。这个电阻的作用是匹配阻抗,防止信号反射。
// 典型接法
CAN_H ----[120Ω]---- CAN_L
注意:这个电阻要加在总线的最远端。如果座舱域控制器是总线的一端,那就在板子上加。如果不是,就别加,否则会导致阻抗不匹配。
2. 共模扼流圈
在CAN_H和CAN_L线上串一个共模扼流圈,可以有效抑制共模干扰。我一般选TDK的ACT45B系列,或者Murata的DLW43SH系列。
3. 保护器件
CAN总线是暴露在车外的,ESD和浪涌是家常便饭。我建议加以下保护:
- TVS管:选双向的,钳位电压5V-7V,比如PESD1CAN
- 电容:CAN_H和CAN_L对地各加一个100pF电容,滤除高频噪声
- 共模扼流圈:上面说过了
4. 电源去耦
收发器的VCC引脚,一定要加0.1μF和10μF的去耦电容。而且电容要尽量靠近芯片引脚。这个细节很多人忽略,但直接影响EMC性能。
我的习惯:画PCB时,我会把CAN收发器放在板子边缘,靠近接插件。这样CAN信号走线最短,减少辐射。而且收发器下面不要走其他高速信号,避免串扰。
1.5 本章小结
嗯,这一章我们聊了MTK8676为什么适合做座舱,座舱域控制器的硬件架构怎么搭,CAN收发器怎么选,以及电路设计要注意什么。
说白了,硬件是基础。硬件没做好,后面软件调得再好也白搭。我见过太多项目,因为CAN收发器选型不对或者电路设计有缺陷,导致通信不稳定,最后整个项目延期。
下一章,我们会正式开始CAN总线驱动的移植。我会手把手教你如何在MTK8676的Linux内核里配置CAN驱动,以及怎么用SocketCAN接口收发数据。
到时候见。