Anfrage wegen SPI auf Arduino Due

OP #7358701
Lesenswert?

Hallo,

hier mal mein kleines Problem, daran hänge ich gerade leider etwas.

Auf dem Arduino Due verfügt der SAM3X über erweiterte SPI-Fähigkeiten. Es ist möglich, diese erweiterten Methoden oder die AVR-basierten zu verwenden. Die erweiterte API kann die Pins 4, 10 und 52 für CS verwenden.

Soweit ist das auch alles klar jetzt die Frage dazu, wenn ich 5x CS benötige bleibt mir da nur der Weg über Multiplex und wen ja welcher IC wäre da am besten geeignet für ? Die Frage nach dem IC stellt sich hier da ich die SPI Geräte mit unterschiedlichen Bus Geschwindigkeiten betreibe möchte.

Oder gibt es einen sauberen Weg das in der Software umzusetzen, das man weiteren Pins als CS Deklarieren kann ?

Habt Ihr da Tipps oder Links oder mal Beispiele zu wie man das am besten machen kann, nutzen tue ich die Aktuelle Arduino IDE dazu.

Hoffe mal habe hier jetzt nichts relevantes vergessen zu meiner Anfrage.

Gruß und schönes Wochenende. bastler2022

#7358724
Lesenswert?

Oftmals verwendet man für CS ganz normale GPIOs, weil das CS Hardware Timing nicht zu den Anforderungen des Slaves passt.

Bei vielen Chips muss man aber mit HF Problemen bei hohen SPi Taktraten rechnen, denn die Busleitungen werden lang und komplex im Layout.

Ich habe daher auch schon mal µCs benutzt die einen SPI Bus an verschiedenen Sätzen Pins ausgeben können (und dann neben den CS auch die Pin config umgeschaltet). Das waren aber mehrere ADCs mit 8x 24-Bit Kanälen.

#7358746
Lesenswert?

Atmel hat da eine - wie ich meine - sehr pfiffige Dual-Lösung eingebaut.

Zum einen kann man vier Chip Selects dezidiert verwenden und der SPI Maschine überlassen wie sie diese aktiviert. Man kann aber in einem Konfigurationsregister das Verhalten so ein- stellen dass die vier Chip Select Bits einen 1 aus 16 (oder 1 aus 8) Selector steuern mit dem man dann mehr Slaves bedienen kann ohne unnötig CS-Ausgänge zu verschwenden.

Einfach mal im Datenblatt nachlesen, steht alles drin. Nur lesen und verstehen muss man es halt. Und Leute aus der Arduino-Welt die über den Tellerrand nicht hinausschauen können oder wollen wird dieser Weg sowohl verborgen als auch verschlossen bleiben.

Angehängte Dateien:
OP #7358941
Lesenswert?

Hallo Loocee L.

Loocee L. schrieb:

Atmel hat da eine - wie ich meine - sehr pfiffige Dual-Lösung eingebaut.

Zum einen kann man vier Chip Selects dezidiert verwenden und der SPI Maschine überlassen wie sie diese aktiviert. Man kann aber in einem Konfigurationsregister das Verhalten so ein- stellen dass die vier Chip Select Bits einen 1 aus 16 (oder 1 aus 8) Selector steuern mit dem man dann mehr Slaves bedienen kann

ist soweit ja alles richtig was Du hier schreibst. Wenn man sich auf den Prozessor und sein Datenblatt bezieht.

Loocee L. schrieb:

Einfach mal im Datenblatt nachlesen, steht alles drin. Nur lesen und verstehen muss man es halt.

Kennst Du das Datenblatt des Arduino Due und auch die Problematik mit den nicht belegten Pin ( Pins ) ?

Wir sprechen hier aber über den Arduino Due und hier hast dann nur noch 3 Chip Select zur Verfügung. Das man das Multiplexen kann hatte ich oben ja auch schon geschrieben. Selbst mit einen einfachen BCD Decoder Chip wäre das machbar aber sicher nicht die beste Variante. Deshalb hatte ich nach einer IC Empfehlung gefragt gehabt.

Loocee L. schrieb:

ohne unnötig CS-Ausgänge zu verschwenden.

Hier reden wir über 2 zusätzliche CS Pins die benötigt werden. Von der erweiterten API die ich nutze und die Bestandteil der IDE ist werden nur 3 CS Pins bereitgestellt. Hast dazu eine Idee, dann könnte ich mir das mit dem Multiplexen sparen.

Loocee L. schrieb:

Einfach mal im Datenblatt nachlesen, steht alles drin. Nur lesen und verstehen muss man es halt. Und Leute aus der Arduino-Welt die über den Tellerrand nicht hinausschauen können oder wollen wird dieser Weg sowohl verborgen als auch verschlossen bleiben.

Das lasse ich mal unkommentiert.

Allen noch ein schönes Wochenende Gruß bastler2022

#7483740
Lesenswert?

Hallo zusammen,

das Problem beim Due ist, dass der verwendete MC SAM3X8E zwar viel kann, aber die üblichen Arduino-Bibliotheken das nicht unterstützen.

Verwendet man die Arduino-Biblioithek ist man selbst in der erweiterten SPI-Bibliothek auf die softwaremäßige Ansteuerung der CS-Leitungen durch die Bibliothek beschränkt.

Wenn man die hardwaremäßigen Chipselect-Fähigkeiten des SAM nutzen möchte, muss man die SPI-Interfacefunktionen des SAM benutzen, kann dann aber nicht mehr die SPI-Bibliothek verwenden.

Da ja die meisten Ardunio-Bibliotheken für die Busteilnehmer davon ausgehen, dass man die Arduino-SPI-Bibliothek verwendet, muss man auch auf diese verzichten. Das ist ziemlich ärgerlich.

Die Beschränkung, dass auf dem Arduino Due Board nur drei von vier Chipselect Pins herausgeführt wurden, ist gar nicht mal so schlimm. Die Bibliothelken sind das Problem.

Es wäre wünschenswert, wenn sich mal jemand die Mühe macht die Arduino-SPI-Bibliothek so umzuschreiben, dass sie nicht bloss softwaremäßig die Chipselectleitungen steuert, sondern dass man die Hardwarefähigkeiten des SAM konfigurieren kann.

Gruß

Jörg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren