工具/软件:
首先是我们设置东西的方式。
使用 ti-processor-sdk-linux-adas-j721e-evm11_00_00_00_08。 使用 Yocto 构建内核、烧录到 SD 卡并引导。 删除了与所有其他处理器可执行文件的软链接、我离开运行 ipc_echo_test 的 mcub1_0 除外。
有一个 J721ESOM 的 EVM 主板以及四路以太网和 GESI 扩展器电源。
我们已成功使用 R5F 处理器来访问 GESI 板上的多个引脚作为 GPIO 以进行调试和其他使用。
我们现在正在尝试控制 Linux 内核的一些 GPIO。
我已经向 k3-j721e-evm-exp-board.dtso 叠加文件添加了一些 GPIO 多路复用、如下所示。
&main_pmx0 {
/* GPIO_18 (pin PIN_PRG1_PRU0_GPO17 (Normally for GESI it is MCAN5_TX)
-> AJ21 (J13 pin 1 ) -> AJ21*/
gpio0_18_pins_default: gpio0-18-default-pins {
pinctrl-single,pins = <
J721E_IOPAD(0x4C, PIN_INPUT, 7)
>;
};
/* GPIO_19 (pin PRG1_PRU0_GPO18 (Normally for GESI it is MCAN5_RX)
-> AE21 (J13 pin 2 ) -> AE21*/
gpio0_19_pins_default: gpio0-19-default-pins {
pinctrl-single,pins = <
J721E_IOPAD(0x50, PIN_INPUT, 7)
>;
};
/* GPIO_26 (pin PIN_PRG1_PRU1_GPO5 (Normally for GESI it is MCAN6_RX)
-> AG21 (J11 pin 2) -> AG21 */
gpio0_26_pins_default: gpio0-26-default-pins {
pinctrl-single,pins = <
J721E_IOPAD(0x6C, PIN_INPUT, 7)
>;
};
/* GPIO_53 (pin PIN_PRG0_PRU0_GPO10 (Normally for GESI it is SPI3_CS2)
-> AB25 (BP2 J5 pin 6) -> AB25*/
gpio0_53_pins_default: gpio0-53-default-pins {
pinctrl-single,pins = <
J721E_IOPAD(0xD8, PIN_INPUT, 7)
>;
};
/* GPIO_80 (pin PIN_PRG0_PRU1_GPO17 (Normally for GESI it is SPI3_CLK)
-> AB25 (Motor Control pin 24) -> Y25*/
gpio0_80_pins_default: gpio0-80-default-pins {
pinctrl-single,pins = <
J721E_IOPAD(0x144, PIN_INPUT, 7)
>;
};
};
我们的 uEnv.txt 文件应用了覆盖层、如下所示:
# This uEnv.txt file can contain additional environment settings that you
# want to set in U-Boot at boot time. This can be simple variables such
# as the serverip or custom variables. The format of this file is:
# variable=value
# NOTE: This file will be evaluated after the bootcmd is run and the
# bootcmd must be set to load this file if it exists (this is the
# default on all newer U-Boot images. This also means that some
# variables such as bootdelay cannot be changed by this file since
# it is not evaluated until the bootcmd is run.
psdk_setup_file=.psdk_setup
check_psdk_setup=load mmc 1:1 ${loadaddr} ${psdk_setup_file}
# Reset to the default environment
do_psdk_setup=env default -f -a; saveenv
# If not done previously, then reset to the default environment and indicate this by writing a file
# Also update the Linux hostname based on board_name
uenvcmd=if run check_psdk_setup; then echo "Already setup."; else run do_psdk_setup; mw.b ${loadaddr} 0 1; fatwrite mmc 1:1 ${loadaddr} .psdk_setup 1; reset; fi; if test "$board_name" = "j721e-sk"; then ; setenv args_all $args_all systemd.hostname=tda4vm-sk ; fi;
# Setting the right U-Boot environment variables
dorprocboot=1
name_overlays=ti/k3-j721e-evm-gesi-exp-board.dtbo
启动后、我可以查看我们要使用的 GPIO 的引脚多路复用值。 它们似乎设置为 GPIO 0x08214007
但是、引脚#似乎是 1 关闭的(GPIO0_18 在引脚 19 上?)
cat /sys/kernel/debug/pinctrl/11c000.pinctrl-pinctrl-single/pins registered pins: 173 pin 0 (PIN0) 0:? 11c000 00040007 pinctrl-single pin 1 (PIN1) 0:? 11c004 00050004 pinctrl-single . . . pin 17 (PIN17) 0:? 11c044 00010004 pinctrl-single pin 18 (PIN18) 0:? 11c048 08054000 pinctrl-single pin 19 (PIN19) 0:? 11c04c 08214007 pinctrl-single pin 20 (PIN20) 0:? 11c050 08214007 pinctrl-single pin 21 (PIN21) 0:? 11c054 08214007 pinctrl-single pin 22 (PIN22) 0:? 11c058 00050004 pinctrl-single pin 23 (PIN23) 0:? 11c05c 00050004 pinctrl-single pin 24 (PIN24) 0:? 11c060 00050004 pinctrl-single pin 25 (PIN25) 0:? 11c064 00050004 pinctrl-single pin 26 (PIN26) 0:? 11c068 00050004 pinctrl-single pin 27 (PIN27) 0:? 11c06c 08214007 pinctrl-single pin 28 (PIN28) 0:? 11c070 00050004 pinctrl-single . . . pin 53 (PIN53) 0:? 11c0d4 08214007 pinctrl-single pin 54 (PIN54) 0:? 11c0d8 08214007 pinctrl-single pin 55 (PIN55) 0:? 11c0dc 00010004 pinctrl-single
然后、如果我尝试控制其中一个 GPIO、比如 GPIO_53、该 GPIO 通常映射到 SPI3_CS2、不会通过选择多路复用器。 我看不到它发生了变化。
GPIO 芯片如下。
gpiodetect
gpiochip0 [1-0020](16 行)
Gpiochip1 [1-0022](24 行)
Gpiochip2 [3-0020](8 行)
Gpiochip3 [5-0020](8 行)
gpiochip4 [42110000.GPIO](84 行)
gpiochip5 [600000.GPIO](128 行)
gpiochip6 [601000.GPIO](36 条线路)
Gpiochip7 [0-0048](11 行)
Gpiochip8 [0-004C](11 行)
Gpiochip9 [2-0020](8 行)
芯片 5 看起来与器件树(地址 0x600000)中的 MAIN_GPIO0 匹配
gpioset -c 5 53=1 //连接到 GESI 板 J5 引脚 6 的示波器无任何变化
我知道一些 GPIO 会经过多路复用器、必须通过主板上的扩展器 GPIO 进行设置。 我通过查看电路板原理图、已在器件树中尝试了 GPIO_HOG、如下所示。
&exp1 {
// Enables MCAN4-7 if low rather then PWM signals
p14-hog {
/* P15 - EXP_MUX1 */
gpio-hog;
gpios = <12 GPIO_ACTIVE_HIGH>;
output-low;
line-name = "EXP_MUX1";
};
// Enables I2C 5 SDA and SCL on Gesi board if high
p15-hog {
/* P15 - EXP_MUX2 */
gpio-hog;
gpios = <13 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "EXP_MUX2";
};
// Enables UART3 and some different MDIO signals when high
p16-hog {
/* P16 - EXP_MUX3 */
gpio-hog;
gpios = <14 GPIO_ACTIVE_HIGH>;
output-high;
line-name = "EXP_MUX3";
};
};
我仍然无法看到任何 GPIO 切换或更改值。
如有任何帮助、我们将不胜感激。 下面的图展示了我们对 EVM 和我们尝试使用的 GPIO 的理解。 









