1、MTK平台概述:从功能机到万物互联的芯征程

大家好,我是你们的老朋友。今天咱们正式开讲MTK平台。说实话,做嵌入式这么多年,MTK是我打交道最多的芯片之一。从早期的功能机,到现在的智能家居、物联网设备,到处都有它的影子。这一章,我们先聊聊MTK的前世今生,再讲讲怎么把开发环境搭起来。

1.1 MTK芯片发展史:一部手机芯片的进化简史

MTK,全称MediaTek,联发科。这家公司1997年成立,最早是做光存储芯片的。但真正让它名声大噪的,是2000年代初的功能机芯片。

功能机时代(2000-2010)

那时候手机市场是诺基亚、摩托罗拉的天下。MTK干了一件很聪明的事——提供Turnkey Solution(交钥匙方案)。说白了,就是我把芯片、软件、参考设计全打包好,你手机厂只要换个壳、贴个牌就能卖。我记得2005年左右,深圳华强北的山寨机几乎全是MTK方案。那时候我还在读大学,帮同学刷机刷得不亦乐乎。

智能机转型(2010-2015)

安卓崛起后,MTK一度很被动。但很快它推出了MT6573、MT6589等芯片,主打性价比。我2013年做第一个安卓平板项目,用的就是MT6589。说实话,性能跟高通比有差距,但价格只有人家三分之一。嗯,这就是MTK的策略——用中低端市场站稳脚跟。

4G与AI时代(2015-2020)

Helio系列是MTK冲击高端的尝试。P60、P70这些芯片,在AI算力上下了功夫。我2018年做一个AI摄像头项目,对比过好几家方案,最后选了MTK的P60。为什么?因为它内置的APU(AI处理单元)对轻量级神经网络支持得很好,而且功耗控制确实不错。

5G与IoT爆发(2020至今)

现在MTK的天玑系列在5G市场已经站稳脚跟。同时,它的IoT芯片——像MT7688、MT7621、MT2625这些,在智能家居、工业物联网领域遍地开花。我个人觉得,MTK在IoT领域的布局比高通更接地气,因为它的SDK更开放,文档也更全。

1.2 MTK在IoT与手机市场的地位

先看手机市场。根据2023年的数据,MTK在全球手机芯片出货量上已经连续多个季度排名第一。当然,这主要是中低端和入门级5G手机的贡献。高端市场还是高通占优,但天玑9000系列已经在追赶了。

再看IoT市场。这里MTK的优势更明显。我列个表,大家感受一下:

应用领域 典型芯片 我的评价
智能音箱 MT8516、MT8167 语音唤醒做得好,功耗低
路由器/网关 MT7621、MT7981 性价比之王,OpenWrt生态成熟
NB-IoT MT2625 做水表、烟感的首选
Wi-Fi MCU MT7688、MT7697 跟乐鑫ESP32打擂台,各有千秋

为什么会这样?我觉得有两个原因。第一,MTK的SDK做得比较「接地气」。它不像有些厂商,给你一堆二进制库,出了问题只能干瞪眼。MTK的SDK源码开放程度高,出了问题你能自己追。第二,它的工具链对开发者友好。我刚开始用MTK时,从拿到SDK到编译出第一个固件,只花了半天时间。这在其他平台上几乎不可能。

1.3 MTK平台开发环境搭建(SDK、工具链)

好,理论说完了,咱们来点实际的。搭建开发环境,是每个嵌入式工程师的必修课。我踩过的坑不少,今天把经验分享给大家。

1.3.1 获取SDK

MTK的SDK分两种:一种是公开的,比如联发科官网的IoT SDK;另一种是签了NDA才能拿到的,比如手机芯片的SDK。咱们做IoT开发,用公开的就行。

以MT7688为例,SDK可以从联发科官网的「IoT Resource」页面下载。注意,下载前要注册账号,填一些基本信息。我建议用公司邮箱注册,个人邮箱有时会被拒。

1.3.2 安装工具链

MTK的芯片大多是ARM或MIPS架构。以MT7688为例,它是MIPS 24KEc核心。所以我们需要交叉编译工具链。

我个人习惯用Buildroot来生成工具链。当然,你也可以直接用联发科提供的预编译工具链。这里我给出一个典型的安装步骤:

# 下载工具链(以Ubuntu 20.04为例)
wget https://releases.linaro.org/components/toolchain/binaries/.../gcc-linaro-7.5.0-2019.12-x86_64_mipsel-linux-gnu.tar.xz

# 解压到 /opt
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_mipsel-linux-gnu.tar.xz -C /opt

# 设置环境变量
export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_mipsel-linux-gnu/bin
export CROSS_COMPILE=mipsel-linux-gnu-
export ARCH=mips
注意: 我曾经在Ubuntu 22.04上遇到过工具链兼容性问题。原因是新版系统的glibc版本太高,老工具链不认。解决方案是用Docker跑一个Ubuntu 18.04的环境。嗯,这招屡试不爽。

1.3.3 编译第一个固件

环境搭好了,我们来编译一个最简单的固件。以MT7688的OpenWrt SDK为例:

# 解压SDK
tar -xvf MediaTek_APSoC_SDK_Linux-4.4.198.tar.gz
cd MediaTek_APSoC_SDK_Linux-4.4.198

# 配置
make menuconfig
# 这里选择目标平台:MT7688,然后保存退出

# 编译
make V=s -j4

第一次编译会下载很多源码包,时间比较长。我建议用代理或者提前把源码包下载好。我记得第一次编译时,等了一个多小时,结果最后报了个错——因为网络超时少了一个包。从那以后,我都是先跑一次 make download 把包全拉下来,再正式编译。

1.3.4 烧录与调试

编译出来的固件是 openwrt-ramips-mt76x8-mt7688-squashfs-sysupgrade.bin。烧录方式有两种:

  • 通过U-Boot烧录:按住复位键上电,进入U-Boot命令行,用tftp或串口烧录。
  • 通过Web界面升级:如果板子上已经有系统,直接上传固件升级。

我个人更喜欢用U-Boot方式,因为更可控。万一刷成砖了,还能救回来。

小技巧: 调试时,建议在U-Boot里设置好网络参数,然后用tftp下载固件。这样不用反复插拔串口线,效率高很多。我曾经一天刷了30多次固件,全靠这个技巧。

1.4 本章小结

这一章我们聊了MTK的发展史、市场地位,以及开发环境的搭建。说白了,MTK能成功,靠的是「让开发更简单」的理念。从功能机的Turnkey,到IoT的开放SDK,它一直在降低开发门槛。

下一章,我们会深入MTK的固件架构,聊聊启动流程、分区表、以及如何定制自己的固件。到时候见!