Hallo,
ich stehe aktuell vor dem Problem das ich 3 SPI Module habe die ich gerne an ein Arduino Bord anschließen möchte,
im Idealfall an das Arduino Nano, zur not aber auch an jedes Andere Arduino Bord.
Ich habe 1 SD Karten Modul, das auch Fehlerfrei an dem Nano läuft, zusätzlich habe ich noch ein Ethernet Modul
und einen Sensor, ich weis das ich auch das Ethernet Shild nehmen könnte wo ein SD modul mit integriert ist, aber aus platzgründen habe ich mich für die einzelmodule entschieden ... ich habe im internet gelesen das SPI grundsätzlich 2 Arten von mehrfach Clienten erlauft, Stern und Reihenschaltung, wobei die Sternschaltung wohl das Optimum ist ...
hat von euch jemand schon mal mehr als ein SPI Modul gleichzeitig an einem Arduino Bord gehabt und kann mir erklären wie ich das zum laufen bringe ?
Dann braucht du für jedes Gerät eine CS (Chip Select) Leitung. Die jeweilige CS Leitung wird vor dem Datentransfer auf Low geschaltet und danach wieder High.
okay verstanden ... erstmal vielen dank !
wie läuft das den beim empfangen von Daten oder ist das Analog zum Senden ?
ich meine bei einem Ethernet Modul, weis ich ja quasi nicht wirklich wann daten ankommen, bei der SD Karte ist das natürlich anders
Bei Ethernet hast du genauso wie bei SD Karten eine Lib die das alles für dich macht. Da sind ja zwischen der SPI Schnittelle und der Ethernet Schnittelle noch mehrere andere Ebenen auf dem Ethernet Controller.
Per Hand geht das Empfangen geht ebenfalls mit SPI.transfer():
Siehe z.B. die SpiRAMRead8() Funktion hier:
Da werden erst 3 Bytes als Kommando geschickt und danach eines gelesen. Dabei wird halt 0xFF als Dummy-Parameter übergeben.
Aber das ist nur für solche Sachen wie Speicher-Bausteine oder A/D-Wandler. Bei Ethernet ist das alles in Funktionen gekapselt und du brauchst dich um die Details nicht zu kümmern. Da hat man sowas wie client.available() um abzufragen ob Daten da sind.
Da erübrigt sich allerdings auch die Frage etwas. Das dann nichts direkt mit SPI zu tun. Da gibt es z.B. das:
Wegen CS:
Bei der Standard Ethernet Lib wird der Hardware Pin verwendet. Bei der SD Lib kann man den CS Pin bei SD.begin() angeben und damit einen anderen verwenden:
In beiden Fällen wird CS dann auch automatisch geschaltet wenn was übertragen wird.