第一章:MTK平台概述

大家好,我是老张。在嵌入式这行摸爬滚打了十几年,从早期的功能机时代一路做到现在的物联网项目。今天咱们聊聊MTK平台——这个在嵌入式领域绕不开的“老朋友”。

说实话,MTK(联发科)的发展史,几乎就是半部移动通信芯片的演进史。我个人最早接触MTK是在2008年左右,那时候做功能机,MTK的方案便宜、稳定、开发快,简直是中小厂商的“救星”。

1.1 MTK芯片发展史:从功能机到万物互联

MTK的故事,得从DVD芯片说起。但真正让它名声大噪的,是手机芯片。

  • 功能机时代(2000s):MTK推出了Turnkey Solution(交钥匙方案)。说白了,就是芯片、软件、参考设计全给你打包好。你只要换个外壳、加个电池,就能出手机。我当年有个客户,三个人、两个月,就捣鼓出一款手机——这在今天简直不敢想。
  • 智能机转型(2010s):MTK推出了MT6573、MT6589等芯片。我记得MT6589是第一款真八核处理器,虽然被戏称“一核有难,七核围观”,但性价比确实高。那时候做平板、做低端智能机,MTK是首选。
  • 4G/5G时代(2015s至今):MTK的Helio系列、天玑系列开始冲击中高端。天玑9000、天玑9200在性能上已经不输高通旗舰了。不过,咱们做物联网的,更关注的是MTK的IoT芯片线。

核心观点:MTK的成功,在于它把“复杂的事情简单化”。它提供的SDK和开发环境,让嵌入式工程师能快速上手,而不是从零开始啃寄存器手册。

1.2 MTK在物联网领域的应用:遍地开花

你想想看,现在的智能家居、共享单车、工业网关、甚至一些医疗设备,里面有多少是MTK的芯?我去年帮一个客户做智能门锁方案,用的就是MTK的MT7688芯片。

MTK在物联网领域的主力芯片,我大致分了三类:

芯片系列 典型型号 应用场景 我的评价
Wi-Fi SoC MT7688、MT7628 智能网关、路由器、工业控制 稳定、生态好,我项目里用得最多
NB-IoT / Cat-M MT2625、MT2636 智能水表、烟感、资产追踪 低功耗做得不错,适合电池供电
AIoT SoC MT8516、MT8167 智能音箱、人脸识别终端 带NPU,跑轻量级AI模型没问题

嗯,这里要注意一点:MTK的IoT芯片,很多都继承了手机芯片的“遗产”。比如MT7688,它的内核是MIPS架构,跟早期的MT7620路由器芯片一脉相承。所以,如果你做过路由器开发,上手MT7688会非常快。

1.3 MTK开发环境搭建:SDK安装与驱动配置

这部分是实操重点。很多新手拿到MTK的SDK,第一反应是“这什么鬼?怎么这么大?”——没错,MTK的SDK确实臃肿,但这是因为它集成了太多东西。

我个人习惯用Linux环境做开发,Ubuntu 18.04或20.04都行。Windows下虽然也能搞,但交叉编译链、驱动配置这些,还是Linux更顺手。

1.3.1 SDK安装步骤

  1. 获取SDK:从MTK官方或代理商拿到SDK压缩包。注意,不同芯片的SDK不通用。比如MT7688的SDK叫“MediaTek_APSoC_SDK”,MT2625的SDK叫“MTK_NB-IoT_SDK”。
  2. 解压tar -xvf SDK_xxx.tar.gz。我建议解压到一个路径不含中文和空格的目录,比如/home/yourname/mtk_sdk
  3. 安装依赖:MTK的SDK需要一些基础库。比如libncurses5-devflexbison等。直接sudo apt-get install搞定。
  4. 配置编译环境:进入SDK根目录,运行source build/envsetup.sh。这一步会设置交叉编译链的路径。
  5. 选择目标板:运行lunch命令,会列出所有支持的开发板。比如我选mt7688_evk

小技巧:我第一次配置MT7688环境时,卡在lunch这一步半天。后来发现是Python版本不对。MTK的SDK对Python 2.7有依赖,Ubuntu 20.04默认是Python 3,需要手动装个Python 2.7并设置软链接。

1.3.2 驱动配置:别怕,有套路

驱动配置,说白了就是告诉内核:你的板子上接了哪些外设,怎么初始化。MTK的驱动配置,主要通过设备树(Device Tree)内核配置菜单来完成。

举个例子,我要在MT7688上配置一个UART串口:

// 设备树文件:dts/mt7688.dts
uart1: serial@10000c00 {
    compatible = "mediatek,mt7688-uart";
    reg = <0x10000c00 0x100>;
    interrupts = <28>;
    clocks = <&periph_clk>;
    status = "okay";
};

然后在内核配置中,确保CONFIG_SERIAL_MTK_UART=y。运行make menuconfig,在Device Drivers -> Character devices -> Serial drivers 里勾上。

避坑指南:我曾经在配置GPIO驱动时,忘了设置引脚复用(Pin Mux)。结果GPIO死活拉不高。后来查了芯片手册才发现,那个引脚默认是I2C功能,得先在设备树里把功能切到GPIO。所以,配置驱动前,一定先看芯片的数据手册(Datasheet)引脚功能表

1.3.3 编译与烧录

配置好驱动后,就是编译了。MTK的SDK通常用make命令。第一次编译会很久,因为要编译整个内核和文件系统。我建议用make -j4(4核并行编译)来加速。

编译完成后,会生成u-boot.binkernel.binrootfs.bin等镜像文件。烧录方式取决于你的开发板。MT7688通常用TFTP串口Xmodem烧录。我个人习惯用TFTP,速度快很多。

# 在开发板u-boot中,设置网络参数
setenv ipaddr 192.168.1.100
setenv serverip 192.168.1.10
tftp 0x80000000 kernel.bin
bootm 0x80000000

嗯,到这里,你的MTK开发环境就算搭好了。第一次跑起来的时候,看到串口打印出“Welcome to OpenWrt”或者“MTK Linux”的logo,那种成就感,我到现在还记得。

小结

这一章,我们从MTK的发展史聊到了它在物联网领域的应用,最后手把手搭了开发环境。说白了,MTK平台的核心优势就是“快”——开发快、上手快、产品化快。但快的前提是,你得把环境搭对,把驱动配好。

下一章,我们会深入MTK的启动流程,看看u-boot是怎么把内核拉起来的。到时候,我会分享一个我当年调试启动失败的血泪史——保证让你少走弯路。


公众号:蓝海资料掘金营,微信deep3321