常见问题

TX2/Xavier Linux GPIO 计算

2022-04-27 admin

Linux GPIO子系统

Linux命令行常用echo, cat等操作GPIO:


# 列出Linux GPIO空间目录

$ ls /sys/class/gpio

export  gpiochip232  gpiochip240  gpiochip256  gpiochip320  unexport


# 导出GPIO到用户空间

# GPIO4_CAM_STROBE -> GPIO3_PV.05 -> V=>2, 2*8+256+5=277

$ echo 277 > /sys/class/gpio/export

# 取消导出把export换成unexport


$ ls /sys/class/gpio

export  gpio277  gpiochip232  gpiochip240  gpiochip256  gpiochip320  unexport


# 设置GPIO方向为输出

$ echo out > /sys/class/gpio/gpio277/direction


# 输出高电平

$ echo 1 > /sys/class/gpio/gpio277/value


# 查看电平

$ cat /sys/class/gpio/gpio277/value

当然这些命令断电失效, 可以写成脚本设置开机运行, 有兴趣搜索Ubuntu16,或者Ubuntu18设置开机脚本.


TX2 Linux GPIO计算

关于上面277的由来 GPIO4_CAM_STROBE -> GPIO3_PV.05 -> V=>2, 2*8+256+5=277.


原理图中用的是GPIO4_CAM_STROBE这个引脚:




查 Jetson TX2 Series Pinmux 这个xls表格(此表格需要去nvidia官网下载中心下载,agx表格也一样):




表格中 GPIO4_CAM_STROBE -> GPIO3_PV.05.


linux/include/dt-bindings/gpio/tegra186-gpio.h github, linux的代码对TX2端口进行了编号(TX2->tegra186-gpio.h, Xavier->tegra194-gpio.h):


/* GPIOs implemented by main GPIO controller */

#define TEGRA186_MAIN_GPIO_PORT_A 0

#define TEGRA186_MAIN_GPIO_PORT_B 1

#define TEGRA186_MAIN_GPIO_PORT_C 2

#define TEGRA186_MAIN_GPIO_PORT_D 3

#define TEGRA186_MAIN_GPIO_PORT_E 4

#define TEGRA186_MAIN_GPIO_PORT_F 5

#define TEGRA186_MAIN_GPIO_PORT_G 6

#define TEGRA186_MAIN_GPIO_PORT_H 7

#define TEGRA186_MAIN_GPIO_PORT_I 8

#define TEGRA186_MAIN_GPIO_PORT_J 9

#define TEGRA186_MAIN_GPIO_PORT_K 10

#define TEGRA186_MAIN_GPIO_PORT_L 11

#define TEGRA186_MAIN_GPIO_PORT_M 12

#define TEGRA186_MAIN_GPIO_PORT_N 13

#define TEGRA186_MAIN_GPIO_PORT_O 14

#define TEGRA186_MAIN_GPIO_PORT_P 15

#define TEGRA186_MAIN_GPIO_PORT_Q 16

#define TEGRA186_MAIN_GPIO_PORT_R 17

#define TEGRA186_MAIN_GPIO_PORT_T 18

#define TEGRA186_MAIN_GPIO_PORT_X 19

#define TEGRA186_MAIN_GPIO_PORT_Y 20

#define TEGRA186_MAIN_GPIO_PORT_BB 21

#define TEGRA186_MAIN_GPIO_PORT_CC 22


#define TEGRA186_MAIN_GPIO(port, offset) \

    ((TEGRA186_MAIN_GPIO_PORT_##port * 8) + offset)


/* GPIOs implemented by AON GPIO controller */

#define TEGRA186_AON_GPIO_PORT_S 0

#define TEGRA186_AON_GPIO_PORT_U 1

#define TEGRA186_AON_GPIO_PORT_V 2

#define TEGRA186_AON_GPIO_PORT_W 3

#define TEGRA186_AON_GPIO_PORT_Z 4

#define TEGRA186_AON_GPIO_PORT_AA 5

#define TEGRA186_AON_GPIO_PORT_EE 6

#define TEGRA186_AON_GPIO_PORT_FF 7


#define TEGRA186_AON_GPIO(port, offset) \

    ((TEGRA186_AON_GPIO_PORT_##port * 8) + offset)


其中的:


TEGRA186_MAIN_GPIO, 也就是tegra-gpio, at base index 320, 来源 TX2 GPIO Changes

TEGRA186_AON_GPIO, 也就是tegra-gpio-aon, at base index 256

offset = base + pin

TEGRA186_AON_GPIO_PORT_V对应2, 属于tegra-gpio-aon组, 基值是256, 那么 GPIO3_PV.05 对应的就是TEGRA186_MAIN_GPIO(V, (256+5)) => ((TEGRA186_MAIN_GPIO_PORT_V* 8) + offset) = 2*8+256+5 = 277.

Xavier Linux GPIO计算

tegra194-gpio.h, 这里把Xavier的 linux/include/dt-bindings/gpio/tegra194-gpio.h github也贴过来方便查阅:


#ifndef _DT_BINDINGS_GPIO_TEGRA194_GPIO_H

#define _DT_BINDINGS_GPIO_TEGRA194_GPIO_H


#include


/* GPIOs implemented by main GPIO controller */

#define TEGRA194_MAIN_GPIO_PORT_A 0

#define TEGRA194_MAIN_GPIO_PORT_B 1

#define TEGRA194_MAIN_GPIO_PORT_C 2

#define TEGRA194_MAIN_GPIO_PORT_D 3

#define TEGRA194_MAIN_GPIO_PORT_E 4

#define TEGRA194_MAIN_GPIO_PORT_F 5

#define TEGRA194_MAIN_GPIO_PORT_G 6

#define TEGRA194_MAIN_GPIO_PORT_H 7

#define TEGRA194_MAIN_GPIO_PORT_I 8

#define TEGRA194_MAIN_GPIO_PORT_J 9

#define TEGRA194_MAIN_GPIO_PORT_K 10

#define TEGRA194_MAIN_GPIO_PORT_L 11

#define TEGRA194_MAIN_GPIO_PORT_M 12

#define TEGRA194_MAIN_GPIO_PORT_N 13

#define TEGRA194_MAIN_GPIO_PORT_O 14

#define TEGRA194_MAIN_GPIO_PORT_P 15

#define TEGRA194_MAIN_GPIO_PORT_Q 16

#define TEGRA194_MAIN_GPIO_PORT_R 17

#define TEGRA194_MAIN_GPIO_PORT_S 18

#define TEGRA194_MAIN_GPIO_PORT_T 19

#define TEGRA194_MAIN_GPIO_PORT_U 20

#define TEGRA194_MAIN_GPIO_PORT_V 21

#define TEGRA194_MAIN_GPIO_PORT_W 22

#define TEGRA194_MAIN_GPIO_PORT_X 23

#define TEGRA194_MAIN_GPIO_PORT_Y 24

#define TEGRA194_MAIN_GPIO_PORT_Z 25

#define TEGRA194_MAIN_GPIO_PORT_FF 26

#define TEGRA194_MAIN_GPIO_PORT_GG 27


#define TEGRA194_MAIN_GPIO(port, offset) \

    ((TEGRA194_MAIN_GPIO_PORT_##port * 8) + offset)


/* GPIOs implemented by AON GPIO controller */

#define TEGRA194_AON_GPIO_PORT_AA 0

#define TEGRA194_AON_GPIO_PORT_BB 1

#define TEGRA194_AON_GPIO_PORT_CC 2

#define TEGRA194_AON_GPIO_PORT_DD 3

#define TEGRA194_AON_GPIO_PORT_EE 4


#define TEGRA194_AON_GPIO(port, offset) \

    ((TEGRA194_AON_GPIO_PORT_##port * 8) + offset)


#endif

基地值也变了:


tegra-gpio, at base index 288

tegra-gpio-aon, at base index 248

如 原理图中的信号 SPI1_SCK:


查 [Jetson AGX Xavier Pinmux] 表格, 对应 GPIO3_PZ.03

上面头文件tegra194-gpio.h定义了#define TEGRA194_MAIN_GPIO_PORT_Z 25

TEGRA194_MAIN_GPIO, 也就是tegra-gpio, 基值为288

Linux GPIO计算结果: 25*8 + 288 + 3 = 491

参考

Tegra Wiki 里面写了模型号 TX2->T186, Xavier->T194:




Xavier GPIO Changes 里面指出了tegra-gpio基值288, tegra-gpio-aon基值248.


TX2 GPIO Changes 里面指出了tegra-gpio基值320, tegra-gpio-aon基值256.


Jetson TX2 Series Pinmux excel表格可以查TX2信号名与引脚标号的对应关系.


Jetson AGX Xavier Pinmux excel表格可以查Xavier信号名与引脚标号的对应关系.


Jeson Pinmux


NVIDIA Jetson TX2 J21 Header Pinout JetsonHacks


NVIDIA Jetson AGX Xavier GPIO Header Pinout JetsonHacks




可以sudo cat /sys/kernel/debug/gpio查看:


$ sudo cat /sys/kernel/debug/gpio

gpiochip3: GPIOs 232-239, parent: platform/max77620-gpio, max77620-gpio, can sleep:

 gpio-232 (                    |external-connection:) in  hi

 gpio-237 (                    |spmic_gpio_input    ) in  hi

 gpio-238 (                    |spmic_gpio_input    ) in  hi


gpiochip2: GPIOs 240-255, parent: i2c/0-0074, tca9539, can sleep:

 gpio-240 (                    |vdd-usb2-5v         ) out lo

 gpio-241 (                    |en-vdd-ts-1v8       ) out hi

 gpio-242 (                    |en-vdd-ts-hv-3v3    ) out hi

 gpio-243 (                    |en-vdd-disp-3v3     ) out lo

 gpio-244 (                    |vdd-fan             ) out hi

 gpio-245 (                    |sysfs               ) out hi

 gpio-247 (                    |en-mdm-pwr-3v7      ) out lo

原文链接:https://blog.csdn.net/weifengdq/article/details/114945627


首页
产品
案例
联系