我现在在使用一块PCIe Gen3 x16的FPGA板卡与Orin Developer Kit相连,但Orin无法识别我的设备,我检查了各引脚的输出电压,发现只有3.3V输出,没有12V输出

Jetson 模组
[√] Jetson AGX Orin

Jetson 软件
[√] JetPack 5.1.3

问题描述
我现在在使用一块PCIe Gen3 x16的FPGA板卡与Orin Developer Kit相连,但Orin无法识别我的设备,我检查了各引脚的输出电压,发现只有3.3V输出,没有12V输出,我在以往的帖子中看到在Jetpack 5.0.2中已经修正了这个问题,但是我的Jetpack版本为5.1.3,仍然存在这个问题,我不知道如何去解决。同时我作为Linux和Jetson新手,也不敢对内核驱动进行修改,希望能够得到解答

错误码
把这里替换为错误码(无需其他信息)

错误日志
dmesg.txt (70.2 KB)
这是我的dmesg信息,希望有用


这是我的版本信息

你好,

  • 确认 FPGA 板卡在其他主板(如 PC)上能被正常识别,排除板卡本身问题。
  • 检查 PCIe 槽供电针脚,确认 12V 线缆和接口无损坏

设备树调整,举例

regulator@105 { // p3737_vdd_3v3_pcie
    ...
    // 原有配置可能有 "regulator-boot-on"
    // 建议移除该属性
    // 并确保控制引脚为正确的GPIO
    regulator-boot-on;
    gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(H, 4) GPIO_ACTIVE_HIGH>;
    ...
};
regulator@114 { // p3737_vdd_12v_pcie
    ...
    // 同样建议移除 "regulator-boot-on"
    // 并检查控制引脚
    regulator-boot-on;
    ...
};

  • 刷写后,使用万用表测量 PCIe 槽 12V 是否上电。
  • lspci 命令确认 FPGA 是否被识别。
  • 进一步检查设备树 regulator 节点和 GPIO 配置是否与硬件实际一致。

请问您可以提供一个更加详细的重新刷写设备树的流程吗?我之前没搞过Linux以及Jetson开发。此外,我应该对之前的内核做备份吗?备份方法及恢复方法是什么?

参考下面这个流程。

一、设备树(DTB)重新刷写详细流程

1. 准备工作

  • 准备一台Ubuntu主机(建议20.04/22.04)。
  • 安装好对应JetPack版本的BSP包(Linux_for_Tegra),可通过SDK Manager自动下载或手动下载解压。
  • 获取或修改好你需要刷写的设备树dtb文件(如tegra234-p3701-0000-p3737-0000.dtb)。

2. 将设备置于Recovery模式

  1. 断电,连接好Type-C数据线(开发板RECOVERY口)。
  2. 按住RECOVERY键,短按RESET键后松开RECOVERY键。
  3. 在主机上运行lsusb,出现NVIDIA Corp.相关设备(如0955:7023)即为成功进入Recovery模式。

3. 替换设备树文件

  • 将你的dtb文件拷贝到Linux_for_Tegra/kernel/dtb/目录下,覆盖原有同名dtb。
cp <your_new>.dtb Linux_for_Tegra/kernel/dtb/

4. 刷写设备树(不重刷系统)

  • 只刷写设备树,无需重装系统(不会丢失数据):
cd Linux_for_Tegra
sudo ./flash.sh -r -k kernel-dtb jetson-agx-orin-devkit mmcblk0p1
  • -r 表示保留原有rootfs,不重刷系统。
  • -k kernel-dtb 表示只刷写dtb分区。
  • 刷写完成后,设备会自动重启,新的设备树生效。

官方文档 - Flashing Support — NVIDIA Jetson Linux Developer Guide

我按照您给出的方案进行了dtb文件的反编译、修改与编译,并进行了设备树的重新刷写,发现系统并没有自动重启,命令行窗口报错如msg.txt文件所示,我改写的dts文件如dts.txt所示,具体我做的修改如下:
将regulator@105和regulator@114的regulator-boot-on删除了,并将regulator@105的gpio改为了gpio = <0x14 0x3c 0x00>;并将pcie_ep@141a0000的nvidia,refclk-select-gpios字段修改为了gpios = <0x14 0x7c 0x00>;请您帮我看一下是哪里出了问题?
msg.txt (19.6 KB)

每个回复只能贴一个文件,我把我的dts.txt文件放到这个回复里面
dts.txt (552.5 KB)

应该是GPIO配置格式错误引起,尝试一下恢复预定义宏并验证硬件连接。

使用NVIDIA提供的宏定义

// 电源控制GPIO(regulator@105)
gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(H, 4) GPIO_ACTIVE_HIGH>;

// PCIe参考时钟选择GPIO
nvidia,refclk-select-gpios = <&tegra_aon_gpio TEGRA234_AON_GPIO(AA, 5) GPIO_ACTIVE_HIGH>;

设备树节点依赖

&tegra_main_gpio {
    status = "okay";
};

&tegra_aon_gpio {
    status = "okay";
};

再重新编译设备树(示例)

sudo ./dtc -I dts -O dtb -o tegra234-p3701-0000-p3737-0000.dtb tegra234-p3701-0000-p3737-0000.dts

刷设备树

sudo ./flash.sh -r -k kernel-dtb jetson-agx-orin-devkit mmcblk0p1

另外,你是说每个回复里只能加一个附件吗?(我们应该是允许上传3个附件)

谢谢您的回复,我按照您的方法重新写了dts文件,将regulator@105中的gpio字段改成了<&tegra_main_gpio TEGRA234_MAIN_GPIO(H, 4) GPIO_ACTIVE_HIGH>;将pcie_ep@141a0000中的nvidia,refclk-select-gpios字段改成了<&tegra_aon_gpio TEGRA234_AON_GPIO(AA, 5) GPIO_ACTIVE_HIGH>;并在dts文件中写了
&tegra_main_gpio {
status = “okay”;
};

&tegra_aon_gpio {
status = “okay”;
};
具体的dts文件如下,但是报错信息为
image
认为我这一句中有语法错误,这一句就是<&tegra_aon_gpio TEGRA234_AON_GPIO(AA, 5) GPIO_ACTIVE_HIGH>;我用cat命令检查了也没有发现特殊字符,是我哪里写错了吗?
dts(1).txt (552.8 KB)

要包含 #define TEGRA234_AON_GPIO(AA, 5) 69 宏定义。

在dts 文件中最上面包含文件

#include <dt-bindings/gpio/tegra234-gpio.h>
#include <dt-bindings/gpio/gpio.h>

再重新执行。

非常抱歉我仍然没有解决我的问题,我现在的dts文件如下所示,在执行dtc编译命令的时候跟我说第三行有语法错误,是不是我下载的Jetpack包没有包含这两个库?我只解压了Linux_for_Tegra文件夹,我是否还需要解压其他文件夹?同时,我还尝试了SOLUTION/TUTORIAL: Jetson ORIN Enabling PCIE power - Jetson & Embedded Systems / Jetson AGX Orin - NVIDIA Developer Forums这个帖子中的dtb文件,在烧录进板子后仍然没有自动重启,随后我又测试了Jetpack包中原有的dtb文件,发现也没有自动重启,输出信息如下msg.txt所示,在有的帖子中我看到可能跟显示器连接有关,我的显示器连接是DP转HDMI,不知是否有影响

同时,我的文本文件依此放上来吧,因为显示
image

dts.txt (552.9 KB)

msg信息如下
msg(1).txt (19.6 KB)