SPI Lesen

  • Hallo,

    ich habe eine Schaltung aufgebaut wo der Raspberry SPI-Master und ein PIC-Controller ein Slave ist. Soweit so gut. Mein Problem liegt dadrin dass ich auf eine anfrage bei Slave mehrere Anworten heben möchte. Beispiel Master sendet 1 Byte und Slave anwortet mit 4 Bytes zurück.

    spi.writebytes(0x12)

    antwort=spi.readbaytes(0);

    print antwort[0]

    print antwort[1]

    print antwort[2]

    print antwort[3]



    ich finde ein Anwort nur im antwort[0] aber da ist nur der Letze Wert drin der von Slave gesendet wurde.

    Ich bitte um Hilfe


    :cursing::wallbash:

  • Lesen und schreiben erfolgen auf dem gleichen Takt und gleichzeitig. Wenn Du also nur 1 Byte schreiben, jedoch 4 Bytes lesen möchtest, dann mußt Du wohl oder übel 3 weitere "Paddingbytes" schreiben. Es handelt sich um einen gleichzeitigen Transfer. Lesen und schreiben stehen also in der semantischen Abhängigkeit nur gleichzeitig durchgeführt werden zu können.

    Das klingt zunächst vielleicht seltsam, ist aber i.d.R. effizienter, als wenn man lesen und schreiben strikt nacheinander abarbeiten müßte.

  • Ok, ich will mich erst für den Tipp bedanken. Ich werde es heute Abend testen. Nur so vorab noch eine Frage wenn es wirklich so ist dass ich genau soviele bytes senden soll wie ich empfangen will müsste ich bei dem obigen Code doch das erste Byte von Slave im Antwort(0) haben oder? Da ist aber der letzte gesendete Byte. Hast du vielleicht dazu ein Tipp?

    Gruß

  • Woher willst Du wissen, was der letzte Wert ist?


    Nochmal, der Slave "sendet" nicht selbstständig. Der Slave gibt nur eine Bitfolge auf MISO zurück, wenn der Master einen Takt an SCK ausgibt. Und der Master gibt nur einen Takt aus, wenn er selbst eine Write- oder Read-Anfrage macht. Und um 4 Bytes aus dem Slave zu bekommen, muss er den Takt für 4 Bytes ausgeben.