Son zamanlarda, Jetson Nano ile DC motorumun hızını kontrol etmek için PWM sinyalini kullanmak istiyorum. İlk başta, bunun Raspberry Pi gibi basit olacağını düşündüm. Sonuçta, Nvidia 40 pinli başlığının RPi ile uyumlu olduğunu söyledi. Ama sonra Nvidia’nın geliştirici forumunda kontrol ettim. Kötü haber. Nvidia’ya göre, donanım PWM kullanmak istiyorsanız, Pinmux’u yeniden yapılandırmanız gerekiyor. Yazılım PWM kullanmaya çalışırsanız, kodu yazmadık.
Bu yüzden Nvidia’nın resmi web sitesinden ve diğer kaynaklardan birçok belge okudum. Aşağıda başvurduğum belgeler bulunmaktadır.
Referans makale:
- NVIDIA Jetson Nano Pinmux resmi belgeleri
- NVIDIA Jetson TX2 Pinmux resmi belgeleri
- NVIDIA Jetson Nano Resmi Soru & Cevap
- Jetson Nano çekirdek oluşturma eğitimi
Şimdi Jetson Nano’nuzdan PWM çıkışı almaya başlayalım. Ama öncesinde, sadece bir PWM sürücüsü almanızı şiddetle öneririm. Çok maliyetli olmayacak ve iyi çalışıyor.
1. DT dosyasını dışa aktarın.

Nvidia’nın resmi talimatlarına göre, Pin 33 PWM çıkışı olarak belirtilmiştir. Ama yukarıdaki pin çıkışında, 33 GPIO_PE6 olarak yapılandırılmış. Şimdi yapmamız gereken, 33’ü PWM olarak ayarlamak için Pinmux’u yeniden yapılandırmaktır.
Az önce indirdiğimiz DT dosyasını açın.

GPIO_PE6‘yı bulmak oldukça kolay. Şimdi bunu PWM olarak değiştirelim.

Sonra bunu göreceksiniz.

Endişelenmeyin. Sadece Tamam’a tıklayın. Sonra Input‘u Output olarak değiştirin.

Bundan sonra, Generate DT File‘a tıklayın.

Tahta adı sorulduğunda, jetson-nano-sd yeterli olmalıdır.
Son olarak, Excel tablosunu CSV UTF-8 (virgülle ayrılmış) (*.csv) formatında kaydedin, dosya adı jetson-nano-sd.csv olsun.
Üç dosyamız oldu, bu dosyayı Linux ana sisteminize kopyalayın.

2. Gerekli araçları indirin
Öncelikle, SDK Manager’da Jetson Nano geliştirme ortamını indirin.

Her şey tamamlandığında, ~/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P3448/Linux_for_Tegra yolunun altında source_sync.sh dosyasını görmelisiniz.

Terminalde aşağıdaki komutu çalıştırarak çekirdek kodunu indirin
sudo apt install build-essential bc bzip2 xz-utils git-core vim-common ./source_sync.sh
Script çalışırken, giriş etiketi tegra-l4t-r32.2.0 olmalıdır, etiket diğer şeylerin versiyonu ile tutarlı olmalıdır.
Sonra araç zincirini indirebiliriz.
Filtreyi kontrol etmenizi öneririm.

Sonra 64-bit BSP için GCC Araç Zincirini indirin.

Toolkit’i çıkarın ve yolu hatırlayın.
Örneğin, benim yolum /home/eric/bin/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.
3. Uboot’u derleyin
Linux’ta tegra-pinmux-scripts script’ini indirin.
https://github.com/NVIDIA/tegra-pinmux-scripts
tegra-pinmux-scripts dizininde bir csv klasörü oluşturun ve daha önce elde edilen csv dosyasını buraya kopyalayın.
cd tegra-pinmux-scripts
mkdir csv
cp <path-to-csv>/jetson-nano-sd.csv csv/p3450-porg.csv
Sonra aşağıdaki komutu çalıştırın.
./csv-to-board.py p3450-porg
./board-to-uboot.py p3450-porg > pinmux-config-p3450-porg.h
pinmux-config-p3450-porg.h‘yi /home/tonny/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P3448/Linux_for_Tegra/sources/u-boot/board/nvidia/p3450-porg içindeki orijinal dosyanın üzerine yazmak için kullanın.
Sonra ortam değişkenlerini ayarlayın ve araç zincirinin ilgili bilgilerini içe aktarın.
export CROSS_COMPILE=/home/tonny/bin/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
dtc’yi kurun.
apt-get install device-tree-compiler
Uboot’un kök dizinine geri dönün /home/tonny/nvidia/nvidia_sdk/JetPack_4.2.1_Linux_GA_P3448/Linux_for_Tegra/sources/u-boot ve uboot’u derleyin.
make distclean
make p3450-porg_defconfig
make
Son olarak, yeni derlenmiş uboot’u L4T ağacına aktarın.
cp u-boot.bin ../../bootloader/t210ref/p3450-porg/
4. CBoot’u güncelleyin
Öncelikle Jetson Nano’muzun cihaz ağacı versiyonunu kontrol etmemiz gerekiyor.
Jetson Nano’da aşağıdaki komutu çalıştırın.
cat /proc/device-tree/nvidia,dtsfilename
Örneğin, benim jetson nano’m tegra210-p3448-0000-p3449-0000-b00.dts. Bu, dosyanın b00 versiyonunu daha sonra değiştirmem gerektiği anlamına geliyor. Bazı insanlar nano’nun a02 versiyonunu alabilir ve a02 versiyonunu değiştirmelidir.

L4T versiyonu 32.1 ise, kaynak kodunun bir kısmını güncellemek için NVIDIA Jetson Nano Pinmux’un resmi belgelerine başvurmanız gerekir.
Linux ana bilgisayarına geri dönün, önceki Excel tablosu tarafından oluşturulan dtsi dosyasını kaynak kodundaki dosyanın üzerine yazmak için kullanın.
$ cd Linux_for_Tegra/sources/hardware/nvidia/platform/t210/porg/kernel-dts/porg-platforms/
cp <yeni-dt-dosyalari-yolu>/tegra210-jetson-nano-sd-pinmux.dtsi tegra210-porg-pinmux-p3448-0000-<nano-dt-sürümü>.dtsi
cp <yeni-dt-dosyalari-yolu>/tegra210-jetson-nano-sd-gpio-default.dtsi tegra210-porg-gpio-p3448-0000-<nano-dt-sürümü>.dtsi
Aygıt ağaç görüntüsünü oluşturmak için Linux_for_Tegra/sources/kernel/kernel-4.9/ klasörüne girin
cd Linux_for_Tegra/sources/kernel/kernel-4.9/
make ARCH=arm64 tegra_defconfig
make ARCH=arm64 dtbs
Son olarak, yeni derlenmiş aygıt ağaç görüntüsünü L4T ağacına aktarın
cp arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-<nano-dt-sürümü>.dtb ../../../kernel/dtb/
5. Flash
Linux_for_Tegra klasörü altında çalıştırın
sudo ./create-jetson-nano-sd-card-image.sh -o sd-blob.img -s <sd_kart_boyutu> -r <nano-dt-revizyonu>
nano-dt-revizyonu ile nano-dt-sürümü arasındaki ilişki aşağıdaki gibidir
| DT-Ver | DT-Rev |
|---|---|
| a01 | 100 |
| A02 | 200 |
| b00 | 300 |
Burada sd kartım 32g, dt-ver b00, dolayısıyla aslında şunu çalıştırdım
sudo ./create-jetson-nano-sd-card-image.sh -o sd-blob.img -s 32G -r 300
Sonraki adımda, Linux_for_Tegra/bootloader/signed dizinine girin ve karşılık gelen sürümü tegra210-p3448-0000-p3449-0000-<nano-dt-sürümü>.dtb.encrypt jetson nano’ya kopyalayın
Daha sonra jetson nano üzerinde çalıştırın
sudo dd if = tegra210-p3448-0000-p3449-0000- <nano-dt-sürümü> .dtb.encrypt of = / dev / disk / by-partlabel / DTB
Tabii ki, öncelikle yedek almanızı ve bir sorun çıkması durumunda kurtarmanızı öneririm.
sudo dd if = / dev / disk / by-part label / DTB or = backup.dtb.encrypt
