Forum: Mikrocontroller und Digitale Elektronik Raspberry PI SPI: Mehr als 2 chipselects?


von Steff (Gast)


Lesenswert?

Hallo,

der Raspberry PI hat standardmäßig eine SPI Schnittstelle mit 2 
chipselects. Laut diesem Beitrag ist es möglich per device tree möglich 
weitere chipselects hinzuzufügen, die dann als eigenes devce unter 
/dev/spidev0.x auftauchen:

https://www.raspberrypi.org/forums/viewtopic.php?t=98318&start=25#p821666

Ich habe es nach genau diesem Vorgehen, also
- DTS kompilieren
- dtbo nach /boot/overlays schieben
- overlay in /boot/config.txt aktiveren
geschafft dass die weiteren SPI devices auftauchen, nun also insgesamt 4 
Stück. Bei Testen der einzelnen Schnittstellen ist mir aufgefallen dass 
bei den ersten beiden ursprünglichen devices (spidev0.0 und spidev0.1) 
nur jeweils in paar Impulse aus SCK kommen und die entsprechende CS 
Leitung nicht gesetzt wird. Die beiden neuen devices funktionieren 
dagegen wunderbar. Entfernt man den Overlay wieder, funktioneren die 
beiden alten CS auch wunderbar.
Hat das jemand mit weiteren CS Leitungen hinbekommen?
Hier ist noch der Quellcode des Overlays:
1
/dts-v1/;
2
/plugin/;
3
4
/ {
5
   compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";
6
7
   fragment@0 {
8
      target = <&spi0>;
9
      frag0: __overlay__ {
10
         #address-cells = <1>;
11
         #size-cells = <0>;
12
         pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
13
         status = "okay";
14
         cs-gpios = <0>, <0>, <&gpio 25 1>, <&gpio 24 1>;
15
16
         spidev@2{
17
            compatible = "spidev";
18
            reg = <2>;   /* CE2 */
19
            #address-cells = <1>;
20
            #size-cells = <0>;
21
            spi-max-frequency = <500000>;
22
         };
23
24
         spidev@3{
25
            compatible = "spidev";
26
            reg = <3>;   /* CE3 */
27
            #address-cells = <1>;
28
            #size-cells = <0>;
29
            spi-max-frequency = <500000>;
30
         };
31
      };
32
   };
33
34
   fragment@1 {
35
      target = <&gpio>;
36
      __overlay__ {
37
            spi0_cs_pins: spi0_cs_pins {
38
            brcm,pins = <25 24>;  /* reserve default spi cs pins */
39
            brcm,function = <1>; /* out out out out out */
40
         };
41
      };
42
   };
43
};

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.