GPIO pins on different boards (C02 and B04) behave differently after being flashed with the same clean JetPack 4.2 image

I have B04 and C02 TX2 dev carrier boards (P2597) and using a two button interface that assumes the GPIO pins have a pull-up resistor. Using sdkmanager, I built and flashed JetPack 4.2 (The newest available release available via --archivedversions) onto the C02 board. I then went into the L4T directory created by sdkmanager and used the flash script ( sudo ./flash.sh -r jetson-tx2 mmcblk0p1 ) to reflash the same image with the same L4T tree onto the two boards. The result is that I can only use one button on pin 15 (according to the connector pin #s) on the B04 board, but I can use pins 31, 36 and 37 on the C02 board.

As far as I understand, the same image on both boards should have the same pinmux cfg (I confirmed the same cfg file is used flashing both boards) and thus the same internal pull-up resistor and same behaviour, but I am not seeing this with these two revisions. What am I missing? Is this an issue with JetPack 4.2? (3.3 seems to show the same issue). I need the GPIO pins on these two boards to behave identically so I can use the same image on them both.

Thank you,
B.

PS: This is a more clear topic that follows from another topic on “cloning” the pinmux between boards.

Hi, please check the TX2 series design guide first: https://developer.nvidia.com/embedded/dlc/jetson-tx2-series-oem-product-design-guide, there are some difference between B04 and C02. Not sure if your issue is related to that, but better to read that first.

And which connector (part number) do you mean the pin 15, 31, 36 and 37 are of?

Hello @Trumany thanks for the quick response.

I checked the document and nothing stood out as relevant; I’m not using pins on powerup (only once the system has started).

Since I’m using the J21 header and jetson-gpio to test, I have no idea what the proper ‘name’ corresponding to these pins may be. I’m looking at writing some code using jetson-gpio to list the underlying info for these corresponding pins, but that is not proving as quick as I’d like. As the document lists those proper names, I could not confirm whether anything relevant is included in the document. I’ll keep working on that but wanted to reply that I’m using board level pin #s for J21.

Thanks.

Hello @Trumany & @JerryChang

Update: the GPIO pins (J21 pins 15, 36, 37) I’m using correspond to gpio255, gpio467 and gpio388. I’ve confirmed by looking in /sys/class/gpio. The entries are created by jetson-io fine.

After more investigation I’m still at a loss why these two boards behave differently. I looked around in the /sys/kernel/debug/pinctrl directories and the entries are nearly all identical between the two boards. i.e. as I understand, the pins should behave the same. The /sys/kernel/debug/pinctrl/pinctrl-maps files are identical, so the pull, input, etc. fields are the same.

I only found one difference in looking through /sys:


/sys/kernel/debug/pinctrl/2430000.pinmux/pinconf-groups
1410c1410
< 	special-function=0
---
> 	special-function=1

Here is the whole relvant section:

90 (gpio_pq4_pi4): 
	pull=1
	tristate=1
	enable-input=1
	io-reset=0
	rcv-sel=0
	io-hv=0
	schmitt=0
	slew-rate-falling=0
	slew-rate-rising=0
	drive-type=2
	rfu-in=0
	special-function=1
	func=rsvd0

Everything else is identical. So what is going on here? Is “Special function” my issue? If not, how else can I debug?

Aside: jetson-io does not seem to be installed, how can I install it?

Correction: I mean jetson-gpio the python GPIO interface library, not jetson-io the GPIO config utility.

@Trumany @JerryChang I’m really stuck here and would love any ideas on how to debug this issue.