Forum: Mikrocontroller und Digitale Elektronik SPI mit bidirektionale Datenverbindung


von KAstudents (Gast)


Lesenswert?

Hallo,

habe schon in bestehenden Foreneinträgen nach einer Lösung gesucht, 
keine gefunden, daher mein neuer Eintrag.

Ich habe in meinem Projekt einen Sensor als Slave (TLE5012B, Infineon) 
und einen uC als Master (V850-Px, Renesas). Beide sollte über SPI 
miteinander kommunizieren, was laut Sensor (SPI kompatibel mit SSC 
Interface) kein Problem sein soll. Jedoch ist am Sensor statt den beiden 
MISO/MOSI Leitungen nur eine bidirektionale Datenleitung vorhanden. Der 
Sensor soll dabei sowohl Daten senden, wie auch einlesen können und 
genauso auch der Master.

Der Versuch alle 3 Leitungen mit einem Pull-Up Widerstand zu verbinden 
und während den Sendungen vom Slave vom Master auf High halten, hat 
leider nichts gebracht.

Hat jmd noch eine Idee/Erfahrung wie die Kommunikation sonst gestalten 
kann?

Danke!

von Peter Z. (hangloose)


Angehängte Dateien:

Lesenswert?

Vielleicht so wie im Bild...

von Stefan (Gast)


Lesenswert?

MOSI-Master -> Widerstand -> MISOMOSI-Slave
MISO-Master        <-        MISOMOSI-Slave


Wenn der Slave auf Empfangen geschaltet ist, kommen Befehle vom Master 
durch den R unverfälscht am Slave an.
Für die Antwört enabled der Slave seinen MISOMOSI-Pin.

Am MISO des Masters empfängst Du sowohl die Befehle des masters als auch 
die darauffolgende Antwort des Slaves.

Gruß Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

KAstudents schrieb:
> Jedoch ist am Sensor statt den beiden MISO/MOSI Leitungen nur eine
> bidirektionale Datenleitung vorhanden. Der Sensor soll dabei sowohl
> Daten senden, wie auch einlesen können und genauso auch der Master.
Sieh dir mal das Protokoll im Datenblatt an. Da wirst du erkennen, dass 
eben immmer nur einer aktiv "reden" darf, der andere hört zu.

Am einfachsten geht die Ansteuerung über Bitbanging, weil du dann den 
MOSI-Pin des uC hochohmig schalten kannst. Alternativ kannst du den 
MOSI-Pin des uC über den angesprochenen Widerstand so hochohmig machen, 
dass dessen "Geplapper" beim Empfangen nicht mehr stört:
1
 uC      |                     |    TLE
2
         |                     | 
3
    MOSI |-----4k7-----o-------| DATA
4
         |             |       |
5
    MISO |-------------'       |
6
         |                     |

: Bearbeitet durch Moderator
von KAstudents (Gast)


Lesenswert?

Danke für die Antworten.

Werde die hochohmige MOSI Leitung mit Bit-Banging mal ausprobieren.

von KAstudents (Gast)


Lesenswert?

Noch ein Frage zum Bit-Banging:

Soll der MOSI Port so hochohmig geschalten werden dass er eig keine 
Funktion mehr hat? Weil ich muss ja nachwievor Daten vom Master an den 
Slave schicken können, worauf der Slave antworten soll (nach einer 
kurzen Verzögerung).

Bzw. generelle Frage zum Bit-Banging: Benutze ich nur noch eine der 
beiden Leitungen (MISO/MOSI) und wechsel bei dieser zwischen In und 
Output? Oder benutzte ich beide und spreche sie nacheinander an? Wird 
dabei die kompletten vorkonfigurierten Register fürs SPI auf dem uC 
ignoriert und wirklich alles manuell gesteuert?

von Karl H. (kbuchegg)


Lesenswert?

KAstudents schrieb:
> Noch ein Frage zum Bit-Banging:
>
> Soll der MOSI Port so hochohmig geschalten werden dass er eig keine
> Funktion mehr hat? Weil ich muss ja nachwievor Daten vom Master an den
> Slave schicken können, worauf der Slave antworten soll (nach einer
> kurzen Verzögerung).

Was ist denn das Ziel?
Das Ziel ist es doch, dass der Slave die Kontrolle über die Leitung 
kriegt. D.h. der Master muss seine MOSI Leitung von dieser gemeinsamen 
Datenleitung wegschalten, so dass er sie nicht mehr beeinflusst.
Den Pin auf Eingang schalten sollte dafür ja eigentlich ausreichen.


> Bzw. generelle Frage zum Bit-Banging: Benutze ich nur noch eine der
> beiden Leitungen (MISO/MOSI) und wechsel bei dieser zwischen In und
> Output?

Du kannst beides machen.

> Oder benutzte ich beide und spreche sie nacheinander an? Wird
> dabei die kompletten vorkonfigurierten Register fürs SPI auf dem uC
> ignoriert und wirklich alles manuell gesteuert?

Ja, du machst alles manuell selber.
Daher kannst du auch alles über nur einen Pin für die Datenleitung 
abwickeln, wenn du das willst, weil du ja weißt, dass der Slave erst 
nach deiner Übertragung zu ihm aktiv wird.

: Bearbeitet durch User
von KAstudents (Gast)


Lesenswert?

noch kurze Frage die mir jetzt beim implementieren aufgefallen ist. Wenn 
ich den Takt manuell erzeuge: Muss der regelmäßig sein? Im Datenblatt 
des Sensors steht nur eine Maximalgeschwindigkeit (8MHz)

von KAstudents (Gast)


Lesenswert?

Hey danke für eure Hilfe! Es klappt! Doch mit Open-Drain Beschaltung und 
zusätzlichem Widerstand an der MOSI Leitung. Und es funktioniert sogar 
mit dem uC Spi-Treiber, also kein Bit-Banging nötig

von Peter Z. (hangloose)


Lesenswert?

Bitte ;-)

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.