1. A64芯片概览:全志A64芯片特性、应用场景、与A系列其他芯片对比
各位同学,咱们今天聊聊A64这颗芯片。说实话,我第一次拿到A64的datasheet时,第一反应是——全志终于把Cortex-A53塞进自家芯片了。这玩意儿在当年可是个分水岭。
先说说A64的基本定位。它是一颗64位四核处理器,基于ARM Cortex-A53架构。你可能会问,为什么不是A72或者A75?嗯,这里有个成本与功耗的平衡问题。A53虽然性能不如大核,但胜在省电、发热低,非常适合做消费电子产品的SoC。
1.1 核心特性
我个人习惯把A64的特性分成三块来看:计算能力、多媒体处理、接口扩展。
| 特性类别 | 具体参数 | 我的评价 |
|---|---|---|
| CPU | 4×Cortex-A53 @ 1.152GHz | 够用,别指望跑服务器负载 |
| GPU | Mali-400 MP2 @ 600MHz | 老将了,但2D加速还行 |
| 视频解码 | H.265 4K@30fps, H.264 4K@30fps | 当年这个规格很能打 |
| 显示输出 | HDMI 2.0, LVDS, eDP, MIPI DSI | 接口丰富,做平板很合适 |
| 内存支持 | DDR3/DDR3L/LPDDR3, 最大4GB | 注意LPDDR3的布线要求 |
| 存储接口 | eMMC 5.0, SD 3.0, NAND Flash | eMMC启动速度比NAND快很多 |
我在项目中遇到过一件事:有客户用A64做广告机,结果发现4K视频播放时偶尔卡顿。排查了半天,发现是DDR频率没配好。A64的内存控制器对时序很敏感,你如果偷懒用自动训练,有时候会翻车。
1.2 应用场景
A64这颗芯片,说白了就是为「大屏交互」设计的。我见过它出现在这些地方:
- 平板电脑:10寸左右,Android系统,这是A64的主战场
- 智能音箱:带屏幕那种,比如带屏智能音箱
- 广告机/数字标牌:1080P或4K内容循环播放
- 车载后装:中控娱乐系统,注意温度范围
- POS机/收银机:双屏异显场景很常见
我的小建议:如果你做的是电池供电的产品,记得把CPU频率调到1GHz以下。A64在1.152GHz满载时,功耗大概能到2.5W左右。散热没做好,外壳会烫手。
1.3 与A系列其他芯片对比
全志的A系列芯片,从A10、A13、A20、A31、A33一直到A64,我基本都摸过。你想想看,A10是单核Cortex-A8,发热大得能煎鸡蛋。A64算是A系列里比较成熟的一代。
我整理了一个对比表,方便你理解定位差异:
| 芯片型号 | CPU架构 | 制程 | 最大分辨率 | 我的评价 |
|---|---|---|---|---|
| A33 | 4×Cortex-A7 | 28nm | 1080P | 省电,但性能偏弱 |
| A64 | 4×Cortex-A53 | 40nm | 4K@30fps | 均衡,性价比之选 |
| A83T | 8×Cortex-A7 | 28nm | 2K | 核心多但单核弱 |
| H6 | 4×Cortex-A53 | 28nm | 4K@60fps | A64的升级版,支持HDMI 2.0a |
为什么A64在2024年还有人用?说白了,就是便宜、稳定、资料多。你如果去翻全志的论坛,A64的BSP和补丁是最全的。我曾经帮一个客户从A33迁移到A64,改bootloader花了三天,但后续开发顺畅很多。
注意:A64的40nm制程是个双刃剑。静态功耗比28nm芯片高,待机时电流偏大。如果你做电池产品,记得加深度休眠策略。我曾经有个项目,待机电流多了20mA,查了两天才发现是DRAM没进自刷新模式。
1.4 启动流程初探
既然咱们是Bootloader课程,得提前聊聊A64的启动方式。A64上电后,首先执行的是BROM(Boot ROM)里的代码。这段代码固化在芯片内部,你改不了。
BROM会按顺序尝试启动介质:
- SD卡(优先检测)
- eMMC(Boot分区)
- NAND Flash
- SPI NOR Flash(部分版本支持)
BROM加载的第一段代码叫SPL(Secondary Program Loader),大小限制在32KB以内。嗯,你没看错,就32KB。你要在这32KB里完成时钟初始化、DRAM初始化、加载U-Boot到内存。空间非常紧张,我习惯用汇编写SPL,C语言编译出来体积太大。
// A64 BROM启动流程伪代码
void boot_rom_main() {
// 1. 初始化最基本的硬件(PLL、时钟、GPIO)
low_level_init();
// 2. 尝试从SD卡读取SPL
if (sd_card_detect()) {
spl = load_from_sd(0x0000, 32 * 1024);
if (spl_valid(spl)) {
jump_to_spl(spl);
}
}
// 3. 如果SD卡失败,尝试eMMC
if (emmc_detect()) {
spl = load_from_emmc_boot_partition();
if (spl_valid(spl)) {
jump_to_spl(spl);
}
}
// 4. 最后尝试NAND
// ...
// 5. 所有介质都失败,进入FEL模式(USB下载)
enter_fel_mode();
}
关键点:A64的BROM支持FEL模式。如果你把启动介质搞坏了,按住板子上的FEL键再上电,芯片就会进入USB下载模式。这时候你可以用sunxi-fel工具直接往DRAM里写程序。我调试bootloader时经常用这招,比反复烧写eMMC快多了。
好了,这一章先给你搭个框架。A64的整体轮廓你应该心里有数了。下一章咱们深入BROM,看看那32KB的SPL到底该怎么写。到时候我会拿一个实际项目里的SPL代码来拆解,保证干货满满。