SPI mit bidirektionale Datenverbindung

Gast #3588115
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!
Gast #3588148
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
Moderator (Firma: Titel) Persönliche Seite #3588161
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
         |                     |
Gast #3589520
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?
#3589548
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.
Gast #3589884
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)
Gast #3592632
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

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