我在orin nx进行开发,使用了jetpack5.1.2的devkit,最近在进行audio的调试工作,在进行pinmux配置时发现了 一些问题:
- 通过修改Linux_for_Tegra/bootloader/t186ref/BCT/tegra234-mb1-bct-pinmux-p3767-dp-a03.dtsi中的pinmux配置时我发现无法将SFIO bit设置上。我的pinmux配置如下(删除了默认的修改并在原来基础上进行修改):
soc_gpio41_ph7 { ///clk
nvidia,pins = "soc_gpio41_ph7";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
// nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
soc_gpio42_pi0 { //dout
nvidia,pins = "soc_gpio42_pi0";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_DISABLE>;
// nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
soc_gpio43_pi1 { //din
nvidia,pins = "soc_gpio43_pi1";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_ENABLE>;
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
// nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
soc_gpio44_pi2 { //word
nvidia,pins = "soc_gpio44_pi2";
nvidia,function = "i2s2";
nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
nvidia,tristate = <TEGRA_PIN_DISABLE>;
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
// nvidia,lpdr = <TEGRA_PIN_DISABLE>;
};
以上是配置HDR40的i2s功能,参考了Linux_for_Tegra/sources/hardware/nvidia/platform/tegra/common/kernel-dts/overlays/jetson-adafruit-uda1334a.dts
2. 进行烧录后我发现读取到的四个gpio均未设置上SFIO bit,正确的应该是0x14xx,但实际的值如下
root@zme-0020-backup-minimal:/home/zme# busybox devmem 0x02434088
0x00001045
root@zme-0020-backup-minimal:/home/zme# busybox devmem 0x02434090
0x00000005
root@zme-0020-backup-minimal:/home/zme# busybox devmem 0x02434098
0x00001055
root@zme-0020-backup-minimal:/home/zme# busybox devmem 0x024340a0
0x00001045
读取pinmux配置后
cat /sys/kernel/debug/pinctrl/2430000.pinmux/pinconf-groups > pinmux
相关引脚配置
173 (soc_gpio41_ph7):
pull=1
tristate=0
enable-input=1
open-drain=1
io-reset=1
rcv-sel=1
io-hv=1
loopback=0
schmitt=1
pull-down-strength=31
pull-up-strength=31
drive-type=0
func=i2s2
pad-power=0
174 (soc_gpio42_pi0):
pull=1
tristate=0
enable-input=0
open-drain=1
io-reset=1
rcv-sel=1
io-hv=1
loopback=0
schmitt=0
pull-down-strength=31
pull-up-strength=31
drive-type=0
func=i2s2
pad-power=0
175 (soc_gpio43_pi1):
pull=1
tristate=1
enable-input=1
open-drain=1
io-reset=1
rcv-sel=1
io-hv=1
loopback=0
schmitt=1
pull-down-strength=31
pull-up-strength=31
drive-type=0
func=i2s2
pad-power=0
176 (soc_gpio44_pi2):
pull=1
tristate=0
enable-input=1
open-drain=1
io-reset=1
rcv-sel=1
io-hv=1
loopback=0
schmitt=1
pull-down-strength=31
pull-up-strength=31
drive-type=0
func=i2s2
pad-power=0
pinmux显示func是i2s2,但是寄存器读取到的却不一样,这很奇怪。
- 如果这个时候我通过busybox进行设置后,寄存器设置正常,我也可以播放音乐。或者我通过/opt/nvidia/jetson-io/jetson-io.py设置i2s2或者Adafruit UDA1334A,i2s2的寄存器也配置正常。
通过jetson-io.py和pinmux配置有什么区别吗?为何有不同的结果?