2. T507硬件平台解析

全志T507是一颗面向车载中控、工业HMI、智能终端等场景的高集成度SoC。做BSP开发,第一步不是急着改驱动,而是把“芯片里有什么、它们怎么连、地址怎么排、引脚怎么复用”这四件事弄清楚。本节从CPU/GPU/VPU/NPU四类计算单元出发,串联内存映射、外设接口、典型开发板资源与引脚复用,建立T507平台的硬件全景认知。

一、四类计算单元:各司其职的异构架构

T507内部并非单一CPU,而是由四类计算单元协同工作,各自承担不同任务:

  • CPU(ARM Cortex-A53 ×4):运行Linux内核、文件系统与应用程序,是BSP开发的主战场。四核A53主频约1.5GHz,支持ARMv8-A 64位指令集,负责调度、中断处理、驱动逻辑与外设控制。
  • GPU(Mali-G31 MP2):负责2D/3D图形渲染,支撑Qt、Wayland、OpenGL ES等图形栈。BSP中需关注GPU驱动(Mali内核驱动+用户态库)与显示子系统的配合。
  • VPU(视频编解码单元):独立硬件编解码模块,支持H.264/H.265等格式的编解码,常用于摄像头预览、视频播放、多路视频输入。它通过DMA与内存交互,不占用CPU算力。
  • NPU(神经网络加速单元):部分T507型号集成NPU,用于轻量级AI推理,如人脸检测、目标识别。BSP需加载NPU驱动并提供推理运行时接口。
CPU负责“通用逻辑”,GPU负责“画”,VPU负责“编解码”,NPU负责“推理”。四者通过内部总线与内存控制器连接,BSP开发要明确每个单元对应的驱动节点与时钟、电源域。
T507 四类计算单元与内存/外设连接关系 CPU Cortex-A53 ×4 Linux / 驱动 / 应用 GPU Mali-G31 MP2 2D/3D 渲染 VPU H.264 / H.265 视频编解码 NPU AI 推理加速 人脸 / 目标检测 内部互联总线(AXI / AHB) DDR 控制器 DDR3 / DDR4 / LPDDR4 统一内存映射 外设接口 UART · I2C · SPI · PWM · GPIO · USB · Ethernet · MIPI-CSI/DSI · SDIO 通过寄存器基址访问,受时钟与复位控制

二、内存映射:BSP开发的“地址地图”

T507采用统一内存映射架构,CPU、GPU、VPU、NPU共享同一片DDR物理内存,但各自通过不同的地址窗口访问。BSP开发中最常接触的是三类地址:

  • DDR物理地址:如0x40000000起始的DRAM空间,内核、根文件系统、CMA预留区都从这里划分。
  • 外设寄存器基址:如UART0基址、I2C控制器基址,驱动通过ioremap映射后读写。
  • 预留内存区:如VPU编解码缓冲、NPU模型内存、显示framebuffer,需在设备树中通过reserved-memory声明,避免被内核通用分配器占用。

设备树中的memory节点与reserved-memory节点是内存映射的“配置入口”。例如:

memory@40000000 {
    device_type = "memory";
    reg = <0x0 0x40000000 0x0 0x80000000>; /* 2GB DDR */
};

reserved-memory {
    #address-cells = <2>;
    #size-cells = <2>;
    ranges;

    vpu_buf: vpu_buffer@4a000000 {
        reg = <0x0 0x4a000000 0x0 0x02000000>;
        no-map;
    };
};
误区:把VPU/NPU缓冲直接交给通用内存分配器,会导致编解码或推理时出现地址不连续、DMA失败。正确做法是在设备树中预留连续物理内存,并在驱动中通过dma_alloc_coherent或预留区获取。

三、外设接口与典型开发板资源

T507的外设接口丰富,典型开发板通常引出以下资源。BSP开发需要对照原理图确认每个接口的控制器编号、引脚组和电平标准:

接口类型 典型用途 BSP关注点
UART调试串口、外接模块波特率、引脚复用、console配置
I2C触摸屏、传感器、PMIC总线编号、从机地址、上拉电阻
SPIFlash、显示屏、无线模块片选、时钟极性、DMA模式
PWM背光调节、电机控制周期、占空比、引脚复用
GPIO按键、复位、使能信号方向、上下拉、中断触发方式
USBHost/OTG、摄像头PHY配置、供电控制、模式切换
Ethernet有线网络PHY地址、RMII/RGMII模式
MIPI-CSI/DSI摄像头输入、显示输出Lane数、时钟频率、时序参数
SDIOeMMC、SD卡、WiFi总线宽度、时钟、电源域

四、引脚复用:一个引脚多种身份

T507的引脚大多支持多种功能复用(PinMux)。同一个物理引脚,可能既是GPIO,又是UART_TX,还是PWM输出。BSP开发中,引脚复用通过设备树的pinctrl子系统配置。典型写法如下:

&pio {
    uart0_pins: uart0-pins {
        pins = "PB0", "PB1";
        function = "uart0";
        bias-pull-up;
    };
};

&uart0 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart0_pins>;
    status = "okay";
};

引脚复用的核心逻辑是:先确定外设控制器需要哪些引脚,再在pinctrl节点中声明功能、电平和驱动能力,最后在设备树中把pinctrl句柄挂到对应控制器上。若复用冲突,内核启动日志会出现“pin already requested”或外设probe失败。

实操建议:拿到开发板后,先导出当前设备树反编译结果(dtc -I dtb -O dts -o board.dts board.dtb),对照原理图逐项核对pinctrl配置,这是排查“外设不工作”最快的方法。

五、案例与复盘:从“串口无输出”看硬件平台理解

某项目调试时,T507开发板串口无任何启动日志。排查过程如下:

  1. 确认串口线连接的是UART0,而非其他UART。
  2. 检查设备树中UART0的status是否为“okay”。
  3. 检查pinctrl是否把PB0/PB1复用为uart0,而非被GPIO占用。
  4. 检查时钟与复位是否使能,确认波特率与终端一致。
  5. 最终发现是pinctrl中function写成了“gpio”,导致TX引脚未切换到UART功能。

这个案例说明:T507 BSP开发中,硬件平台解析不是“看一遍文档”,而是要把计算单元、内存映射、外设接口和引脚复用四者串成一条链。任何一个环节配置错误,都会表现为“驱动加载失败”或“外设无响应”。

复盘要点:遇到外设异常,按“控制器使能 → 时钟/复位 → 引脚复用 → 内存/DMA → 中断”的顺序逐层排查,比盲目改驱动更高效。

掌握T507的硬件平台结构后,后续的启动流程、设备树编写、驱动移植和系统裁剪才有稳固的落脚点。CPU/GPU/VPU/NPU决定了能力边界,内存映射决定了资源分配,外设接口与引脚复用决定了板级适配的成败。