Forum: FPGA, VHDL & Co. Spartan als I2C Slave an 5V I2C Bus


von PGA-Fragender (Gast)


Lesenswert?

Hallo zuammen,

ich möchte einen Spartan 3 an einem 5V I2C als Slave betreiben.

Nun hab ich zwar das Wiki bzgl. Pegelwandlung durchgelesen allerdings 
ist mir nun immer noch nicht klar wie ich praktisch die 
Spannungsanpassung realisieren soll.

Ist nur eine Hobby Anwendung, so dass ich an einer einfachen praktischen 
Lösung interessiert bin.

Kann ich die Spannungsteiler Methode wählen ?

Wie soll ich die Widerstände dimensionieren.

U2 / U1  = R2 / ( R1 + R2 )

ist schon klar. Aber sollen die R sehr hochohmig oder niederohmig sein.

Bitte um praktischen Tipp

Danke

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


Lesenswert?

An den Pins des S3 sind Klemmdioden, die den Pegel auf die IO-Spannung 
(vermutlich 3,3V) begrenzen. Die Eingänge des S3 kannst du also mit 
einem einfachen Vorwiderstand 5V-tauglich machen.
Bei I2C ist jetzt allerdings das Problem, dass du am gleichen Pin Ein- 
und Ausgang hast. Und beim Ausgang, der ja "nur" ein Schalter gegen GND 
ist, steht dir dieser Vorwiderstand jetzt im Weg, wenn es darum geht, 
einen "sauberen" 0V-Pegel zu erzeugen.


Ich würde das pro I2C-Leitung aufteilen in:
1 Pin des FPGAs mit Vorwiderstand als Eingang     und
1 Pin mit Transistor in Open-Collector als Ausgang

So etwa:
1
                                                  o
2
                                                  |
3
                                                 .-.
4
  -----.                                         | |
5
       |                                         | | I2C-Pullup
6
       |                                         '-'
7
       |                                          |
8
       '       ___                                |
9
   In  o------|___|--------o----------------------o--------->
10
       .           10k     |                        SDA / SCL
11
       |                   |                         
12
 FPGA  |                   |
13
       |                   |
14
       '       ___       |/
15
   Out o------|___|------|   BC547
16
       .           10k   |>
17
       |                   |
18
       |                  ---
19
 ------'

Das habe ich schon mit 1-Wire-Bausteinen gemacht (die haben ja auch 
diesen bidirektionalen Bus mit Pullups), und das funktioniert 
reibungslos.

von Helmut (Gast)


Lesenswert?

Ich möchte gerne diesen Beitrag verwenden und keinen neuen anlegen, da 
ich ein vergleichbares Problem habe.

Ich habe mir einen einfachen i2c-Slave Code geschrieben und versuche das 
ganze jetzt auf realer Hardware zu testen. Als FPGA wird ein Xilinx 
Virtex4(XC4VFX12) eingesetzt. Dieser soll an einen I2C-Master, welcher 
sich in einem Microcotroller befindet, angeschlossen. Der 
Microcontroller hat an den bei den Leitung (SCL und SDA) 5V anliegen. 
Weiterhin sind entsprechende Pullup-Widerstände angebracht. Der IC2-Buss 
in Verbindung mit anderen Controllern läuft einwandfrei nur wenn ich mit 
dem FPGA kommunizieren möchte, geht nichts.

Meine Frage: Muss man die oben aufgezeichnete Schaltung auch bei diesem 
FPGA durchführen oder könnte man auf die verzichten?

Was ich beobachten konnte ist, dass nach dem Anschließen des Slaves die 
Spannug auf dem Bus von 5V auf 3.6V sinkt. Weiterhin habe ich getestet 
ob
 der FPGA einen Pegelwechsel erkennen kann, ja er kann es.


MfG
Helmut

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


Lesenswert?

> Als FPGA wird ein Xilinx Virtex4(XC4VFX12) eingesetzt.
> Was ich beobachten konnte ist, dass nach dem Anschließen des Slaves die
> Spannug auf dem Bus von 5V auf 3.6V sinkt.
Ja, die Klemmdioden beginnen zu leiten.
Der V4 ist wie der Spartan3 nicht 5V tolerant (gleiche Technik).

Der geht dir auf Dauer einfach kaputt. Im Datenblatt steht da was von 
100 Stunden, das war die krasseste Zeitangabe, die ich jemals gesehen 
habe. Offenbar gibt es laut FAE mit 5V langsame Zersetzungen im IO-Pad, 
die nach 100 Std (in der Summe) dafür sorgen, dass der zwar nicht kaputt 
ist, aber die Spec nicht mehr einhält   :-o

von ... .. (docean) Benutzerseite


Lesenswert?


von Helmut (Gast)


Lesenswert?

Danke für die Infos. Dann mache ich mich mal an die Schaltung.

MfG
Helmut

von Gast (Gast)


Lesenswert?

Kann mich erinnern, dass die Standardlösung dafür in der offiziellen 
I2C-Spezifikation von Philips beschrieben ist.

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.