Forum: Mikrocontroller und Digitale Elektronik STM32 als I2C-Gateway?


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,
ich frage mich gerade, ob es möglich ist, einen µC mit zwei 
I2C-Peripherieeinheiten (z.B. STM32F103) transparent in einen I2C-Bus 
einzuschleusen. Im Normalfall soll er sich in die Bus-Kommunikation 
nicht einmischen - nur bestimmte Bus-Nachrichten manipulieren.

Desgleichen bei einem SPI-Bus. Erst einmal völlig transparent den Bus 
durchschleifen, aber bestimmte Kommandos filtern und verändern.

1. Sind die Hardware-SPI und I2C für so einen Zweck geeignet, oder müßte 
man soetwas als Bitbanging-Treiber selbst zusammenassemblern?

2. Hat soetwas schon jemand gemacht?

Ich suche (noch) keine Anleitung, sondern erst einmal eine Einschätzung 
zur Machbarkeit.

Viele Grüße
W.T.

von Programmierer (Gast)


Lesenswert?

Walter T. schrieb:
> 1. Sind die Hardware-SPI und I2C für so einen Zweck geeignet, oder müßte
> man soetwas als Bitbanging-Treiber selbst zusammenassemblern?

So etwas dürfte unabhängig vom Controller mit Hardware-I²C schwierig 
sein, denn wenn er auf der Empfangen-Seite eine Adresse empfängt muss er 
ja wissen ob er das ACK-Bit als 1 oder 0 senden muss, was er aber nur 
kann wenn er bereits die Adresse auf der Sende-Seite abgesendet hat. Mit 
anderen Worten: Jedes Adressbit muss direkt weitergereicht werden, und 
dann superschnell das ACK-Bit zurückgereicht. Hardware-I²C-Einheiten 
können so etwas generell nicht da unnötig für typische I²C-Anwendungen.

von Peter D. (peda)


Lesenswert?

I2C und SPI sind bidirektional, da kannst Du keine Nachrichten 
manipulieren.

Du kannst bestenfalls dem Master vorgaukeln, Du seiest der Slave, die 
Nachricht puffern und dann weitersenden.
Schwierig wird es aber vom Slave zum Master. Du kannst ja nicht 
hellsehen, was der Master gerade vom Slave lesen will und es vorher vom 
Slave abholen.

von Walter T. (nicolas)


Lesenswert?

Peter D. schrieb:
> Du kannst ja nicht
> hellsehen, was der Master gerade vom Slave lesen will und es vorher vom
> Slave abholen.

Stimmt. Daran habe ich nicht gedacht. Zumindest, solange es keine 
Busy-Leitung gibt. Aber in jedem Fall erfolgt es nicht mehr 100% 
transparent.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

Ein I2C konformer master sollte clock stretching unterstützen. Damit 
kann dann dein Gateway den Master anhalten bis eine Antwort vom Slave da 
ist. Das ist auf der Protokollebene komplett transparent ändert aber das 
Timing. Und nicht alle Master unterstützen clock stretching.

Matthias

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.