SPI Kommunikation funktioniert nicht, spi_bcm2835 scheint nicht geladen zu werden

  • Hallo zusammen,


    ich versuche meinen WS2801 LED Stripe über das SPI Interface meines Raspberry Pi's 4 anzusprechen. Der grundsätzliche Aufbau und mein Test-Skript hab ich mit meinem altem RPI3 validiert, da funktioniert alles einwandfrei.


    Aktuell läuft der RPI unter folgendem Kernel: Linux ubuntu 5.3.0-1030-raspi2 #32-Ubuntu SMP Sun Jul 12 21:20:28 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux

    Soweit ich es verstanden habe, sind für eine Kommunikation über SPI die Module spidev und spi_bcm2835 notwendig.

    Lsmod gibt folgendes aus:

    Code
    spidev                 28672  0

    Nach meinem Kenntnisstand sollten hier beide Module auftauchen. sudo modprobe spi_bcm2835 geht zwar ohne Fehler aber löst nicht das Problem. Unter /dev seh ich sowohl spidev0.0 und spidev0.1, wie es sein sollte.


    In /boot/firmware/config.txt hab ich folgendes eingetragen:

    In /etc/modules :

    Code
    i2c-dev
    spi-bcm2835
    spi-dev
    snd-bcm2835

    Das Modul wird auch nicht durch eine Blacklist blockiert. dmesg zeigt zwar eine Fehlermeldung dazu an:


    Code
    [    1.559971] spi-bcm2835 fe204000.spi: could not get clk: -517, 


    soweit ich es gelesen habe, kann dies aber ignoriert werden, da das Modul später nochmal geladen wird und der Fehler nur einmal auftaucht. Führe ich mein Testskript aus, so kommt zwar keine Fehlermeldung, aber es tut sich auch nichts an den LEDs.


    Ich habe echt schon so viele Seiten durchsucht nach Hinweisen, aber keiner hat geholfen.
    Habt ihr eine Idee?


    LG,

    Micha



  • Moin Kartenmischa,


    mhm, in der README für overlays gibt es kein spi-bcm2835. Zumindest ist es bei dem Raspberry Pi OS so.

    Keine Ahnung ob es bei Ubuntu sein muß.


    Aber lass es doch einfach mal weg....


    Du kennst den SPI-Test?

    Siehe HIER. Ziemlich weit unten.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Hi!

    danke für deine Antwor.


    Ja das mit dem overlay war auch nur ein weiterer Versuch, also ändert auch nichts wenn man es weg lässt.


    Genau den kenn ich. Da werden mir allerdings nur 00er angzeigt, also scheinbar wird das irgendwie nicht erkannt. Aber macht ja auch Sinn wenn das spi-bcm wahrscheinlich nicht richtig geladen wird oder?

  • Moin Kartenmischa,


    mhm, in der README für overlays gibt es kein spi-bcm2835. Zumindest ist es bei dem Raspberry Pi OS so.

    Keine Ahnung ob es bei Ubuntu sein muß.

    Da ich kein Ubuntu habe, kann ich nicht für dich nachsehen.


    Code
    [Test]
    dtoverlay=spi-bcm2835

    Dieser Eintrag in der /boot/config.txt ist bei RaspberryPi OS sinnlos. Es steht weder in lsmod noch in /etc/modules was drin.

    Warum aktivierst du nicht einfach SPI und probierst es einfach.


    Ansonsten hätte ich gern die Quelle deines Wissens.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Aktuell läuft der RPI unter folgendem Kernel: Linux ubuntu 5.3.0-1030-raspi2

    Ich weiß nicht, warum es nun unbedingt UBUNTU sein muss, um solche Dinge zu erledigen. Das Aktivieren scheint ja nicht das einzige Problem zu sein. Guck.


    Edit: Kartenmischa Weils mich interessiert hat: Du musst überhaupt nicht händisch in den configs herumfummeln, sowohl I2C als auch SPI sind bereits aktiviert und benötigen keine Eintragungen aus der Steinzeit. Nimm die wieder raus.

    dtparam=spi=on

    dtparam=i2c_arm=on

    aus Deiner config.txt zeigen das.

  • Hey,

    Danke erstmal für eure ganzen Antworten.

    Ubuntu ist leider Vorgabe für das Projekt (da kann ich nicht abweichen:/)

    Ich hab auch nicht das raspi-config Menü zum laufen bekommen weshalb ich nicht über die GUI das SPI aktivieren kann, deshalb dachte ich, ich probiere es einmal mit den Einträgen in der config.txt


    Aber ja es stimmt, dass SPI und I2C eigentlich Standardmäsig aktiviert sind.


    Habt ihr noch Ideen woran es liegen könnte oder wie ich rausfinden kann was defekt ist?

  • Moin Kartenmischa,


    du hast doch diese Einträge:

    Code
    ls -la /dev/spidev0.*
    crw-rw---- 1 root spi 153, 0 Jan 30 23:22 /dev/spidev0.0
    crw-rw---- 1 root spi 153, 1 Jan 30 23:22 /dev/spidev0.1

    Warum sollte das nicht gehen. Im Moment blicke ich bei deiner Sache nicht durch.

    Ubuntu ok, aber gehst du nach einem Tutorial vor?? Sprich, bitte.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Habt ihr noch Ideen woran es liegen könnte oder wie ich rausfinden kann was defekt ist?

    Weder sollst Du raspi-config zum Laufen bekommen (was zwar funktioniert, jedoch die config.txt an einer anderen Stelle erwartet und deshalb nicht richtig klappt) noch irgendwelche Eintragungen machen, wenn Du nicht weisst, was Du da tust. Du fummelst an einem 64Bit OS mit "Anleitungen" für etwas völlig anderes herum. Der Link war nur zum Lesen und Verstehen gedacht, z. B. um die Rechte des Nutzers für SPI/I2C zu klären. Es wird IMHO nichts Defekt sein.


    1. Mach alle DEINE Eintragungen rückgängig, sowohl SPI als auch I2C sind bereits aktiviert und funktionieren. Deine Anfrage beruhte auf der falschen Annahme, etwas aktivieren zu müssen, das stimmt so nicht.

    2. Was ist das für eine ominöse Vorgabe?

    3. Wie stellst Du fest dass die Kommunikation fehlt

    4.Welche Hardware hast Du wie angeschlossen?

  • Hallo zusammen,


    erst einmal möchte ich mich entschuldigen für mein Vorgehen, Ich bin relativ unerfahren was den Umgang mit dem Pi angeht und hatte von der Arbeit den Druck, dass Projekt möglichst schnell zum Laufen zu bekommen.

    Danke für eure vielen Antworten Bernd666  STF


    1. Ich habe alle vorgenommenen Änderungen in der config.txt und /etc/modules rückgängig gemacht

    2. ls -l /dev/spi* ergibt


    Code
    crwxrwxrwx 1 root root 153, 0 April 11 2019 /dev/spidev0.0
    crw------- 1 root root 153, 1 April 11 2019 /dev/spidev0.1

    3. Aus folgendem Grund habe ich versucht mit den manuellen Einträgen (welche ja falsch waren), das Problem zu beheben: Ich auf mehreren Seiten gelesen, dass für eine Kommunikation über SPI, lsmod das Modul spi_bcm2835 ausgeben sollte, was bei mir nicht der Fall ist. Ich habe gerade noch einmal nachgeschaut und ebenfalls festgestellt, dass diese Informationen sich auf ältere Modelle und andere OS bezogen haben. Also eventuell ist dies auch nicht mehr notwendig?


    4. Wie stelle ich fest das etwas nicht funktioniert?

    Ich habe mein LED-Band folgendermaßen mit dem PI verbunden:

    Ich brauche in diesem Fall ja den MISO Pin nicht, da das Gerät ja nur Input vom Master braucht, aber selbst nicht mit dem Master interagieren muss (soweit mein Verständnis von MOSI und MISO, korrigiert mich gerne wenn ich falsch liege).

    Also Testskript für das Ansteuern und Abspielen der LEDs verwende ich folgendes Skript von hier:


    Gestartet wird das Ganze dann mit sudo ./ledstrip test, wobei die test Datei so aussieht:

    Starte ich das Skript erfolgt zwar keine Fehlermeldung, aber es tut sich auch nichts auf dem LED Band. Aus diesem Grund habe ich daraus geschlossen, dass irgendetwas noch nicht richtig funktioniert.


    Ich habe als Validierung der Hardware, Verbindung und des Codes auf meinem alten Pi3 (hier läuft Ubuntu 18.04) über raspi-config SPI aktiviert. Hier zeigt das LED Band wie gewollt das Muster. Außerdem zeigt lsmod auch spi_bcm2835 an (deshalb auch meine Bemühungen, über die manuellen Einträge spi_bcm2835 irgendwie zu aktivieren)


    5. Ein Jumper-Kabel zwischen MOSI und MISO und das Ausführen des Test-Skripts, zu finden HIER ganz unten, liefert:


    Ich hoffe Vorgehen und das Problem ist nun etwas deutlicher. Der letzte Test zeigt ja eigentlich, dass die Kommunikation zwischen Master und Slave funktioniert, richtig?


    Vielen Dank für die Hilfe!

  • erst einmal möchte ich mich entschuldigen für mein Vorgehen,

    Das finde ich ziemlich cool, entschuldigen musst Du Dich jedoch nicht. Wir alle haben mal irgendwann ganz vorn angefangen. Wichtig ist nur das Wollen.


    Auf den schnellen Blick sieht das ganz gut aus, vorausgesetzt, Du hast das wirklich so angeschlossen (Pins gezählt). Jetzt kann ich mal nur jar zitieren: "Bau einen Pegelwandler dazwischen!" . Der Strip funktioniert mit 5V (Pegeln). Es kann sein, dass er am Pi geht, muß es jedoch ganz und gar nicht. Selbst die unterschiedlichen Modelle können durchaus ein Grund dafür sein.

  • Scheinbar war es tatsächlich noch ein Software Problem. Ich habe Ubuntu nochmals neu installiert und jetzt funktioniert alles wie gewollt!:) Danke für die Hilfe!