第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做量产。

启动顺序是这样的:

  1. BootROM读取启动模式引脚(SYSBOOT配置)
  2. 从指定设备加载TIBOOT(TI的第二阶段Bootloader)
  3. TIBOOT初始化DDR、时钟等外设
  4. TIBOOT加载U-Boot
  5. 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代码开始讲起。嗯,那才是真正的硬核内容。