透视 SOC 内部:APU Cluster 如何驱动 DB15 的 CAN/ETH 信号输出

背景描述

  • 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 应用程序。

  1. 数据生成:应用程序(如感知算法)计算出结果(例如:"前方有障碍物,速度 50km/h")。
  2. 系统调用:应用程序通过 Linux 的网络协议栈(Socket API)或 CAN 协议栈(SocketCAN),将这些数据打包成标准的数据包(TCP/UDP 包或 CAN 帧)。
  3. 写入内存:CPU 通过指令,将这些数据包写入到系统的 DDR 内存中。
  4. 注意:此时数据还在内存里,只是一堆二进制数字。

第二步:片上互联层(CPU -> 外设控制器)

地点:CMN600AE (NoC 互联网络)

这是数据离开 CPU 核心去往外部世界的"高速公路"。

  1. 通知控制器:CPU 通过 CMN600AE 互联网络,向以太网控制器(MAC)或 CAN 控制器发送一个信号:"嘿,我在内存地址 0xXXXX 放了一个包,你把它发出去。"
  2. DMA 传输:以太网/CAN 控制器内部的 DMA(直接内存访问)引擎,通过 CMN600AE 直接去读取 DDR 内存中的数据包。
  3. 在这个过程中,数据流经了图中的 CMN600AE 模块,从左侧的 CHI 接口(连接 CPU)流向右侧的 AXI 接口(连接外设)。

第三步:硬件封装层(数字信号处理)

地点:SOC 内部的 MAC/Controller 硬核

帧封装

  • 以太网:MAC 控制器会给数据加上以太网头部(MAC 地址)和尾部(校验码),将其组装成符合 IEEE 802.3 标准的帧。
  • CAN:CAN 控制器会加上仲裁段、控制段等,组装成 CAN 帧。
  • 串行化:控制器将这些并行数据转换为串行比特流。

第四步:物理层转换(数字 -> 模拟/差分信号)

地点:板载的 PHY 芯片与 DB15 连接器

这是最关键的一步,SOC 输出的是低压数字信号(如 RGMII 或 TTL 电平),不能直接传输,必须经过板上的物理层芯片(PHY)和接口电路。

以太网信号路径

  1. SOC 输出:SOC 输出 RGMII/GMII 数字信号(TXD, TXC, TX_EN)。
  2. PHY 芯片:板子上会有以太网 PHY 芯片,它接收数字信号,将其调制为模拟差分信号。
  3. 变压器:信号经过网络变压器(用于隔离和抗干扰)。
  4. DB15 输出:最终,差分信号(TX+, TX-, RX+, RX-)被引到 DB15 连接器的特定引脚上。

CAN 信号路径

  1. SOC 输出:SOC 输出 TX/RX 数字逻辑电平。
  2. CAN 收发器:XCCP 板子上会有 CAN 收发器芯片(如 TJA1042)。它负责将逻辑电平转换为 CAN 总线标准的差分电压(CAN_H, CAN_L)。
  3. 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 指挥了整个芯片内部总线以及板载的物理芯片,共同完成了一次"发货"任务。

相关推荐
嵌入式小企鹅2 小时前
国芯抗量子MCU突破、太空算力元年开启、AI编程工具密集发布
学习·ai·边缘计算·算力·risc-v·芯片·半导体
xiaoyaohou112 小时前
032、部署优化(三):OpenVINO与ARM平台(NCNN、TNN)部署
arm开发·人工智能·openvino
路溪非溪4 小时前
抓取手机的蓝牙HCI日志并分析
linux·arm开发·驱动开发·智能手机
somi71 天前
ARM-05-Platform + DTS + GPIO子系统 + 中断 + 等待队列 + 错误处理
linux·运维·arm开发
互联科技报1 天前
好用稳定的5G网络仿真软件如何选?— 深度对比与选型指南
网络·arm开发·5g
每天进步一点点️1 天前
CMN600AE——片上总线
嵌入式硬件·soc·芯片
web守墓人1 天前
【linux】Mubuntu发布,将完整的ubuntu arm装进手机应用中
linux·arm开发·ubuntu
EnglishJun2 天前
ARM嵌入式学习(十九)--- 字符设备驱动的注册与调用流程
arm开发·学习
ai产品老杨2 天前
异构计算时代的安防底座:基于 Docker 的 X86/ARM 双模部署与 NPU 资源池化实战
arm开发·docker·容器