AGX Xavier载体板硬件规格书:PCIe/CSI/40-pin避坑指南

发布时间:2026/11/3 20:56:07
AGX Xavier载体板硬件规格书:PCIe/CSI/40-pin避坑指南 简介面向机器人控制器与人工智能应用开发者的 Jetson AGX Xavier 官方指导手册重点围绕开发者套件载体板规格与软硬件开发环境展开适合需要快速上手嵌入式 AI 项目、核对接口设计或进行硬件扩展的中高级读者。压缩包共 1 个 PDF 文件约 1.2MB内容为 SP-09778-001_v2.0 版载体板规格说明便于随查随用。手册涵盖 JetPack、DeepStream SDK 以及 CUDA、cuDNN、TensorRT 等软件栈并详细说明 USB/HDMI_DP、UFS/Micro SD、eSATA/USB Combo、M.2 Key E/Key M、摄像头、音频、40-pin 扩展与自动化排针、电源分配等硬件接口的版本更新和设计要点可帮助读者理解信号连接、供电与模块兼容性。已有 3540 人学习下载适合作为硬件调试、接口确认和 AI 应用部署的案头参考。1. 准备操作电烙铁改板之前先把这份载体板规格书读完去年帮一个做移动机器人控制器的团队排查一台算力盒子现象很怪机器静置时一切正常只要四路 GMSL 相机同时出流、再插上一张 PCIe 采集卡整机就会随机重启。软件日志翻了两天没头绪最后把 9–20V 输入、5V 主轨、PCIe 12V 升压这三条电源轨的电流分配对着规格书里的表算了一遍才发现是接口供电流预算超了。这类问题代码里永远查不出来。这份 SP-09778-001_v2.02020 年 1 月修订就是 Jetson AGX Xavier 开发套件载体板的官方硬件规格书699-pin 板对板连接器的引脚定义、PCIe x16 的通道分配、120-pin 相机头的 CSI 通道预算、40-pin 扩展头的复用能力、M.2 Key E/Key M 的走线与信号定义以及从 DC Jack 到 5V/3.3V/1.8V 各条电源轨的分配表全部在里面。软件侧它配合 JetPack、DeepStream 以及 CUDA、cuDNN、TensorRT 那一整套栈使用硬件侧的边界必须到这里查。适合正在做机器人控制器、边缘 AI 推理盒子、多相机视觉方案需要自己画底板或接第三方的从业者。2. 699-pin 连接器到 40-pin 排针接口映射与选型2.1 先把板上的“出口”盘一遍拿到板子第一件事不是写代码是把所有对外连接器列成一张表搞清楚每个口挂在哪个控制器、跑什么协议、能不能自己重配。规格书第 1.2 节把载体板特性列了一遍我按实际选型习惯重新归了一次类连接器 / 位号电气规格典型用途是否可软件重配699-pin 板对板连接器11×65 阵列模块与底板全部信号否硬件定死USB 2.0 Micro BJ501USB 2.0刷机、串口调试否USB 3.1 Type-CJ512 / J513USB 3.1 DP 交替模式外设、显示输出部分RJ4510/100/1000BASE-TRGMII有线网络否HDMI Type AHDMI主显示否PCIe x16 插槽实际使用 lower x8采集卡、加速卡是设备树UFS Micro SD 组合座UFS / SD系统盘、数据盘是eSATA USB 3.1 Gen1 组合口eSATA Gen3桥片 PCIe 侧为 Gen2高速存储否M.2 Key EPCIe x1 USB 2.0 I2S/UART/I2C无线网卡、AI 加速模块是M.2 Key MPCIe x4NVMe SSD是120-pin 相机扩展头CSI 6×2 或 8×4D-PHY / C-PHY多路相机是pinmux40-pin 扩展头2×20I2C / SPI / UART / I2S / CAN / DMIC传感器、MCU 通信是pinmux4-pin 风扇座J95V、PWM、Tach散热是JTAG 2×5调试底层调试否Automation Header工业控制信号机器人整机联动部分DC Jack9–20V 输入随附 19V 适配器整机供电否这张表的价值在于它决定了你的底板要引哪些信号出去。做机器人控制器时我一般会保留 40-pin接急停、里程计、IMU、120-pin 相机头视觉、M.2 Key M本地数据集盘和千兆网上位机通信把 HDMI 和音频面板头砍掉省面积。反过来如果方案里没有视觉需求120-pin 相机头那 60 对差分信号就是纯浪费布线层。2.2 40-pin 扩展头不是树莓派那一套很多人第一次接 40-pin 会翻车原因是把它当成树莓派 40-pin 的等价物。物理排布相似电气能力完全不同。规格书第 3.3 节明确这个头支持 I2C、SPI、UART、I2S、CAN 和 DMIC但每一路都来自模块内部不同的控制器上电默认状态并不全是“可用”。有些引脚默认是 GPIO 输入有些默认被别的外设占用必须通过 pinmux 重新分配才能变成你要的功能。更关键的是电平与驱动能力。40-pin 上的信号是模块侧的 3.3V 逻辑不是 5V 容忍。直连 5V 的传感器或继电器模块轻则不识别重则打穿引脚。常见做法是加一级电平转换或者干脆用光耦/隔离器做工业侧接口机器人和上位机共地的时候尤其需要这一层。还有一个容易忽略的点规格书里给了 40-pin 相关的底板 PCB 走线延迟表Table 3-4。做 SPI 或 I2S 这类有时序要求的接口时底板走线太长会直接导致误码。我一般把 SPI 时钟限制在 10MHz 以内先跑通再逐步往上试别一上来就拉满。2.3 I2C 使用表接线之前先查地址规格书第 4.2 节有两张 I2C 使用表一张是模块侧的一张是载体板侧的。这两张表是整个文档里被查得最多、也最容易被跳过的部分。载体板上已经挂了一批 I2C 器件电源管理、EEPROM、显示相关你外接的传感器如果地址撞了表现出来就是“设备树写对了但 probe 失败”非常难查。我的做法是新项目一开始就把这两张表抄进一份 Excel标出已被占用的地址区间然后给所有外接 I2C 器件做地址规划。下面是快速枚举现场 I2C 总线的办法先看清楚有什么再动手# 列出系统里注册的 I2C 适配器编号与名称 i2cdetect -l # 逐个扫描-y 跳过交互确认-r 用 SMBus 读方式兼容性更好 for bus in $(i2cdetect -l | awk {print $1} | sed s/i2c-//); do echo i2c-$bus i2cdetect -y -r $bus donei2cdetect -l输出的第一列就是总线号-y用于非交互环境-r走 SMBus quick/read 模式对某些只支持 SMBus 的器件比默认模式更容易探测到。扫描结果里的UU表示该地址已被内核驱动占用--是空闲出现具体十六进制数字说明有器件应答但没驱动接管。看到UU的地址就不要再去分配了那是板上已有的器件。2.4 用 jetson-io 把 40-pin 配成你要的功能不写设备树也能改 40-pin 功能官方提供的 jetson-io 工具就是干这个的。它本质上是在改设备树覆盖层DTBO生成后写进启动配置。流程如下# 以 root 运行配置工具 sudo /opt/nvidia/jetson-io/jetson-io.py进入界面后选 “Configure Jetson 40pin Header”在列表里勾选你要启用的功能组合比如同时开i2c1、spi1、uart1保存后会提示重启。工具会在/boot下生成对应的 dtbo 文件并把条目写进/boot/extlinux/extlinux.conf的OVERLAYS行。参数上要注意两点。第一同一个物理引脚只能被一个功能占用界面上互斥的选项是灰色的别硬改。第二功能启用之后还要确认内核驱动真的加载了用dmesg | grep -i 驱动名和ls /dev/设备节点双向验证光看 jetson-io 显示成功不算数。我见过有人配完没重启就去测白白怀疑了半天硬件。3. PCIe x16 与 M.2 Key E/Key M通道预算、走线延迟与枚举3.1 三条 PCIe 链路从哪来AGX Xavier 模块对外暴露的 PCIe 控制器有好几路载体板把它们分给了三个物理接口PCIe x16 插槽实际只用了 lower x8、M.2 Key Mx4、M.2 Key Ex1。这不是随便分的通道总数有限三个口不可能同时跑满。规格书第 2.4 节给的 x8 连接器定义以及第 2.7、2.8 节的 M.2 定义合起来才是一条完整的通道账。v2.0 版在这个部分有两处改动值得注意一是明确 x16 连接器同时支持 EndPoint 卡和 Root Port 卡二是把 SLVS 控制信号接进了 PCIe 的 reset、wake、clock request 这几个引脚并在图里标出了内部 3.3V 上拉。前者影响你能不能插一张自带 CPU 的智能卡后者影响低功耗唤醒行为——如果你的板子要做整机休眠唤醒这几根信号不接唤醒就会失灵而且现象是“有时能醒有时不能”属于典型的玄学问题。3.2 走线延迟表怎么用才不算白看规格书里有四张和延迟相关的表Table 2-7PCIe 卡最大走线延迟、Table 2-8SLVS 转接卡、Table 2-12M.2 Key E、Table 2-14M.2 Key MPCIe 到 Gen3。这些表给的是“允许的延迟上限”不是“推荐值”。设计底板时的正确用法是第一步确定目标速率。Gen3 是 8GT/sGen2 是 5GT/sGen1 是 2.5GT/s。速率越高允许的走线长度越短。规格书的表按最高支持速率给你如果只跑 Gen2余量会宽松不少。第二步把整条链路拆成三段底板走线、连接器、外接卡走线。规格书约束的是整条链路不是单指底板。很多人只算了自己画的那一段插上一张走线本身就偏长的第三方卡链路预算就爆了。第三步留余量。我一般按表里上限的 70% 来卡底板长度剩下 30% 留给板材批次差异和连接器。这条经验是从一次 PCIe 采集卡偶发降速的翻车里换来的重新画板之后才稳定。差分对本身还有对内等长要求这一条规格书不会逐条强调但属于常识同一对 P/N 的偏差控制在几个 mil 以内对间偏差也要收敛。板材选型上普通 FR4 跑 Gen3 是可以的但要把损耗算进去长距离建议上低损耗板材。3.3 设备树里改 PCIe 控制器通道分配最终要落到设备树。AGX Xavier 上 PCIe 控制器是按地址区分的x8 那一路通常对应141a0000x4 的 M.2 Key M 对应14180000。下面是一个覆盖节点的骨架实际标签名以你手上的内核源码为准/* x8 插槽对应的控制器改 num-lanes 和 status */ pcie141a0000 { status okay; num-lanes 8; /* 与硬件实际布线一致布了几 lane 写几 */ nvidia,disable-power-down; /* 调试期关掉省电避免枚举时被挂起 */ vdd-io-supply vdd_1v8_sys; vdd-pex-supply vdd_pex_1v8; };num-lanes必须和底板实际布线一致写了 8 但只布了 4 条链路训练会失败或降到 x1。nvidia,disable-power-down是调试期的常用开关量产时按功耗需求决定是否保留。vdd-io-supply、vdd-pex-supply这类属性名各内核版本略有差异改之前先用ls /proc/device-tree/pcie141a0000/看一眼现有节点里到底有哪些属性照着改最稳。改完设备树之后重新编译 dtb、更新启动分区、重启然后做枚举验证# 看设备有没有被枚举出来 lspci -nn # 看链路实际协商速率和宽度LnkSta 那行是关键 sudo lspci -vvv | grep -A2 LnkCap\|LnkSta # 内核侧的 PCIe 报错链路训练失败通常在这里 dmesg | grep -iE pcie|link up|link downLnkSta里的Speed和Width是判断链路健康度的第一指标。如果显示Width x1而你期望 x4问题一定在线路或配置上不在驱动上。dmesg里出现link training failed或者反复link up/link down八成是走线延迟超了或者参考时钟有问题。3.4 M.2 Key E 的三个已知坑M.2 Key E 这一路在 v2.0 的修订记录里改了最多说明早期版本确实踩过不少。改动的核心有几条WLAN disable 线上加了开漏缓冲和上拉把GPIO3_AP_WAKE_BT_M2从 61 脚挪到了 38 脚GPIO30_M2_E_ALERT_R*的上拉轨改成了 1.8VI2S3 和BT_WAKE_AP加了电平转换。这些改动翻译成人话就是这一路的信号电平混着 3.3V 和 1.8V直连很容易出问题。自己画底板时如果照抄早期版本的参考设计很可能在 WiFi 模块的唤醒和禁用逻辑上翻车表现是模块上电后能扫到但连不上或者休眠后叫不醒。这不是驱动问题是硬件握手的电平不对。查这一路的时候先用万用表量 disable 和 wake 两条线在模块未上电时的静态电平再对照规格书的图确认上拉有没有到位。4. 摄像头 CSI 与 40-pin 复用通道预算和 pinmux 落地4.1 120-pin 相机头的通道账相机扩展头是 2×60 的板对板连接器规格书给的能力是 CSI 支持 6 路 ×2 lane 或者 8 路 ×4 laneD-PHY 或 C-PHY 都行同时带相机时钟、I2C 和控制信号。这个数字看起来很宽裕但实际上 lane 总数是固定的2 lane×6 和 4 lane×8 不是随便组合——你要么走“多路低带宽”要么走“少路高带宽”。v2.0 在这里有两处变化需要特别留意一是把 3×4 lane 的配置补进了 CSI 部分二是把 C-PHY 的连接示例图从文档里拿掉了。前者是新增的可用组合后者意味着官方不再推荐照着 C-PHY 示例去画。如果方案里用的是 C-PHY 器件得自己按 D-PHY 章节的规则推一遍别指望文档里有现成图可抄。还有一个容易漏掉的细节v2.0 把相机连接器的 56、57、58、101 脚标记为“保留给数字相机供电”。这四根脚不是普通信号脚是专门给相机模组供电的。自己设计转接板时如果占用了它们后续换大功率相机模组就会没电可用。我一般在这四根脚上串一个小阻值采样电阻方便量每路相机的实际功耗出问题时有数据可查。4.2 CSI 走线容差D-PHY 那一栏要背下来规格书 Table 3-2 给的是相机模组到 CSI 接口的 PCB 走线容差而且明确标注 “D-PHY Only”。这张表是画底板时最该贴在显示器边上的一张。核心约束有三层差分对内 P/N 等长、差分对之间等长、整体长度上限。对内等长是基础一般控制在几 mil 级别。对间等长容易被忽视但对多 lane 聚合的相机来说对间偏差过大会直接导致 MIPI 包解析错误表现出来是图像上出现规律性的横纹或者随机丢帧。整体长度上限则和速率挂钩相机分辨率越高、lane 速率越快允许的长度越短。实际画板时我会把 CSI 差分对单独划一个布线区域禁止其他信号穿越尤其是开关电源的 SW 节点和时钟信号。这两类干扰源离 CSI 差分对太近图像上就会出噪点而这种噪点在实验室常温下可能看不出来装到整机上温度一上来就冒出来属于典型的血泪经验。4.3 设备树里挂一路 CSI 相机相机能不能出图硬件接对只是第一步设备树里 VI视频输入和 NVCSI 两层节点要配对写。下面是一个双相机通道的骨架重点看port-index和bus-width这两个属性/* 视频输入层声明通道数和每个通道的 endpoint */ tegra-capture-vi { num-channels 2; ports { #address-cells 1; #size-cells 0; port0 { reg 0; vi_in0: endpoint { port-index 0; /* 对应 CSI 控制器端口号 */ bus-width 4; /* lane 数必须和硬件布线一致 */ remote-endpoint csi_in0; }; }; port1 { reg 1; vi_in1: endpoint { port-index 1; bus-width 2; remote-endpoint csi_in1; }; }; }; }; /* NVCSI 层把上面的 endpoint 接到具体 CSI 端口 */ tegra-csi { ports { port0 { reg 0; csi_in0: endpoint0 { port-index 0; bus-width 4; remote-endpoint vi_in0; }; }; }; };port-index决定这路相机走哪个 CSI 控制器bus-width必须等于实际接的 lane 数两个属性错一个就是黑屏。remote-endpoint是双向引用两边必须严格对应写错一个名字内核就会在 probe 阶段报-EPROBE_DEFER或者干脆找不到 endpoint。调试时用dmesg | grep -i csi能看到 NVCSI 层的端口绑定日志比盲猜快得多。4.4 40-pin 上的复用冲突怎么排查40-pin 头上的 CAN、SPI、I2S、DMIC 共用同一批引脚。开了 CAN0 用的那两根脚就不能同时开某组 I2S。jetson-io 界面里灰色互斥选项就是这个原因。真正麻烦的是“看起来不冲突实际冲突”的情况比如某路 I2S 和某路 UART 复用到同一个物理引脚的相邻功能上界面上分开选都能选实际编译 dtbo 时才会报错。我的排查顺序是先列出所有需要的功能再查芯片的 pinmux 表确认有没有物理引脚重叠最后才去 jetson-io 里点选。点选完后一定要重启并实测每个功能别信界面。曾经有一次开完 SPI 之后 CAN 静默失效查了半天才发现是 dtbo 合并顺序的问题两个 overlay 抢了同一个引脚。5. 避坑上电、ESD、枚举与电源预算的五次翻车5.1 现象板子接好外设一上电就不亮重插又好了原因规格书开篇那条警告不是客套话——必须先接好模块和所有外设最后才接电源。带电插拔外设时浪涌电流会冲击模块侧的接口电路。解决固定上电顺序模块 → 相机/PCIe 卡/USB 外设 → 最后插 DC Jack 或 Type-C 供电。断电时反过来。这条习惯看起来简单但团队里只要有一个人图省事热插拔板子迟早出问题而且损坏是不可逆的。5.2 现象M.2 Key E 上的无线模块插上后系统能识别但连不上任何东西原因v2.0 修订记录里改动最密集的就是这一路。WLAN disable 线、BT_WAKE_AP、GPIO30_M2_E_ALERT_R*的上拉轨都有调整早期设计里这些线的静态电平是错的。解决模块断电状态下量 disable 和 wake 两条线的静态电平对照规格书确认上拉电阻和电平转换有没有到位。用早期参考设计画的板子这一步必须补测。5.3 现象PCIe x16 插槽插上采集卡lspci能看到设备但速率是 x1原因三种可能——设备树里num-lanes写成 1底板只布了部分 lane链路预算超了导致训练降级。解决先看设备树属性再看lspci -vvv里的LnkCap硬件能力和LnkSta实际协商是否一致。不一致且属性配置正确就是物理层问题回头算走线延迟。5.4 现象40-pin 上外接一个传感器一动作整机就复位原因40-pin 的供电能力有限规格书 Table 5-1 到 5-3 给的是每个接口每路电源的电流上限。传感器启动瞬间的浪涌把 3.3V 轨拉塌了。解决查表算电流外设单独供电只共地不共电源。大功率外设继电器、电机驱动必须隔离。5.5 现象相机出图有规律横纹温度越高越明显原因CSI 差分对旁边走了开关电源或时钟信号或者对内等长没控住。解决看 Table 3-2 的 D-PHY 容差重新检查走线区域把干扰源挪开必要时加地屏蔽。这类问题常温测不出来一定要在整机满载、温度稳定后复测。6. 进阶拿规格书里的两张表做一套上电自检规格书里最容易被当成附录跳过的是第 4.2 节的 I2C 使用表和第 5 章的电源分配表。这两张表单独看很枯燥合起来用却是一套很实用的板级自检基线——它们描述的是“一块正常工作的板子应该长什么样”。我在每个新板子第一次点亮时都会跑一遍下面的流程五分钟内能判断出硬件有没有明显缺陷#!/bin/bash # 板级上电自检I2C 拓扑 PCIe 链路 电源/温度基线 echo 1. I2C 总线拓扑 i2cdetect -l for bus in $(i2cdetect -l | awk {print $1} | sed s/i2c-//); do printf i2c-%s: $bus # 只输出有器件应答的地址过滤掉全空的占位 i2cdetect -y -r $bus 2/dev/null | grep -oE \b[0-9a-f]{2}\b|UU | tr \n echo done echo 2. PCIe 链路协商结果 for dev in $(lspci -D | awk {print $1}); do printf %s $dev lspci -s $dev -vvv 2/dev/null | grep -oE LnkSta:.* | head -1 done echo 3. 温度与风扇 for z in /sys/class/thermal/thermal_zone*/; do printf %s %s mC\n $(cat $z/type) $(cat $z/temp) done find /sys -name pwm1 -path *pwm-fan* 2/dev/null | while read -r p; do echo fan pwm $(cat $p) done第一步的 I2C 拓扑要和规格书里的两张使用表逐条对照表里应该出现的器件地址必须出现出现了表里没有的地址就要查是不是外设地址冲突。第二步只看LnkSta和LnkCap一比对就知道链路有没有降级。第三步的温度基线尤其重要AGX Xavier 的工作温度范围是 0–50°C但模块结温远高于此满载时如果某个 zone 异常高多半是散热器没压紧或者导热垫漏贴。参数上i2cdetect -y -r比默认模式更温和不会对某些敏感器件发错误的 quick writelspci -D用完整域名格式避免多控制器时设备号重复风扇的pwm1节点路径在不同内核版本下会变用find定位比硬编码可靠。还有一个进阶技巧把这份自检脚本的输出存成基线文件之后每次改硬件或换模块都跑一遍做 diff。差异出现的地方往往就是问题藏身的地方。规格书里那些看起来只是“参考”的表格本质上就是原厂给你的一份基线只是它没告诉你该怎么用。从那以后我每次拿到一块新底板不管多赶进度都会先把这个自检流程走一遍再开始装系统——不为别的就是因为吃过一次“软件调了三天结果是硬件 lane 少布了两条”的亏。希望帮到你。本文还有配套的精品资源点击获取