3、SP_Flash_Tool高级技巧:分区表定制、Preloader与Bootloader单独烧录、NVRAM分区备份与恢复、EMMC与UFS烧录差异
好,咱们继续往下聊。SP_Flash_Tool 这个工具,很多人拿它来刷个整包就完事了。但说实话,那只是它的基本功。真正值钱的,是那些平时不怎么用、但关键时刻能救命的「高级功能」。这一章,我就把压箱底的东西翻出来,跟你好好聊聊。
3.1 分区表定制:别让「分区不够」卡住你的项目
做 MTK 项目,最头疼的事之一就是分区规划。尤其是现在客户需求五花八门,今天要加个 OTA,明天要扩个 vendor 分区。如果每次都去改 scatter 文件,那效率太低了。
我个人习惯,是在项目初期就留好「弹性空间」。怎么留?靠的就是分区表定制。
SP_Flash_Tool 烧录时,依赖的是 scatter 文件里的分区布局。你想想看,这个文件其实就是一张地图。告诉工具:哪块是 bootloader,哪块是 system,哪块是 userdata。
要定制分区,核心就是改 scatter 文件里的 partition_size 和 linear_start_addr。举个例子:
// 原始分区
- partition_index: SYS1
partition_name: system
partition_size: 0x20000000 // 512MB
linear_start_addr: 0x10000000
// 修改后,把 system 缩小,腾出空间给 vendor
- partition_index: SYS1
partition_name: system
partition_size: 0x18000000 // 384MB
linear_start_addr: 0x10000000
- partition_index: SYS2
partition_name: vendor
partition_size: 0x8000000 // 128MB
linear_start_addr: 0x28000000
另外,还有一个更高级的玩法:动态分区。MTK 从 Android 10 开始支持了。说白了,就是分区大小不写死,由系统在第一次启动时自动分配。这样你就不用每次改 scatter 了。但前提是,你的 preloader 和 bootloader 得支持。
3.2 Preloader 与 Bootloader 单独烧录:别动不动就刷全包
做底层调试时,最忌讳的就是「一有问题就刷全包」。全包烧录一次少说 5 分钟,要是加上校验,10 分钟就没了。你想想看,一天能调试几次?
我通常的做法是:只烧录 Preloader 或 Bootloader。
Preloader 是芯片上电后第一个执行的代码。它负责初始化 DRAM,然后加载 Bootloader。如果 Preloader 坏了,手机就是一块砖。Bootloader 则负责加载 kernel。
在 SP_Flash_Tool 里,单独烧录很简单:
- 加载 scatter 文件
- 在分区列表里,只勾选
preloader或bootloader - 其他分区全部取消勾选
- 点击 Download 即可
这里有个坑,我得提醒你。Preloader 烧录时,必须确保电压稳定。我曾经在一次现场调试中,电池电量不足,结果 Preloader 烧到一半断电了。嗯,那台设备直接变砖,最后只能拆机用 EMMC 编程器救。所以,烧 Preloader 时,一定用稳压电源或者充满电的电池。
3.3 NVRAM 分区备份与恢复:IMEI 丢了?别慌
做手机开发,最怕客户问:「为什么我的 IMEI 没了?」
IMEI、WiFi MAC 地址、蓝牙地址,这些关键信息都存在 NVRAM 分区里。这个分区很小,一般就几 MB,但丢了它,设备就废了一半。
SP_Flash_Tool 提供了 NVRAM 分区的读写功能。具体操作:
- 在工具里选择
Read Back标签 - 添加一个读取任务,起始地址填 NVRAM 分区的
linear_start_addr - 长度填 NVRAM 分区的
partition_size - 点击
Read Back,工具就会把 NVRAM 分区读出来,保存成一个 bin 文件
恢复时更简单:用 Write Memory 功能,把备份的 bin 文件写回去就行。
🔑 关键点: 我建议你在项目量产前,先备份一份「干净的」NVRAM 分区。这样万一量产过程中有设备 IMEI 丢失,直接恢复就行,不用重新写号。
另外,NVRAM 分区里还存了校准数据。比如射频的 TX power 校准值。如果你换了主板或者换了 PA,最好重新校准,不要直接恢复旧的 NVRAM。否则信号可能变差。这个坑我踩过,说出来都是泪。
3.4 EMMC 与 UFS 烧录差异:别用老方法处理新硬件
现在很多中高端平台都开始用 UFS 了。UFS 和 EMMC 虽然都是存储,但烧录方式差别很大。
| 对比项 | EMMC | UFS |
|---|---|---|
| 接口协议 | MMC 协议,8 位并行 | UNIPRO/M-PHY,串行差分 |
| 烧录速度 | 较慢,约 20-30 MB/s | 较快,约 100-200 MB/s |
| 分区方式 | MBR/GPT,支持 boot 分区 | LUN 逻辑单元,支持 RPMB |
| SP_Flash_Tool 支持 | 完全支持,稳定 | 需要特定版本,且依赖驱动 |
用 SP_Flash_Tool 烧 UFS 时,有几点要注意:
- 驱动问题: UFS 的烧录驱动和 EMMC 不一样。如果电脑没装对驱动,工具会报错
STATUS_UNSUPPORTED_CTRL。我建议用 MTK 官方提供的驱动包,不要用第三方修改版。 - 烧录速度: UFS 虽然快,但如果你用 USB 2.0 接口,速度会被限制在 30 MB/s 左右。想体验 UFS 的满速,必须用 USB 3.0 接口。
- 分区表差异: UFS 的分区表是 LUN 级别的。在 scatter 文件里,你会看到
lun: 0、lun: 1这样的字段。每个 LUN 相当于一个独立的磁盘。烧录时,要确保每个 LUN 的地址正确。
好了,这一章的内容就这些。分区表定制、Preloader 单独烧录、NVRAM 备份、EMMC 与 UFS 差异,这些都是实战中高频用到的技巧。你把这些吃透了,SP_Flash_Tool 在你手里就不再是简单的刷机工具,而是真正的调试利器。
下一章,咱们聊聊更刺激的:如何用 SP_Flash_Tool 做量产烧录优化。到时候我会分享一些工厂量产时踩过的坑,保证让你少走弯路。