Hallo zusammen,
Ich habe vor mehrere INTAN RHD2164 parallel per Mikrocontroller (µC)
anzusteuern. Diese verfügen über Serial Peripheral Interface (SPI),
welche allerdings für den Datenrücktransport (MISO) einen Dual Data Rate
(DDR) Ansatz verwenden. Daher suche ich nun seit einiger Zeit nach einer
Lösung um dieses DDR SPI zu handhaben. Bei meiner Recherche bin auf
etliche Beiträge gestoßen, welche aber mit DDR "Data Direction Register"
oder mit SPI "System Packet Interface" meinen.
Auch fand ich einige Hinweise auf Flash-Speicher mit DDR-SPI allerdings
keinerlei Informationen ob es entsprechende µC gibt, die ein
entsprechendes Interface mitbringen.
Meine Frage(n) wäre(n) also daher:
-sind euch entsprechende µC bekannt, die von Haus aus ein entsprechend
modifiziertes SPI mitbringen?
-ist alternativ die Verwendung eines Demux/entsprechenden
Schieberegisters(als Delay-Line)+ ein µC mit Dual-SPI realistisch?
-oder ist die Verwendung eines FPGA bzw. Hybrid (FPGA+µC) notwendig?
Ich würde gerne Sachen wie bit banging vermeiden und das ganze so simpel
wie möglich halten. Daher würde ich auch lieber einen µC statt eines
FPGA verwenden.
Vielen Dank in Voraus!
P.S: Der Chiptyp um den es geht ist der INTAN RHD2164 (
http://www.intantech.com/files/Intan_RHD2164_datasheet.pdf ). Es handelt
sich dabei um zwei 32 Kanal Ableitungschips, die sich auf einem Die
befinden und deren Daten per DDR MUx rausgeschrieben werden.
Hmm, mit zwei SPI am Master könnte das schon gehen.
Den Clock zurückführen auf die zweite SPI am uc (in Slave
Konfiguration). MISO vom Chip auch zusätzlich zum Slave.
Die erste SPI stellst du auf steigende Flanke, die zweite auf fallende.
Die beiden 16 bit Werte wieder zusammenrechnen zu einem 32 bit Wert.
Warum ich gerne einen Softwareansatz vermeiden würde ist, weil ich
mehrere von den INTAN parallel ansteuern will und der µC zusätzlich noch
die Kommunikation mit der Außenwelt in Form eines Netzwerks durchführen
soll.
Die Idee mit dem zweiten SPI in Slave Einstellung klingt verlockend
einfach. Ich bin allerdings recht neu in der Thematik und frage mich, ob
zwei Schnittstellen an einem µC hinreichend synchron sind, dass das
"Durchschleifen" des Clock-Signal ausreicht um hinterher die einzelnen
Bits korrekt zuordnen zu können.
Christian B. schrieb:> ob zwei Schnittstellen an einem µC hinreichend synchron sind, dass das> "Durchschleifen" des Clock-Signal ausreicht um hinterher die einzelnen> Bits korrekt zuordnen zu können.
Synchroner gehts fast nicht mehr als Master und Slave am selben uc.
Ein Problem seh ich jedoch wenn ich mir das Timing ansehe.
Mit meinem Ansatz würdest du das Bit B0 verlieren...
Bei diesem tollen Chip soll nämlich bei der steigenden, der fallenden
Flanke, UND steigenden CS Flanke (B0) gesampelt werden.
Sowas kann wieder nur einem Hardwarekollegen eingefallen sein...
Es müsste doch eigentlich möglich sein, die beiden Kanäle nacheinder zu
lesen, indem nach dem Lesen eines Kanals die SPI Polarität umgeschaltet
wird. Allerdings wird dabei die Hälfte der Samples verworfen. Aber
besser als Bit_Banging allemal, denn man braucht schon eine relativ hohe
SCLK (laut Spec. max. 25MHz) um die maximalen 1,05 Megasamples mal 16
bit ausnutzen zu können.
Klaus 2m5 schrieb:> Es müsste doch eigentlich möglich sein, die beiden Kanäle nacheinder zu> lesen,
Auch wenn du es nacheinander machst, was nicht nowendig ist wennst zwei
SPI hast, hast du noch immer das Problem mit B0. Das will auf die
steigende Flanke von CS gesampelt werden (kein Clock). Mann könnte noch
was tricksen und nach dem Senden noch das B0 manuell lesen. Ist nur die
Frage wie lang das noch ansteht, und ob sich das zeitlich ausgeht.
Wenn man unter CS aktiv SCLK polarity umschaltet, wird bereits eine
halbe clock erzeugt. Man hat allerdings am Ende dann eine halbe clock
zuviel...
Wenn ich das richtig sehe, bleibt am Ende B0 stehen bis CS deaktiviert
wird.
ttl schrieb:> der kann ja nur 1 Mbit, das kannst du doch locker in Software machen auf> einem flotten MC
Erst Datenblatt lesen, dann schreiben.
Im Datenblatt steht: Maximum SCLK frequency is 24 MHz und DDR.
Da ist nix mehr mit einem beliebigen 8Bit MC und erst recht nicht in
Software.
@Christian B
Wieviel von den Dingern willst du anschliessen und mit welcher
Übertragungsdatenrate betreiben ?
Und denk daran das nach der Übertragung die Daten ja auch irgendwie
bearbeitet werden.
Zunächst sind nur 4 Chips mit einer Sampling Rate von grob 300 Hz
geplant. Später soll aber die Rate möglichst hoch werden. Könnte es
nicht sein, dass das Timing Diagramm einfach nur "unzureichend"
gezeichnet ist bzw. was hindert mich denn daran einfach noch ein Clock
dranzuhängen (zur Not schiebe ich halt ein NOP über das MOSI)?
Okay ein NOP nach jedem Befehl ist Blödsinn...
Das SPIFI schaue ich mir mal an. Müsste ich nur Controller finden, die
davon mehrere unterstützen, falls es das ist was ich suche.
Christian B. schrieb:> Okay ein NOP nach jedem Befehl ist Blödsinn...> Das SPIFI schaue ich mir mal an. Müsste ich nur Controller finden, die> davon mehrere unterstützen, falls es das ist was ich suche.
Du könntest auch ein kleines FPGA oder ein CPLD mit der Arbeit betrauen
und dann gff. Parallel ausgeben.
Christian B. schrieb:> Zunächst sind nur 4 Chips mit einer Sampling Rate von grob 300 Hz> geplant. Später soll aber die Rate möglichst hoch werden. Könnte es> nicht sein, dass das Timing Diagramm einfach nur "unzureichend"> gezeichnet ist bzw. was hindert mich denn daran einfach noch ein Clock> dranzuhängen (zur Not schiebe ich halt ein NOP über das MOSI)?
Das Datenblatt, das ich gefunden habe zeigt nur das SPI Timing und auch
das ist nicht so ganz klar, denn es wird nur eine Übertragung von 16/32
Bit gezeigt. Der Chip selbst hat aber intern 8Bit Register.
Der Rest ist Schweigen ... Warum die Wandlungsrate für 32 kanäle 1Ms/s
und bei 64 Kanälen nur 30Ks/s obwohl da 2 Ad Wandler mit jeweils einem
32:1 Mux davor vorhanden sind.
Da die SPI Schnittstelle viel schneller ist, kannst du prinzipell
während der AD Wandler beschäftigt ist den nächsten Chip bedienen.
Ich wünsch dir auf jedem Fall viel Spass mit den Dingern ;)
Falls ich da mal doof fragend reingrätschen darf: Meine
SPI-Speichermodule 23LC1024 haben ja sogar die Möglichkeit, nicht nur
DDR, sondern QDR-SPI auf zusätzlichen Leitungen zu machen. Die Idee ist
zwar naheliegend, aber gibt es überhaupt µCs, die das ansprechen können?
So bin ich auf den "Normal-SPI"-Modus angewiesen und verschwende 75% der
möglichen Geschwindigkeit.
Da ist zwar ein zweiter SPI-Port denkbar, aber bei den Geschwindigkeiten
zweifel ich fast, das in Software zusammengebastelt zu bekommen in den
korrekten Datenstrom. (20 MHz max mit QDR wären ja fast 80 MBit bei
linearem kontinuierlichen Zugriff.)
Entschuldigung für das Zwischenfragen, aber es passt ja irgendwie schon.
Dirk K. schrieb:> Falls ich da mal doof fragend reingrätschen darf: Meine> SPI-Speichermodule 23LC1024 haben ja sogar die Möglichkeit, nicht nur> DDR, sondern QDR-SPI auf zusätzlichen Leitungen zu machen. Die Idee ist> zwar naheliegend, aber gibt es überhaupt µCs, die das ansprechen können?
Wenn der Controller Hardware-Unterstützung für SD-Karten mitbringt
vielleicht.
Als kleiner Nachtrag, falls jemand jemals ein ähnliches Problem haben
sollte:
Also es ist tatsächlich möglich mit einen RHD2164 mit Hilfe von zwei SPI
Modulen eines µC (MSP430) korrekt zu kommunizieren, indem man das SPI
Modul A als Master mit UCCKPH und SPI Modul B als Slave ohne UCCKPH
betreibt und hinterher das B0 Bit manuell aufsammelt.