VS1000 - I2C durch Software-Emulation möglich?

OP #4370240
Lesenswert?
• ▲
▼
Der VS1000 von VLSI hat leider keine I2C/TWI-Schnittstelle. Ich möchte 
allerdings einen IO-Expander damit steuern. Ist es möglich, das 
I2C-Protokoll mithilfe der vorhandenen GPIO-Pins zu emulieren?

Theoretisch müsste das ja möglich sein, aber wieso haben Mikrocontroller 
dann spezielle GPIOs für I2C, wenn man eigentlich jeden Port dafür 
nutzen könnte?
#4370273
Lesenswert?
• ▲
▼
@ Kim-Yannick Jürs (kim_yannick)

>Der VS1000 von VLSI hat leider keine I2C/TWI-Schnittstelle. Ich möchte
>allerdings einen IO-Expander damit steuern. Ist es möglich, das
>I2C-Protokoll mithilfe der vorhandenen GPIO-Pins zu emulieren?

Schreibst du SELBER Firmware für den VS1000?

>Theoretisch müsste das ja möglich sein,

Ja, wenn man die IOs dynamisch zwischen EIngang und Ausgang umschalten 
kann.

>aber wieso haben Mikrocontroller
>dann spezielle GPIOs für I2C, wenn man eigentlich jeden Port dafür
>nutzen könnte?

Weil das I2C Modul nur an diesen bestimmten IOs angeschlossen ist.
Gast #4370288
Lesenswert?
• ▲
▼
Kim-Yannick J. schrieb:
> aber wieso haben Mikrocontroller
> dann spezielle GPIOs für I2C,

Weil nach Standard die I2C Pins echte Open-Kollektor-Pins sein sollen 
und deshalb auch keine Probleme machen sollen, wenn der µC nur mit 3.3 V 
betrieben wird und am I2C die Hochzieh-Widerstände an 5 V gehen.

Zum Emulieren kann man zumeist zwei ganz gewöhnliche Portpins nehmen, 
man muß sie bloß für High aud tristate schalten können.

Geht das nicht, dann sind (für Master) 3 Portpins und zwei simple 
Transistoren nötig: ein Portpin+Transistor als O.C. Treiber für SCL und 
dasselbe nochmal für SDA. Der dritte Portpin ist (mit dezentem 
Vorwiderstand) zum Abtasten von SDA nötig.

W.S.
Gast #4372183
Lesenswert?
• ▲
▼
W.S. schrieb:
>> aber wieso haben Mikrocontroller
>> dann spezielle GPIOs für I2C,
>
> Weil nach Standard die I2C Pins echte Open-Kollektor-Pins sein sollen
> und deshalb auch keine Probleme machen sollen, wenn der µC nur mit 3.3 V
> betrieben wird und am I2C die Hochzieh-Widerstände an 5 V gehen.

Noch ein bißchen schärfer - I²C Pins müssen sogar hochohmig sein selbst 
wenn der Bauteil gar nicht versorgt wird. Diesen Spezifikationspunkt 
verletzen allerdings so manche Chips leider wegen falsch ausgelegter 
integrierten Schutzbeschaltung. Die die sich an die Spec halten haben 
folglich spezielle Pins weil man ja so eine unübliche Schutzbeschaltung 
nicht an allen GPIOs einbauen will.
Gast #4372247
Lesenswert?
• ▲
▼
W.S. schrieb:

> Zum Emulieren kann man zumeist zwei ganz gewöhnliche Portpins nehmen,
> man muß sie bloß für High aud tristate schalten können.

"tristate" ist der Begriff, der klarstellt, dass ein Port in der Lage 
ist, neben "low" und "high" auch noch einen dritten Zustand liefern zu 
können, englisch: High-Z (deutsch: "hochohmig" bzw. "hochimpedant").

Wie auch immer: für I2C braucht man tatsächlich diesen High-Z-Zustand, 
aber als zweiten nicht etwa High (das besorgen die Pullups, wenn die 
Ausgänge High-Z sind), sondern natürlich LOW.
Gast #4372274
Lesenswert?
• ▲
▼
Kim-Yannick J. schrieb:
> Theoretisch müsste das ja möglich sein, aber wieso haben Mikrocontroller
> dann spezielle GPIOs für I2C, wenn man eigentlich jeden Port dafür
> nutzen könnte?
Hauptsächlich weil viele Mikrocontroller (wie die kleinen AVR) die 
Peripherie-Einheiten fix an bestimmten Pins haben, und die Pins die an 
der I²C-Peripherie hängen somit festgelegt sind. Man kann zwar I²C per 
Software machen, aber dann kann man auf dem Controller kaum noch was 
anderes gleichzeitig machen um das Timing einhalten zu können. Die 
maximale Geschwindigkeit erreicht man so auch nicht unbedingt.
#4372291
Lesenswert?
• ▲
▼
Dr. Sommer schrieb:
> Man kann zwar I²C per
> Software machen, aber dann kann man auf dem Controller kaum noch was
> anderes gleichzeitig machen um das Timing einhalten zu können.

Nö, der Master kann sich alle Zeit der Welt nehmen, zwischenzeitliche 
Interrupts sind überhaupt kein Problem.
SW-Master-I2C wird daher gerne genommen.
Manchmal muß man es sogar nehmen, weil das HW-I2C buggy ist und sich bei 
Störungen aufhängen kann.
Und wenn das HW-I2C nicht als Interrupt läuft, ist es auch nichtmal 
schneller.
Gast #4372302
Lesenswert?
• ▲
▼
Peter D. schrieb:
> Nö, der Master kann sich alle Zeit der Welt nehmen, zwischenzeitliche
> Interrupts sind überhaupt kein Problem.
Aber auch nur der Master und auch nur in einem Single-Master-System, 
denn bei Multi-Master müsste man kontinuierlich den Bus überwachen auf 
"Busy".

Peter D. schrieb:
> Und wenn das HW-I2C nicht als Interrupt läuft, ist es auch nichtmal
> schneller.
Genau dafür ist es aber da... Und dann gibts auch so nette HW-I²C's die 
können FM+ mit 1 MHz oder so.
Gast #4373048
Lesenswert?
• ▲
▼
Dr. Sommer schrieb:
>> Nö, der Master kann sich alle Zeit der Welt nehmen, zwischenzeitliche
>> Interrupts sind überhaupt kein Problem.
> Aber auch nur der Master und auch nur in einem Single-Master-System,
> denn bei Multi-Master müsste man kontinuierlich den Bus überwachen auf
> "Busy".

Nein auch der Slave kann sich in gewissen Bereichen Zeit lassen. Deshalb 
gibt's ja clock stretching im I²C Standard definiert.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.