第2章:TI嵌入式平台概述
大家好,欢迎来到第二章。这一章咱们来聊聊TI的嵌入式平台。说实话,我刚接触TI芯片那会儿,也被它庞大的产品线搞得有点晕。Sitara、AM系列、Cortex-A/R/M……这些名词到底啥关系?别急,我带你捋一遍。
2.1 TI Sitara/AM系列处理器介绍
Sitara是TI的嵌入式处理器品牌,主打ARM架构。说白了,它就是TI用来对标NXP i.MX、瑞萨R-Car的产品线。AM系列是Sitara下面的一个子系列,全称是“Arm Microprocessor”。
我个人习惯把AM系列分成三类:
- 入门级:AM335x系列,单核Cortex-A8,主频最高1GHz。BeagleBone Black用的就是它。
- 中端:AM437x系列,Cortex-A9,带PRU-ICSS工业通信子系统。我在一个工业网关项目里用过,跑EtherCAT挺稳。
- 高端:AM64x/AM62x系列,双核Cortex-A53 + 单核Cortex-M4F/M0。SK-AM64开发板就是代表。
你想想看,为什么TI要搞这么多系列?其实是为了覆盖不同场景。从简单的HMI(人机界面)到复杂的工业控制器,每个系列都有它的定位。
核心要点:AM系列处理器都内置了BootROM,这是Bootloader的第一站。芯片上电后,BootROM会先执行,然后根据启动模式(比如SD卡、NAND Flash、SPI Flash)加载下一级程序。
2.2 Cortex-A/R/M内核对比
ARM内核分三个系列:A系列(应用处理器)、R系列(实时处理器)、M系列(微控制器)。很多初学者搞不清它们的区别。我当年也犯过糊涂,直到在一个项目里同时用了A8和M4,才真正理解。
| 特性 | Cortex-A | Cortex-R | Cortex-M |
|---|---|---|---|
| 典型频率 | 500MHz - 2GHz+ | 200MHz - 800MHz | 16MHz - 400MHz |
| MMU(内存管理单元) | 有 | 无(有MPU) | 无(有MPU) |
| 中断延迟 | 几十到几百个时钟周期 | 几个时钟周期 | 几个时钟周期 |
| 典型应用 | Linux、Android | 实时控制、汽车 | 传感器、电机控制 |
| Bootloader角色 | 运行U-Boot、ATF | 裸机或RTOS | 裸机或RTOS |
为什么会这样?因为设计目标不同。A系列要跑操作系统,所以需要MMU来做虚拟内存。R系列和M系列追求实时性,所以中断延迟要短。
我的经验:在AM64x上,Cortex-A53跑Linux,Cortex-M4F跑裸机实时任务。Bootloader需要同时初始化两个内核。我曾经因为M4F的启动时序没调好,导致系统间歇性死机。后来发现是A53侧的电源域没提前准备好。
2.3 典型开发板介绍
2.3.1 BeagleBone Black
BeagleBone Black(简称BBB)是TI AM335x的经典开发板。价格便宜(大概300多人民币),社区活跃。我入门嵌入式Linux时用的就是它。
核心配置:
- SoC:AM3358,单核Cortex-A8 @ 1GHz
- 内存:512MB DDR3
- 存储:4GB eMMC + MicroSD卡槽
- 接口:2个PRU(可编程实时单元)、HDMI、USB、Ethernet
BBB的启动流程是这样的:上电后BootROM检查启动引脚,默认从eMMC启动。eMMC里存的是U-Boot,U-Boot再加载Linux内核。如果你想从SD卡启动,按住板子上的“Boot”按钮再上电就行。
避坑指南:我曾经在BBB上调试U-Boot,发现SD卡启动总是失败。折腾了半天,原来是SD卡的分区表格式不对。BBB要求SD卡使用MBR分区表,不能用GPT。嗯,这个小细节坑了不少人。
2.3.2 SK-AM64
SK-AM64是TI官方推出的AM64x评估板。相比BBB,它更现代,性能更强。我去年用它做了一个边缘计算网关的原型。
核心配置:
- SoC:AM6442,双核Cortex-A53 @ 1GHz + 单核Cortex-M4F @ 400MHz
- 内存:2GB DDR4
- 存储:16GB eMMC + MicroSD卡槽
- 接口:2个千兆以太网(支持TSN)、USB 3.0、CAN-FD、PRU-ICSS
SK-AM64的启动方式更灵活。它支持从SD卡、eMMC、OSPI Flash、UART等多种方式启动。我个人习惯用SD卡做开发,eMMC做量产。
启动顺序是这样的:
- BootROM读取启动模式引脚(SYSBOOT配置)
- 从指定设备加载TIBOOT(TI的第二阶段Bootloader)
- TIBOOT初始化DDR、时钟等外设
- TIBOOT加载U-Boot
- U-Boot加载Linux内核或裸机程序
注意:AM64x的BootROM支持双核启动。你可以让A53跑Linux,M4F跑RTOS。但Bootloader需要配置好两个核的入口地址。我建议在TIBOOT阶段就把M4F的固件加载到指定内存地址,然后释放M4F的复位信号。
2.4 开发板选型建议
说了这么多,到底该选哪块板子?我根据项目经验给点建议:
- 学习入门:选BeagleBone Black。资料多,社区活跃,成本低。就算烧了也不心疼。
- 工业项目原型:选SK-AM64。双核异构、TSN、PRU-ICSS,这些特性工业场景都用得上。
- 高性能计算:考虑AM62A或AM68A系列,带AI加速器。不过这些板子价格较高,适合有预算的项目。
我个人习惯是:先拿BBB验证Bootloader的基本逻辑,再移植到SK-AM64上做性能优化。这样既省钱又高效。
小技巧:如果你手头没有开发板,也可以用QEMU模拟。TI官方提供了AM64x的QEMU模型,可以跑U-Boot和Linux。虽然不能完全替代硬件,但调试Bootloader的前期逻辑足够了。
2.5 本章小结
这一章我们聊了TI Sitara/AM系列处理器的分类,对比了Cortex-A/R/M内核的差异,还介绍了BeagleBone Black和SK-AM64两块典型开发板。说白了,选芯片和选板子都要看项目需求。别盲目追求高性能,够用就好。
下一章,我们会深入Bootloader的启动流程,从ROM代码开始讲起。嗯,那才是真正的硬核内容。