Forum: Mikrocontroller und Digitale Elektronik Komisches SPI


von Robert (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Leute
Vielleicht hat jemand eine Idee zu meinem Problem ?

Ich habe da ein unbekanntes Gerät.... und das Gerät besteht aus zwei 
Modulen die miteinander kommunizieren.

Ich versuche das mal vernünftig zu beschreiben. ;-)

Modul A    (hat einen TMS320LF2406) (CPU)
Modul B    (hat einen TMS320F2808)   (verschiedene Sensoren)

Zwischen den Modulen ist noch ein 24LCX244 als Treiber (3 State)

Die Verbindung besteht aus 10 Leitungen wobei ich ein paar Leitungen zu 
SPI zuordnen kann. (die anderen sind Versorgung und Serielle Signale)

Ich werde aber aus den SPI Signalen nicht ganz schlau.
Wer ist jetzt der Master und wer der Slave ?

Die Leitungen im LA, habe ich mal Logisch zugeordnet.. 
(CS,Clock,MOSI;MISO usw.)
(durch das Datenblatt vom TMS320LF2406 (Modul1) muss MOSI/MISO aber 
nicht mehr stimmen)

Jetzt habe ich mal die Richtungen des Bustreibers (24LCX244) analysiert 
und jetzt bin ich ganz verwirrt.

Die Richtungen sind wie folgt:

Signal 2 (Enable?!)   Modul A  ->  Modul B
Signal 3 (MISO?!)     Modul A  <-  Modul B
Signal 4 (MOSI?!)     Modul A  ->  Modul B
Signal 5 (CS)           Modul A  ->  Modul B
Signal 6 (Clock)       Modul A  <-  Modul B

Soweit ich zum SPI raus finden konnte, müsste Clock immer vom Master 
kommen.
Dann müsste Modul B der Master sein ?!
Dann passt aber das CS nicht dazu, weil das kommt hier von Modul A

Laut TMS329LF2406 (Modul A)müsste Signal 3 MISO sein und Signal 4  MOSI 
(Datenblatt)
Clock stimmt mit SPI CLK
CS und Enable sind beim Modul A an jeweils einen I/O Pin vom 
TMS329LF2406(Modul A) geführt

Diese Signale seht ihr im Bild (Abschnitt 2)

-----
Dann ist mir noch der Abschnitt 1 im Bild aufgefallen.

Hier gibt es auch ein Clock Signal und Daten auf der MOSI und MISO 
Leitung
Da ich im LA die CS Leitung als CS definiert habe, sieht man bei 
Abschnitt 1 keine Daten.
Sobald ich aber im LA, dass Enable als CS einstelle, sehe ich bei 
Abschnitt 1 Daten.

Scheinbar wird da ein anderer Bereich angesprochen  ?!
Enable kommt aber auch von Modul A ?!

Ich weiß kompliziert, aber vielleicht hat jemand eine Idee Dazu ;-)

Danke für Antworten :-)

l.G. Robert

von Peter D. (peda)


Lesenswert?

A - Slave, B - Master
Signal 2 - fordert den Master zum SPI-Transfer auf
Signal 3 - MOSI
Signal 4 - MISO
Signal 5 - low Flanke sagt dem Master, er kann das nächste Byte takten.
Signal 6 - SCK

Das erste Byte ist vermutlich ein Befehl, daher braucht der Master etwas 
länger, den Befehl zu parsen.

von Robert (Gast)


Lesenswert?

Hallo Peter D.
Danke für die schnelle Antwort :-)

>Das erste Byte ist vermutlich ein Befehl, daher braucht der Master etwas
>länger, den Befehl zu parsen.
Wer sendet hier den Befehl ? Master oder Slave ?
Auf Signal 3 ist der Wert 1 und auf Signal 4 ein hoher Wert
(weiß den gerade nicht..)

Wie funktioniert das, wenn da immer MOSI und MISO Werte kommen ?
Ich war der Meinung, dass z.B. der Master zuerst auf MOSI die Werte 
schickt (z.B. Befehle oder Speicheradresse) und die Antwort vom Slave 
dann auf der MISO Leitung kommt.
Hier sehe ich immer Daten auf beiden Signalen gleichzeitig .(MISO/MOSI)

von Peter (Gast)


Lesenswert?

Hallo,

1.)
prinzipiell würde ich die Richtungen wie folgt festlegen:

Modul A = Master
Modul B = Slave

Warum ? Der Slave hat die Sensoren drauf und die sollen abgefragt 
werden.

2.)
Dann würde ich sagen, dass Dein ENABLE eher das CS ist.

Warum ? Nur dann sind die Daten durchgehend auch gültig ( und zwar auch 
in Abschnitt 1)

3.)
Dein CS ist eine (unabhängig vom SPI) weitere Steuerleitung, die dem 
Slave lediglich sagt:

'Bitte jetzt den nächsten Sensorwert anlegen'

Gruß Peter

von Robert (Gast)


Lesenswert?

Hallo Peter(gast)

>prinzipiell würde ich die Richtungen wie folgt festlegen:
>Modul A = Master
>Modul B = Slave

Aber Modul B sendet den Clock
Modul A kann diesen durch den Treiber nur empfangen..

--
>Dann würde ich sagen, dass Dein ENABLE eher das CS ist.

Das habe ich auch probiert.
Dann habe ich im Abschnitt 1 zwar Werte, aber die weiteren Werte von 
Abschnitt 2 werden verfälsch, weil dann Enable low ist, wenn gar keine 
Daten übernommen werden sollen.
Das jetzige CS passt viel besser zum Clock.
Zuerst CS low und dann Takt und Daten.

von Peter (Gast)


Lesenswert?

Robert schrieb:
> Dann ist mir noch der Abschnitt 1 im Bild aufgefallen.
>
> Hier gibt es auch ein Clock Signal und Daten auf der MOSI und MISO
> Leitung
> Da ich im LA die CS Leitung als CS definiert habe, sieht man bei
> Abschnitt 1 keine Daten.
> Sobald ich aber im LA, dass Enable als CS einstelle, sehe ich bei
> Abschnitt 1 Daten.

Das verstehe ich nicht. Dem LA ist es doch egal, wie Du die Signale 
zuordnest. Der zeichnet lediglich auf.

Auf Deinem Bild sieht man in Abschnitt 1 die Clock (Signal 6), den CS 
(Signal 2), MISO (oder MOSI, Signal 3) = 0, und MOSI (oder MISO, Signal 
4) = 0b01001101 = 77 (mal so geraten).

Oder versteh ich Dein Problem nicht ? Dann erklär bitte nochmal genauer.

Gruß Peter

von Peter (Gast)


Lesenswert?

Ich habe gerade gesehen, dass es ja 16 Bit sind. Aber ich denke Du 
weisst was ich gemeint habe.

Im Übrigen passt es auch sehr gut zu dem, was Peter D. gleich am Anfang 
gesagt hat: In Abschnitt 1 wird ein Kommando gesendet, dann wird durch 
den langen High Pegel auf MISO (Signal 3) die Antwort verzögert (z.B. 
weil der Slave erstmal das Kommando interpretieren muss), und zum Schluß 
werden die Daten rausgegeben - und zwar schoen getaktet (durch Signal 
5).

Gruß Peter

von Robert (Gast)


Lesenswert?

Hallo
Sorry für die späte Antwort.. (Urlaub)

@Peter (Gast)

>Das verstehe ich nicht. Dem LA ist es doch egal, wie Du die Signale
>zuordnest. Der zeichnet lediglich auf.
Ja, aber er rechnet mir auch die Werte aus.
Wenn ich das CS als Signal 5 definiere, rechnet er mir die Werte für 
MISO und MOSI aus  (siehe Bild)
Wenn ich Signal 2 als CS definiere, habe ich zwar auch Werte (auch beim 
Steuerbefehl (Abschnitt1)) aber MOSI ist irgendwann mal High und das 
falsche CS (Enable) noch low und es kommen dann falsch Werte raus.

Berufe mich auf volgendes Bild:
https://www.rahner-edu.de/s/cc_images/teaserbox_10249292.png?t=1506590058

Da ist das CS nur low, wenn der Takt anliegt und Werte übernommen werden 
sollen.
---
Verwirrend ist für mich:
Im obigen Bild kommen alle Signale (ausser MISO) vom Master.

Bei mir kommt das Clock und Signal 3(vermutlich MOSI) vom Master
und Enable,CS und Signal 4(MISO) vom Slave

Aber scheinbar kann der Slave auch das CS geben und nicht nur der Master 
?!

Und das Steuersignal wird wohl per Takt übernommen, wenn Enable = Low 
und CS = High ist ?!

l.G. Robert

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.