"Enter"a basıp içeriğe geçin

Orange Pi Zero ve Armbian Linux SPI Sorunu ve Çözümü

 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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir