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接口收发数据。

到时候见。