Orin Nano GPIO Not Working When Using gpioset (PG.06 / GPIO07)

Orin Nano 8GB +jetpack6.2 + 官方载板,遇到 GPIO 无法控制的问题,以下是操作及调试过程:

目标控制引脚为 gpio07,根据 Jetson 官方 pinmux 表,对应的硬件信号为 PG.06,其在 gpiochip0 中的编号为 41。

$ gpioinfo |grep PG.06
        line  41:      "PG.06"       unused  output  active-high

$ sudo gpioset gpiochip0 41=0
$ sudo gpioset gpiochip0 41=1

==引脚电平无实际变化。测量管脚始终保持固定电平,未见切换。==

我们在内核 drivers/gpio/gpio-tegra186.c 中的 tegra186_gpio_set() 函数增加了打印:

static void tegra186_gpio_set(struct gpio_chip *chip, unsigned int offset,
			      int level)
{
	struct tegra_gpio *gpio = gpiochip_get_data(chip);
	void __iomem *base;
	u32 value;

	base = tegra186_gpio_get_base(gpio, offset);
	if (WARN_ON(base == NULL))
		return;

+    printk("gpio_set: offset=%u level=%d addr = %d\n", offset, level, base + TEGRA186_GPIO_OUTPUT_VALUE);

	value = readl(base + TEGRA186_GPIO_OUTPUT_VALUE);
	if (level == 0)
		value &= ~TEGRA186_GPIO_OUTPUT_VALUE_HIGH;
	else
		value |= TEGRA186_GPIO_OUTPUT_VALUE_HIGH;

	writel(value, base + TEGRA186_GPIO_OUTPUT_VALUE);
}

从内核打印日志确认,GPIO 确实通过 writel() 访问到了对应地址,offset 也为 41:

kernel: gpio_set: offset=41 level=0 addr = 155402448
kernel: gpio_set: offset=41 level=1 addr = 155402448

ps:已经尝试过该链接中的补丁,但是无效 40hdr - SPI1 gpio padctl register bit[10] effect by gpiod tools in JP6 - #19

Hi DamonXcd,

Have you configured PG.06 as GPIO/Output/Drive 0 in pinmux spreadsheet before use?

Please try using the following command instead.

# gpioset --mode=wait `gpiofind "PG.06"`=1
# gpioset --mode=wait `gpiofind "PG.06"`=0

Hi KevinFFF,
Thanks for the explanation!
I try it and it works as expected.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.