How to clone the pinmux from one TX2 to another

Hello,

I have B04 and C02 TX2 carrier boards. I flashed Jetpack 4.3 on the C02 board and the GPIO pins work as desired for my simple interface electronics that require two pull-down pins (using 36 and 37). If I flash the same Jetpack 4.3 on the B04 board, the pinmux does not get cloned (I can only use pin 15). How can I make sure the same pinmux is used on both boards? It’s unclear to me why flashing (with sudo ./flash.sh -r jetson-tx2 mmcblk0p1, where the bootloader/system.img was created by the Jetpack installer) does not change the pinmux.

I’m trying to avoid the complication of the proper pinmux configuration since the default works fine on one of my boards already and I don’t have a windows machine to run the excel sheet.

PS: This is actually the simplified case; I’m actually using Jetpack 3.3 for my final application so whatever solution there is for cloning the pinmux, it needs to work with Jetpack 3.3.

hello benbn9c5,

you should use the same pinmux for different board revisions if you’d confirm the settings all correct,
in case the board schematic differs, it’s pinmux for the board configure to have different pinmux configurations.
for example,
it’s the cfg file that include the settings, tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg.

Thank you; so it seems I can’t use the same tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg on both B04 and C02 boards as they require different configurations to get the same pin functionality?

When I create an image from one of the boards with ./flash.sh -r -G backup.img jetson-tx2 mmcblk0p1 does this include the pinmux from the jetson board, or does the pinmux only come from the tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg file alongside the .img* file?

hello benbn9c5,

it’s flash process to update the board configuration file, you should check the flash cfg, such as p2771-0000.conf.common, there’s PINMUX_CONFIG to specify the *.cfg file that actually flash to the target.
thanks

I still don’t know if I can use the same pinmux config file ( tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg) for both B04 and C02 carrier boards and have the same board level pin configuration for GPIO, can you clarify?

Is bootloader/tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg flashed independent of bootloader/system.img when -r (reuse) option is used to flash?

Does the pinmux config go into the .img file when the -r option is not used?

When I create an image from the board, does the resulting .img.raw file include the pinmux configuration or not?

hello benbn9c5,

yes, you’re able to use the same pinmux config file for both B04 and C02 carrier boards.
note, here’s Jetson TX2 PCN 204840 Multiple Changes, any Jetson TX2 module with 699 level part number version greater than or equal to D00 may be affected by this PCN.

when you running flash script to include -r options, it only skips building system.img, and reuse the existing one to reduce flash consume time.
pinmux config it doesn’t matter you’re adding -r options or not, it depends-on the flash configuration file you’re used.
for example,
jetson-tx2-4GB.conf, there’s definition to replace the pinmux config.

PINMUX_CONFIG="tegra186-mb1-bct-pinmux-quill-p3489-1000-a00.cfg";

hello benbn9c5,

in addition,
you may also dig into flash messages for the actual configuration files you’re used.
there’s command, --pinmux_config which specify the files to the tegraflash.py.
I’ve recap the flash messages as below for your reference,

for example,
here’s command-line to perform image flashing for the Jetson-TX2-DevKits.
./tegraflash.py --bl nvtboot_recovery_cpu.bin --sdram_config P3310_A00_8GB_Samsung_8GB_lpddr4_204Mhz_A02_l4t.cfg --odmdata 0x1090000 --applet mb1_recovery_dev.bin --cmd "flash; reboot" --cfg flash.xml --chip 0x18 --misc_config tegra186-mb1-bct-misc-si-l4t.cfg --pinmux_config tegra186-mb1-bct-pinmux-quill-p3310-1000-a00.cfg --pmic_config tegra186-mb1-bct-pmic-quill-p3310-1000-a00.cfg --pmc_config tegra186-mb1-bct-pad-quill-p3310-1000-a00.cfg --prod_config tegra186-mb1-bct-prod-quill-p3310-1000-a00.cfg --scr_config minimal_scr.cfg --scr_cold_boot_config mobile_scr.cfg --br_cmd_config tegra186-mb1-bct-bootrom-quill-p3310-1000-a00.cfg --dev_params emmc.cfg --bins "mb2_bootloader nvtboot_recovery.bin; mts_preboot preboot_d15_dev_cr.bin; mts_bootpack mce_mts_d15_dev_cr.bin; bpmp_fw bpmp.bin; bpmp_fw_dtb tegra186-a02-bpmp-quill-p3310-1000-a00-00-te770d-ucm2.dtb; tlk tos-mon-only.img; eks eks.img; bootloader_dtb tegra186-quill-p3310-1000-a00-00-base.dtb"

I just flashed a clean version of JetPack 4.2 (using sdkmanager) onto the two boards, but the GPIO pins behave differently on each of these two boards with identical images. Flashing does not seem to have any effect on which pins I can use for my switches. The C02 acts one way, and the B04 acts another, regardless of what image is flashed, or the version of Jetpack (4.2, 4.3, 3.3).

Could this be an issue with something other than the pinmux??

hello benbn9c5,

please refer to my previous comments, and you’ll need to double check the pinmux config flash into your target.
in addition, there’s device tree settings that’ll update the pin behavior, you could also check the flash commands to compare the binaries of your two platforms.

Thank you @JerryChang. From the clean sdkmanager-installed Jetpack 4.2.3 (the newest “archived” release available for installation using sdkmanager) Linux_for_Tegra directory (used to build and flash the B04 board from the sdkmanager) I ran two tests using this command: sudo ./flash.sh -r jetson-tx2 mmcblk0p1 | tee log

The log files from flashing the B04 and C02 boards are identical except for the time-stamps. Both show the same pinmux file is used: --pinmux_config tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg

The whole tegraflash command line:

./tegraflash.py --bl nvtboot_recovery_cpu.bin --sdram_config P3310_A00_8GB_Samsung_8GB_lpddr4_204Mhz_A02_l4t.cfg --odmdata 0x1090000 --applet mb1_recovery_prod.bin --cmd "flash; reboot" --cfg flash.xml --chip 0x18 --misc_config tegra186-mb1-bct-misc-si-l4t.cfg --pinmux_config tegra186-mb1-bct-pinmux-quill-p3310-1000-c03.cfg --pmic_config tegra186-mb1-bct-pmic-quill-p3310-1000-c04.cfg --pmc_config tegra186-mb1-bct-pad-quill-p3310-1000-c03.cfg --prod_config tegra186-mb1-bct-prod-quill-p3310-1000-c03.cfg --scr_config minimal_scr.cfg --scr_cold_boot_config mobile_scr.cfg --br_cmd_config tegra186-mb1-bct-bootrom-quill-p3310-1000-c03.cfg --dev_params emmc.cfg --bins "mb2_bootloader nvtboot_recovery.bin; mts_preboot preboot_d15_prod_cr.bin; mts_bootpack mce_mts_d15_prod_cr.bin; bpmp_fw bpmp.bin; bpmp_fw_dtb tegra186-a02-bpmp-quill-p3310-1000-c04-00-te770d-ucm2.dtb; tlk tos-trusty.img; eks eks.img; bootloader_dtb tegra186-quill-p3310-1000-c03-00-base.dtb"

Again, these two flashes are happening from the same L4T tree, so the files are identical. The only changed variable is the revision of the TX2 boards. Even the cables and everything else is the same.

I don’t see anything in the TX2 changes document about GPIO. What I assume is the board rev # is: 180-82597-DARF-C02. I can’t actually access the spot where this number is on the other board because it’s already installed, but if I recall it’s the same number with B04 at the end the only difference in the model numbers printed on the board I could find before I installed it.

Looking at my receipts, both orders list the same “model number”: 945-82771-0000-000, both boards have model P2597 printed on them.

I’ve also attached my spreadsheet showing which pins I could use as inputs (highlighted in yellow) and which pints I could not use as inputs for these two boards. Maybe there is something in the differences that could be useful: Jetson-TX2-GPIO-mapping.xlsx (6.9 KB)

So what is going on if not pinmux configuration?

hello benbn9c5,

it should be device tree overlay files (.dtbo files).
please refer to Configuring the 40-Pin Expansion Header to have more details.
thanks

Looks like the dtbo files are new in Jetpack4.3 and not included in 3.3 nor 4.2. Looking at the older documentation (28_L4T) it looks like the CFG files are the end of configuration and since I’ve confirmed I’m flashing the same CFG files to both boards, the pins should behave the same.

When I first got the new (C02) board I think I flashed 4.3 as a test and then flashed 3.3 on it afterwards; just recently, sdmanager did not give me the option to install 4.3 again (I don’t recall the reason), only newer versions. I installed 4.2.3 by using the --archivedversions option. Is it possible that flashing 4.3 initially changed in the pin configuration in such a way that cannot be changed by flashing 3.3 or 4.2? Does this mean I have to change to Jetpack 4.3+?

I have not upgraded already because a quick test build of my application did not work out of the box with Jetpack 4.3 and I have accumulated almost a year of stable uptime on 3.3; I’m resistant to upgrading when everything but GPIO is working very well.

Would your advice be to upgrade to the latest stable JetPack and if the pins on the B04 board still act the same way, use the Jetson‑IO to reconfigure them? It’s unclear from the doc you quote above how to change pull-up / pull-down input modes for pins though. I suppose I may need to still use Excel configure the pins, but then that is just creating more CFG files (right?) and I’ve already confirmed that flashing the same CFG (pinmux) file to these boards does not result in the pins behaving the same on these boards!

Is there some HW difference that makes it impossible to use the same pin config on both these (B04, C02) boards when using JetPack3.3 / 4.2?

hello benbn9c5,

you’re able to flash each release image to the Jetson platforms. here’s command to download previous JetPack release images.
i.e. $ sdkmanager --archivedversions
while you have the JetPack image installed to your local host machine, you’re able to execute flash script to perform image flash individually without SDKManager. please refer to Basic Flash Script Usage for reference,

it’s CFG file (generated and convert by pinmux-dts2cfg.py) to assign the default pin configurations, and, it’s Jetson-IO have the capability to update the settings after that,
thanks

Hello @JerryChang,

I feel like we’re going in circles now that you seem to be repeating what I’ve already done. I’ve already used sdkmanager to install jetpack 4.2. I’ve already flashed to both boards. I’ve already gone into the same Linux_for_Tegra folder created by sdkmanager and used the flash script to flash the “release image” onto both boards. The same L4T version, the same pinmux .cfg files, and yet the pins on the board behave differently after flashing.

Why is this?

Perhaps I should start a different thread with a different title to better capture the issue: “GPIO pins on different boards (C02 and B04) behave differently after being flashed with the same clean image”

let’s moving to https://forums.developer.nvidia.com/t/186068/ to track your issue.