Raspberry Pi 3B über SPI Schnittstelle

  • Dies ist eine Vorgabe. Ich denke auch, dass der Lerneffekt auf jeden Fall höher sein wird, wenn ich die Bits selbst einlesen lasse....

    Hättest du vielleicht eine Vorstellung wie man das am besten mit der tfr Funktion realisieren kann?

  • Moin Raspyy123,


    erstmal: Herzlich Willkommen im Forum!


    Am Anfang eine Bitte. Schreibe Code immer in Codeblocks </> . Dann sieht man auch die Einrückungen, sprich Formatierung, besser.

    Ein Beispiel:

    Code
    def pulseHigh(pin): # Function to send a pulse
        GPIO.output(pin, True) # do it a few times to increase pulse width
        GPIO.output(pin, True)
        GPIO.output(pin, True)
        GPIO.output(pin, False) # end of the pulse
        return


    Du willst/sollst also das SPI-Protokoll selbst schreiben? Du hast dich damit auch schon befasst?


    Achja, bei Python kann ich dir nicht helfen. Nur das du Python3 nehmen musst.


    Gruss 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.

  • > Meine Frage nun: Wie würdet ihr CSB einbauen?

    CSB ist ja wirklich das einfachste Signal. Auf Low setzen vor der Transaktion und danach wieder auf High.


    > und generell Read and Write?

    Write ist im Beispielcode ja drin. Bedenklich ist nur dass die eine Version das MSB zuerst schickt und die andere das LSB.


    Fuer Read wird das Inputsignal zum korrekten Zeitpunkt abgelesen und die Bits an die richtige Stelle im Byte, Word oder DWord geschrieben.

  • ich habe den Code geändert und zuerst den MSB geschickt...weil das im Datenblatt so stand (S.6 Abb.2).


    das heißt nach jedem 8. Bit würde CSB auf high gehen, das stimmt ja eigentlich nicht.


    Das heißt ich müsste dann nur read einbauen, damit diese eine Anweisung richtig übermittelt und eingelesen werden kann..?


    und Adressen mit dem jeweiligen Content, zb 0x180064, wie würdet ihr diese übermitteln? mit einer ODER-Verknüpfung?

  • tfr_byte ist so nicht zu brauchen.


    Das Diagramm zeigt es doch: 1 Bit Read/Write, 15 Adress-Bits, 8 Datenbits


    Gueltige Daten zum Lesen gibt es erst nachdem die Adresse rausgeschrieben wurde.

  • könntest Du mir dann ein kleines Beispiel geben, wie du die Adresse rausschreibst bzw. Daten liest?

    Ich hatte etwas recherchiert und die Funktion tfr_byte wurde stets genutzt, um bits seriell zu übermitteln...

  • Code
    # Funktion zur Übermittlung der Anweisungen
    def tfr_byte(data): # Function to send a byte by serial "bit-banging"
        GPIO.output(CSB,false) # Pull the CSB low to enable the SPI port
        for i in range (0,7): # clock in the 8 preceding address bits
            GPIO.output(SDIO, data & 0x80) # Mask out MSB and put on GPIO pin "SDIO"
            pulseHigh(SCLK) # pulse the clock line
            data=data<<1 # Rotate left to get next bit
        GPIO.output(CSB,true) # Pull the CSB high to disable the SPI port, CSB goes high, serial data is loaded into the register
        return

    in meinen Augen wäre der Part richtig die Bits seriell abzuschicken, wenn ich jedoch die Adresse ox1800 mit dem Content 64 habe, weiß ich nicht genau, wie ich das übermitteln soll. Kannst du mir hierzu einen Tipp geben? Der Content bestimmt immer jeweils auch 4 Bits. Sprich die Zahl 6 ergibt sich aus 4 bits und die Zahl 4 ebenso.

  • Ungetestet, nach dem Beispiel vom Code oben: