Forum: Mikrocontroller und Digitale Elektronik Anfrage wegen SPI auf Arduino Due


von Hobby B. (bastler2022)


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

von Jim M. (turboj)


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.

von Loocee L. (loocee)


Angehängte Dateien:

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.

von Hobby B. (bastler2022)


Lesenswert?

Hallo Jim M.

danke für die Info.

Jim M. schrieb:
> 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.

Gruß bastler2022

von Hobby B. (bastler2022)


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

von Jörg (jojopirat)


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

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Jörg schrieb:
> Es wäre wünschenswert, wenn sich mal jemand die Mühe macht die
> Arduino-SPI-Bibliothek so umzuschreiben, ...

DU könntest dieser Jemand sein. Arduino lebt davon, dass jemand 
irgendwelche Bibliotheken schreibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.