Orange Pi Zero üzerine Armbian’ın “20.08.1 Focal with Linux 5.8.5-sunxi” sürümünü yükledikten sonra “armbian-config
” ile SPI donanımını enable etmeme rağmen donanımı kullanamadım. “ls /dev/spi*
” ile de cihazın /dev dizini altında listelenmediğini gördüm.
Biraz araştırmadan sonra “https://forum.armbian.com/topic/13287-spi-on-orange-pi-zero-h2/” adresindeki Armbian Forumunda “Sevc Dominik” tarafından paylaşılmış olan çözümü uyguladım. Çözümün adımları şöyle:
1. Cihazın /boot/dtb/overlay
klasörü altındaki sun8i-h3-spi-spidev.dtbo
dosyasını
$ dtc -I dtb -O dts /boot/dtb/overlay/sun8i-h3-spi-spidev.dtbo -o /home/orangepi/sun8i-h3-spi-spidev.dts
komutu ile home klasörü altındaki orangepi klasörüne decompile ettim.
$ cd /home/orangepi
2. Klasöre giderek dosyayı vi
ile görüntülediğimde
$ vi sun8i-h3-spi-spidev.dts /dts-v1/; / { compatible = "allwinner,sun8i-h3"; fragment@0 { target-path = "/aliases"; __overlay__ { spi0 = "/soc/spi@1c68000"; spi1 = "/soc/spi@1c69000"; }; }; fragment@1 { target = <0xffffffff>; __overlay__ { #address-cells = <0x01>; #size-cells = <0x00>; spidev@0 { compatible = "spidev"; status = "disabled"; reg = <0x00>; spi-max-frequency = <0xf4240>; }; }; }; fragment@2 { target = <0xffffffff>; __overlay__ { #address-cells = <0x01>; #size-cells = <0x00>; spidev@0 { compatible = "spidev"; status = "disabled"; reg = <0x00>; spi-max-frequency = <0xf4240>; }; }; }; __fixups__ { spi0 = "/fragment@1:target:0"; spi1 = "/fragment@2:target:0"; }; };
Şeklinde olduğunu gördüm. Burada ilk dikkatimi çeken şey spidev aygıt tanımlamalarının status değişkenlerinin “disabled” yapılmış olması.
3. sun8i-h3-spi-spidev.dts
dosyasını “Sevc Dominik”in Forumda belirttiği şekilde güncelledim.
sun8i-h3-spi-spidev.dts
dosyasının güncellenmiş hali:
/dts-v1/; // magic: 0xd00dfeed // totalsize: 0x314 (788) // off_dt_struct: 0x38 // off_dt_strings: 0x2b4 // off_mem_rsvmap: 0x28 // version: 17 // last_comp_version: 16 // boot_cpuid_phys: 0x0 // size_dt_strings: 0x60 // size_dt_struct: 0x27c / { compatible = "allwinner,sun8i-h3"; fragment@0 { target-path = "/aliases"; __overlay__ { spi0 = "/soc/spi@1c68000"; spi1 = "/soc/spi@1c69000"; }; }; fragment@1 { target = <0xffffffff>; __overlay__ { status = "okay"; #address-cells = <0x00000001>; #size-cells = <0x00000000>; spidev@0 { compatible = "spidev"; reg = <0x00000000>; spi-max-frequency = <0x000f4240>; }; }; }; fragment@2 { target = <0xffffffff>; __overlay__ { status = "okay"; #address-cells = <0x00000001>; #size-cells = <0x00000000>; spidev@0 { compatible = "spidev"; reg = <0x00000000>; spi-max-frequency = <0x000f4240>; }; }; }; __fixups__ { spi0 = "/fragment@1:target:0"; spi1 = "/fragment@2:target:0"; }; };
4. dtc
komutu ile dts dosyasını tekrar compile ettim.
$ dtc -@ -I dts -O dtb -o sun8i-h3-spi-spidev.dtbo sun8i-h3-spi-spidev.dts
Bu komuttan sonra derlemede sorun yoksa sun8i-h3-spi-spidev.dtbo dosyasının oluşmuş olması gerekiyor.
5. Derlenmiş sun8i-h3-spi-spidev.dtbo
dosyasını /boot/dtb/overlay
klasörü altına kopyaladım.
$ sudo cp sun8i-h3-spi-spidev.dtbo /boot/dtb/overlay/
6. Son olarak reboot
komutu ile cihazı yeniden başlatıp ls
komutu ile /dev
dizinini görüntülediğimde SPI cihazlarının sorunsuz yüklenmiş olduğunu gördüm.
$ ls -l /dev/spi* crw------- 1 root root 153, 0 Nov 1 12:22 /dev/spidev0.0 crw------- 1 root root 153, 1 Nov 1 12:22 /dev/spidev1.0
İlk Yorumu Siz Yapın