配置40引腳擴(kuò)展接頭
每個Jetson開發(fā)套件均包含40針擴(kuò)展插頭。許多引腳可以用作GPIO或“特殊功能IO口(SFIO)”,例如I2C,I2S等。40引腳接頭連接器使您可以將Jetson開發(fā)人員工具包連接到現(xiàn)成的Raspberry Pi HAT(Hardware Attached on Top),例如Seeed Grove模塊,SparkFun Qwiic產(chǎn)品等。
燒錄系統(tǒng)時,Jetson開發(fā)套件上所有I / O的默認(rèn)配置寫入設(shè)備中。要更改L4T 32.3之前的40引腳擴(kuò)展插頭的引腳配置,您必須使用Pinmux電子表格為相應(yīng)的平臺更新引腳配置,然后將新配置燒錄到開發(fā)者套件中。盡管這可能是更新生產(chǎn)系統(tǒng)的適當(dāng)方法,但開發(fā)時仍需要一種更方便的方法來測試不同的引腳配置。
從L4T 32.3版開始,NVIDIA提供了Jetson-IO工具來簡化40針擴(kuò)展插頭的I / O配置。Jetson?IO是基于Python的工具,可在開發(fā)人員工具包上運(yùn)行并修改Device Tree Blob(DTB)固件,以便開發(fā)套件重新啟動后使40針插頭新配置生效。
啟動Jetson?IO
要啟動Jetson-IO,請在開發(fā)人員工具包上輸入以下命令:
$ sudo /opt/nvidia/jetson-io/jetson-io.py
注意
L4T版本32.3.1中的一個已知問題導(dǎo)致啟動Jetson-IO時發(fā)生以下錯誤:
$ sudo /opt/nvidia/jetson-io/jetson-io.py
Traceback (most recent call last):
File "/opt/nvidia/jetson-io/jetson-io.py", line 25, in <module>
from Jetson import board
ImportError: cannot import name 'board'
To resolve this issue, enter the following command:
$ sudo find /opt/nvidia/jetson-io/ -mindepth 1 -maxdepth 1 -type d -exec touch {}/__init__.py \;
# 需要注意最后的'\;'和'__init__.py'之間有一個空格,此命令實際上是在當(dāng)前每個文件夾下創(chuàng)建__init__.py文件,以使對應(yīng)的pythen文件成為一個包
# 當(dāng)前版本Jetson nano運(yùn)行時會閃退,實際錯誤為:RuntimeError: No DTB found for NVIDIA Jetson Nano Developer Kit!
修復(fù)方法如下:
$ sudo mkdir /boot/dtb
$ sudo cp -v /boot/tegra210-p3448-0000-p3449-0000-[ab]0[012].dtb /boot/dtb/
主屏幕
啟動Jetson?IO時,將顯示以下屏幕。此時主屏幕顯示40針接頭當(dāng)前的配置,并為您提供兩個用于配置I / O的選項:
為Jetson配置兼容硬件(Configure Jetson for compatible hardware):使您可以從可附加到40針擴(kuò)展接頭連接器的硬件模塊的配置列表中進(jìn)行選擇。
配置40針擴(kuò)展頭(Configure 40?pin expansion header):顯示一個屏幕(在下方),您可以在其中指定要在40針擴(kuò)展頭上啟用的功能。

兼容硬件屏幕
當(dāng)您選擇“配置兼容硬件(configure for compatible hardware)”選項時,Jetson?IO將顯示一些硬件模塊的配置列表。

當(dāng)前有兩個硬件模塊可供配置:
- Adafruit SPH0645LM4H(I2S MEMS麥克風(fēng))
- FE-PI Audio Z V2(SGTL5000 I2S音頻編解碼器)
選擇配置后,Jetson-IO返回主屏幕,主屏幕顯示為針對該配置更新后的40針擴(kuò)展接頭的圖。

您可以選擇以下操作:
- 保存并重新啟動以重新配置引腳(Save and reboot to reconfigure pins):通過為配置應(yīng)用設(shè)備樹覆蓋來創(chuàng)建新的DTB。然后,它將更新用于引導(dǎo)Linux的配置文件( /boot/extlinux/extlinux.conf)并重新引導(dǎo)開發(fā)人員工具包。
請注意,在更新配置文件之后,您仍然可以將開發(fā)人員工具包引導(dǎo)至先前的配置,因為Jetson ?IO 通過為新配置添加新條目來更新extlinux.conf。先前的配置仍在文件中。引導(dǎo)目標(biāo)時,引導(dǎo)加載程序使您可以選擇配置(或文件中定義的任何其他配置)。
保存并退出而不重新引導(dǎo)(Save and exit without rebooting):創(chuàng)建一個新的DTB并更新 extlinux.conf,其方式與“保存并重新引導(dǎo)”相同,但不重新引導(dǎo)開發(fā)人員工具包。您可以通過選擇一次重新啟動來應(yīng)用新配置。
放棄引腳更改(Discard pin changes):放棄更改并返回主屏幕。
退出(Exit):終止Jetson?IO,而不進(jìn)行任何更改。
40引腳擴(kuò)展標(biāo)題屏幕
當(dāng)您在主屏幕上選擇“配置40針擴(kuò)展頭”選項時,Jetson-IO將顯示40針頭I / O支持的特殊功能列表。它在括號中顯示了與功能相關(guān)的引腳。
例如,在NVIDIA ?杰特森?納米開發(fā)工具包,杰特森-IO顯示的功能列表如下。

有關(guān)支持的功能的更多詳細(xì)信息,請參閱開發(fā)人員套件中的Jetson SoC 技術(shù)參考手冊。
您可以根據(jù)需要選擇或取消選擇功能。
要接受所選的功能集,請選擇“返回”選項。Jetson?IO返回主屏幕。它會重新顯示在“ 兼容硬件屏幕 ”之后顯示的主屏幕,并附加一個條目:
- 導(dǎo)出為設(shè)備樹覆蓋圖:將40針擴(kuò)展頭的配置導(dǎo)出為新的設(shè)備樹覆蓋圖。
命令行界面
如果您希望從命令行而不是從菜單配置40針擴(kuò)展頭,NVIDIA提供了一組命令行工具,它們提供相同的功能。以下各節(jié)介紹了這些實用程序。
按引腳名稱查看40引腳接頭連接器配置
名稱
config-by-pin.py-顯示40針擴(kuò)展頭的配置概要
config-by-pin.py [選項]
描述
顯示40針擴(kuò)展接頭連接器的當(dāng)前配置。以下選項指定要顯示的配置。如果未使用任何選項,則顯示整個配置。-h,--help
顯示幫助信息并退出。-p,--pin = NUM??BER
顯示由NUMBER指定的引腳的當(dāng)前配置,該配置必須在1到40之間。例子
# 顯示全部引腳的功能
sudo /opt/nvidia/jetson-io/config-by-pin.py
# 顯示指定引腳的功能
sudo /opt/nvidia/jetson-io/config-by-pin.py -p 5
通過特殊功能配置40針接頭連接器
名稱
config-by-function.py-為40針擴(kuò)展頭配置I / O功能概要
config-by-function.py [-l {all,enabled}]
config-by-function.py [-o {dtb,dtbo} function1 function2 ...]
描述
顯示和配置40針擴(kuò)展頭上可用的I / O功能。-h,--help
顯示幫助信息并退出。-l, --list={all,enabled}
all:全部列出了40針擴(kuò)展接頭連接器支持的所有功能。enabled: 僅列出當(dāng)前已啟用的功能。-o, --out={dtb,dtbo}
為提供的功能列表創(chuàng)建一個新的DTB或設(shè)備樹覆蓋(DTBO)。如果該命令創(chuàng)建了一個新的DTB文件,則將使用新選項更新Linux引導(dǎo)配置文件(/boot/extlinux/extlinux.conf)以使用該DTB進(jìn)行引導(dǎo)。
例子
sudo /opt/nvidia/jetson-io/config-by-function.py -l all
sudo /opt/nvidia/jetson-io/config-by-function.py -l enabled
sudo /opt/nvidia/jetson-io/config-by-function.py -o dtb spi1
sudo /opt/nvidia/jetson-io/config-by-function.py -o dtbo spi1
通過硬件模塊配置40針接頭連接器
名稱
config-by-hardware.py-為硬件模塊配置Jetson概要
config-by-hardware.py [-l]
config-by-hardware.py [-n NAME]
- 描述
顯示Jetson支持的硬件模塊配置列表,并為給定的硬件模塊配置Jetson。
-h,--help
顯示用法消息并退出。
-n,--name = NAME
為NAME指定的硬件模塊配置Jetson。請注意,這將為硬件模塊生成一個新的DTB文件,并使用新選項更新Linux引導(dǎo)配置文件/boot/extlinux/extlinux.conf以使用該DTB進(jìn)行引導(dǎo)。
-l,--list
顯示可用硬件模塊配置的列表。
例子
sudo /opt/nvidia/jetson-io/config-by-hardware.py -l
sudo /opt/nvidia/jetson-io/config-by-hardware.py -n "Adafruit SPH0645LM4H"
添加對自定義硬件的支持
您可以通過為硬件模塊創(chuàng)建設(shè)備樹覆蓋(Device Tree overlay)來使用Jetson?IO支持自定義硬件模塊。以下各節(jié)描述了此過程。
設(shè)備樹覆蓋(Device Tree Overlays)
要添加對自定義硬件的支持到Jetson?IO,您必須了解Jetson?IO如何管理附加硬件。對硬件模塊的支持由設(shè)備樹覆蓋文件(.dtbo文件)處理。
硬件模塊的設(shè)備樹覆蓋必須定義:
一個覆蓋名稱屬性
overlay-name,用于指定硬件模塊的名稱兼容屬性
compatible,指示Jetson模塊和覆蓋支撐件,其組合40針擴(kuò)展接頭上需要的特殊功能IO(如果有)
模塊上任何設(shè)備的節(jié)點(diǎn)和/或?qū)傩?,例如,外部集成電路,例如音頻編解碼器
該疊加名稱屬性必須是唯一的名稱,從別人的覆蓋區(qū)別。該兼容屬性必須有一個或多個以下的,這取決于Jetson平臺的支持。
| Jetson Platform | Compatible String |
|---|---|
| Jetson Nano (A02) | nvidia,p3449-0000-a02+p3448-0000-a02 |
| Jetson Nano (B0x) | nvidia,p3449-0000-b00+p3448-0000-b00 |
| Jetson TX2 | nvidia,p2597-0000+p3310-1000 |
| Jetson AGX Xavier | nvidia,p2822-0000+p2888-0001 |
| Jetson TX1 | nvidia,p2597-0000+p2180-1000 |
用戶可以通過輸入以下命令來獲取適用于其Jetson平臺的正確兼容字符串。如果您有Jetson Nano開發(fā)人員工具包,此命令還將標(biāo)識PCB版本。
$ cat /sys/firmware/devicetree/base/compatible
例如,請考慮FE-PI Audio Z V2模塊。目標(biāo)的/ boot目錄中是名稱與模式匹配的覆蓋文件:
- -fe-pi-audio-z-v2.dtbo
您可以使用fdtdump實用工具檢查覆蓋文件的內(nèi)容,并查看覆蓋名稱(overlay-name)和兼容屬性(compatible)。例如,在Jetson Nano開發(fā)人員工具包上,您可以通過輸入以下命令來顯示這些屬性:
$ fdtdump /boot/tegra210-p3448-0000-p3449-0000-a02-fe-pi-audio-z-v2.dtbo
創(chuàng)建一個簡單的設(shè)備樹覆蓋層
要創(chuàng)建簡單的設(shè)備樹覆蓋圖以為Jetson Nano(帶有A02載板和A02模塊)開發(fā)人員工具包添加新的自定義屬性,請在目標(biāo)平臺上創(chuàng)建一個名為my-overlay.dts的文件,內(nèi)容如下:
/dts-v1/;
/plugin/;
/ {
overlay-name = "My Jetson Overlay";
compatible = "nvidia,p3449-0000-a02+p3448-0000-a02";
fragment@0 {
target-path = "/";
__overlay__ {
my-custom-property = "This Is My Overlay";
};
};
};
輸入以下命令以將DTS源文件編譯為覆蓋文件:
$ dtc -O dtb -o my-overlay.dtbo -@ my-overlay.dts
將新的覆蓋文件復(fù)制到/ boot目錄之后,Jetson?IO會找到該覆蓋文件并允許您應(yīng)用它:
$ sudo cp my-overlay.dtbo /boot
$ sudo /opt/nvidia/jetson-io/config-by-hardware.py -l
The following hardware configurations are available:
1. Adafruit SPH0645LM4H
2. FE-PI Audio Z V2
3. My Jetson Overlay
$ sudo /opt/nvidia/jetson-io/config-by-hardware.py -n "My Jetson Overlay"
為40針接頭連接器創(chuàng)建自定義設(shè)備覆蓋層
如果要為連接到40針擴(kuò)展接頭連接器的自定義硬件模塊創(chuàng)建覆蓋文件,則最簡單的方法是使用Jetson-IO根據(jù)需要配置40針接頭連接器并將配置導(dǎo)出為覆蓋。您可以使用面向菜單的Jetson-IO腳本或關(guān)聯(lián)的·config-by -...·命令行工具來執(zhí)行此操作。
例如,要為啟用I2S接口的Jetson Nano(A02)創(chuàng)建覆蓋,請輸入以下命令:
$ sudo /opt/nvidia/jetson-io/config-by-function.py -o dtbo i2s4
# Configuration saved to /boot/tegra210-p3448-0000-p3449-0000-a02-user-custom.dtbo.
然后,您可以通過輸入此命令將覆蓋圖轉(zhuǎn)換為設(shè)備樹源文件。
$ dtc -I dtb -O dts -o my-overlay.dts /boot/tegra210-p3448-0000-p3449-0000-a02-user-custom.dtbo
您可以根據(jù)需要為定制硬件修改生成的設(shè)備樹源,并添加硬件模塊所需的任何其他節(jié)點(diǎn)和/或?qū)傩?。然后,您可以重新編譯設(shè)備樹源并將其放置在/ boot /目錄中,以供Jetson?IO使用:
$ dtc -O dtb -o my-overlay.dtbo -@ my-overlay.dts
$ sudo cp my-overlay.dtbo /boot