1. 课程导入与平台全景

在工业控制领域,传统PLC擅长逻辑联锁与高可靠I/O,但在需要复杂协议转换、边缘计算、人机界面、数据上云与远程运维的场景中,单纯依靠PLC往往力不从心。TI Sitara系列处理器正是为这类“控制+计算+通信”融合需求而设计的工业级ARM平台。它把实时控制、Linux操作系统、工业网络接口和图形显示能力集成在一颗芯片上,使开发者能够用一套软硬件架构覆盖从现场设备到云端的数据链路。

本课程以TI Sitara AM335x/AM62x等典型工业SoC为硬件基础,以Linux实时内核与工业协议栈为软件基础,围绕“平台认知—环境搭建—驱动开发—实时优化—协议集成—系统部署”的主线展开。第1章不急于写代码,而是先建立平台全景:这颗芯片里有什么、板子上有什么、Linux里跑什么、开发流程怎么走。只有把对象和路径看清楚,后续的寄存器操作、设备树修改和实时补丁才有落脚点。

核心定位:工业边缘控制器,而非通用开发板

TI Sitara在工业场景中的定位可以概括为“边缘控制节点”:向下通过工业现场总线或实时以太网连接传感器、伺服驱动器和远程I/O;向上通过以太网、4G/5G或Wi-Fi连接SCADA、MES或云平台;在本地则运行Linux,承担协议转换、数据预处理、逻辑控制和HMI显示。与通用ARM开发板不同,工业Sitara平台强调宽温、长期供货、ECC内存、看门狗、实时以太网(如EtherCAT、PROFINET、EtherNet/IP)以及功能安全相关设计。

以AM335x为例,其内部包含ARM Cortex-A8应用核、可编程实时单元(PRU)、双千兆以太网MAC、CAN控制器、多路UART/SPI/I2C和LCD控制器。PRU是Sitara区别于普通ARM芯片的关键:它是一颗独立于主核的实时协处理器,可运行确定性代码,用于实现EtherCAT从站、编码器采集、PWM生成等对时序敏感的任务。主核跑Linux负责管理、通信和显示,PRU负责硬实时,两者通过共享内存和中断协同。这种“主核+PRU”的异构结构,是理解后续实时方案的基础。

TI Sitara 工业Linux控制平台全景 主核Linux + PRU硬实时 · 现场总线到云端的边缘控制节点 现场设备层 传感器 / 编码器 伺服驱动器 远程I/O模块 HMI触摸屏 安全继电器 EtherCAT / PROFINET / CAN TI Sitara SoC(AM335x / AM62x) ARM Cortex-A 主核 运行 Linux 系统 MMU / Cache / DDR控制器 中断控制器 / 定时器 / DMA 显示子系统 / 触摸接口 PRU 可编程实时单元 独立于主核的硬实时协处理器 EtherCAT从站协议栈 编码器/PWM/脉冲采集 共享内存 + 中断协同 片上工业外设 双千兆以太网 CAN / UART SPI / I2C / GPIO ADC / PWM Linux 软件栈 U-Boot / 内核 设备树 / 驱动 实时补丁 PREEMPT_RT 工业协议栈 Modbus / OPC UA 应用与云端 SCADA / MES 云平台 / 数据库 远程运维 / OTA 数据可视化 MQTT / HTTPS OPC UA over TCP 现场总线 以太网 协同 开发流程:硬件选型 → SDK环境搭建 → U-Boot/内核移植 → 设备树与驱动 → 实时优化 → 协议集成 → 应用开发 → 部署运维

典型应用场景:从运动控制到边缘网关

Sitara工业平台的应用大致可分为四类。第一类是运动控制与实时I/O:利用PRU实现EtherCAT从站或编码器接口,主核运行Linux完成轨迹规划与HMI,典型如包装机械、数控机床和机器人关节控制器。第二类是工业网关与协议转换:设备同时具备双网口和CAN,可在Modbus RTU、Modbus TCP、PROFINET和OPC UA之间做数据映射,把老旧串口设备接入现代SCADA。第三类是边缘计算与数据采集:在本地对振动、温度、电流信号做FFT或阈值判断,只把特征值和报警上传云端,降低带宽和延迟。第四类是HMI与显示终端:利用LCD控制器和触摸接口,运行Qt或LVGL界面,同时通过PRU保证按键响应和报警输出的确定性。

这些场景的共同点是:都需要Linux的丰富生态,又都不能容忍Linux在硬实时任务上的抖动。因此,理解“哪些任务放主核、哪些任务放PRU”是平台选型和架构设计的第一道分水岭。

软硬件组成:一张板子上的完整系统

硬件层面,一个典型的Sitara工业控制板包括:核心板(SoC + DDR3/DDR4 + eMMC + PMIC)、底板(双千兆PHY、CAN收发器、RS-485、数字输入输出隔离、LCD接口、SD卡和调试串口)。以AM335x为例,DDR3容量常见为256MB或512MB,eMMC为4GB,PMIC采用TPS65910。调试串口默认115200-8-N-1,U-Boot和内核日志都从这里输出,是开发阶段最重要的观察窗口。

软件层面,TI提供Processor SDK(Linux)作为基础。它包含U-Boot、Linux内核、设备树、根文件系统、交叉编译工具链和PRU固件开发包。开发者通常先在Ubuntu主机上安装SDK,用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-编译内核,再通过TFTP和NFS启动目标板,最后固化到eMMC。设备树(.dts)是Sitara Linux开发的核心配置方式:引脚复用、外设使能、时钟频率、中断号都在设备树中描述,驱动通过compatible字符串匹配。修改设备树后重新编译dtb并重启,即可观察外设是否枚举成功。

开发阶段建议保留串口调试和网络启动两条通道:串口用于看U-Boot和内核早期日志,网络用于快速替换内核和文件系统,避免反复烧写eMMC。

整体开发流程:从裸板到可部署系统

一个完整的Sitara工业Linux项目通常按以下顺序推进,但实际项目中会反复迭代:

  1. 需求与选型:确定实时性等级(周期抖动要求)、协议类型、接口数量和温度等级,据此选择AM335x、AM62x或AM64x。若需要EtherCAT从站且周期小于1ms,优先考虑带PRU的型号。
  2. 环境搭建:安装Processor SDK,配置交叉编译工具链,准备TFTP/NFS服务器,连接串口和网线,确认板子能进入U-Boot命令行。
  3. 启动链移植:根据板级DDR和PMIC参数修改U-Boot,配置启动参数bootargs,确保内核能从网络或eMMC启动并挂载根文件系统。
  4. 设备树与驱动:按原理图配置pinmux,使能CAN、SPI、I2C等外设,编写或适配自定义驱动,通过/sys、/dev和dmesg验证。
  5. 实时优化:打PREEMPT_RT补丁或使用TI RT内核,调整CPU隔离、中断亲和性和优先级,用cyclictest测量最大延迟。若仍不满足,把硬实时任务迁移到PRU。
  6. 协议与应用集成:在Linux侧集成Modbus、OPC UA或EtherCAT主站,在PRU侧实现从站或高速采集,完成数据映射和HMI开发。
  7. 部署与运维:固化镜像到eMMC,配置看门狗和A/B分区升级,接入远程运维通道,进行长时间老化测试。

以cyclictest为例,在AM335x上运行cyclictest -m -p 80 -n -i 1000 -l 100000,可得到1ms周期下的延迟分布。未优化内核的最大延迟可能在数百微秒甚至毫秒级,打上PREEMPT_RT并隔离CPU后,典型最大延迟可降到几十微秒。这个数据是判断是否需要PRU介入的直接依据。需要注意的是,具体数值随内核配置、负载和板级设计变化,应以实际测量为准。

平台全景的核心判断链:应用需要多快?→ Linux能否满足?→ 不能则用PRU → PRU代码如何与Linux交换数据?→ 共享内存+中断。这条链贯穿后续所有章节。