
背景描述
- XPU-SoC就是apu,也叫做cpu,apu更强调了application应用层的业务
- 通过sudo minicom -D /dev/ttyUSB2 -b 921600,可以进入apu的串口,进而能观察到串口的日志输出
- 实际上minicom进入的是APU核心群(也就是五个apu cluster),APU核心群共同构成了芯片的计算大脑
- 具体而言,minicom进入的是运行在SoC上的linux操作系统的shell层
- linux操作系统的内核同时管理着所有可用的CPU核心(也就是cluster 0/1/2/3)
- minicom进入apu后,看到的日志(如xminer/xconf)是运行在操作系统上的进程,操作系统调度器会自动决定将这些进程放在哪个Cluster的哪个核心上运行;
例如:xconf的某个线程可能在Cluster0上跑1ms,下一秒可能调度到Cluster1上运行; - 串口的物理连接:串口通常连接到芯片的UART控制器上(SBSX)
我不理解的问题
这些apu日志打印的进程内容,是如何通过板子上的DB15接口变成CAN/Eth信号发出去的呢?
逻辑梳理
第一步:软件层(应用进程 -> 内核驱动)
地点:APU Cluster (CPU核心)
日志中打印的 [xminer]是运行在 APU Cluster(比如 Cluster 0 或 1)上的 Linux 应用程序。
- 数据生成:应用程序(如感知算法)计算出结果(例如:"前方有障碍物,速度 50km/h")。
- 系统调用:应用程序通过 Linux 的网络协议栈(Socket API)或 CAN 协议栈(SocketCAN),将这些数据打包成标准的数据包(TCP/UDP 包或 CAN 帧)。
- 写入内存:CPU 通过指令,将这些数据包写入到系统的 DDR 内存中。
- 注意:此时数据还在内存里,只是一堆二进制数字。
第二步:片上互联层(CPU -> 外设控制器)
地点:CMN600AE (NoC 互联网络)
这是数据离开 CPU 核心去往外部世界的"高速公路"。
- 通知控制器:CPU 通过 CMN600AE 互联网络,向以太网控制器(MAC)或 CAN 控制器发送一个信号:"嘿,我在内存地址 0xXXXX 放了一个包,你把它发出去。"
- DMA 传输:以太网/CAN 控制器内部的 DMA(直接内存访问)引擎,通过 CMN600AE 直接去读取 DDR 内存中的数据包。
- 在这个过程中,数据流经了图中的 CMN600AE 模块,从左侧的 CHI 接口(连接 CPU)流向右侧的 AXI 接口(连接外设)。
第三步:硬件封装层(数字信号处理)
地点:SOC 内部的 MAC/Controller 硬核
帧封装:
- 以太网:MAC 控制器会给数据加上以太网头部(MAC 地址)和尾部(校验码),将其组装成符合 IEEE 802.3 标准的帧。
- CAN:CAN 控制器会加上仲裁段、控制段等,组装成 CAN 帧。
- 串行化:控制器将这些并行数据转换为串行比特流。
第四步:物理层转换(数字 -> 模拟/差分信号)
地点:板载的 PHY 芯片与 DB15 连接器
这是最关键的一步,SOC 输出的是低压数字信号(如 RGMII 或 TTL 电平),不能直接传输,必须经过板上的物理层芯片(PHY)和接口电路。
以太网信号路径
- SOC 输出:SOC 输出 RGMII/GMII 数字信号(TXD, TXC, TX_EN)。
- PHY 芯片:板子上会有以太网 PHY 芯片,它接收数字信号,将其调制为模拟差分信号。
- 变压器:信号经过网络变压器(用于隔离和抗干扰)。
- DB15 输出:最终,差分信号(TX+, TX-, RX+, RX-)被引到 DB15 连接器的特定引脚上。
CAN 信号路径
- SOC 输出:SOC 输出 TX/RX 数字逻辑电平。
- CAN 收发器:XCCP 板子上会有 CAN 收发器芯片(如 TJA1042)。它负责将逻辑电平转换为 CAN 总线标准的差分电压(CAN_H, CAN_L)。
- DB15 输出:CAN_H 和 CAN_L 线路被连接到 DB15 连接器的对应引脚。
总结
信号流转全景图
| 阶段 | 核心组件 | 物理形式 | 关键动作 |
|---|---|---|---|
| 软件层 | APU Cluster | 二进制数据 | xminer 进程完成算法计算,通过 Socket 下发指令。 |
| 互联层 | CMN600AE | 片上总线信号 | 数据通过 CHI 接口离开 CPU,由 DMA 搬运至外设。 |
| 封装层 | MAC/CAN Controller | 数字逻辑电平 | 完成帧头的添加(如 MAC 地址、CAN 仲裁位等)。 |
| 物理层 | PHY/Transceiver | 差分电压 | 将逻辑 0/1 转换为抗干扰的差分模拟信号。 |
| 物理出口 | DB15 接口 | 电缆连接 | 最终引脚输出,对接外部车辆总线或记录仪。 |
所以
通过串口看到日志时,那是 CPU 在"自言自语";
而当数据通过 DB15 输出时,是 CPU 指挥了整个芯片内部总线以及板载的物理芯片,共同完成了一次"发货"任务。