I2C Spannungspegel Problem

Gast #3531655
Lesenswert?

Hallo,

ich habe ein kleines Problem mit einer I2C Schnittstelle und hoffe das 
ihr mir dabei helfen könnt.

Ich bin gerade dabei zwei Platinen zu verbinden. Die Platinen haben 
jeweils unterschiedliche Bausteine für die I2C Schnittstelle (siehe 
angehängter Schaltplan). FPGA 1 ist der Master FPGA 2 der Slave.

Wenn ich Daten von Master zu Slave schicke funktioniert die Verbindung. 
Allerdings ist der Slave nicht in der Lage die Signale auf Low zu 
ziehen.

Meine Messung hat ergeben, dass der LTC chip erst dann ein Low Signal 
durchgibt wenn das Signal auf unter 450-500mV (leichte Variation je nach 
Signal) gezogen wird.

Der I2C Chip auf der Slave Seite zieht das Signal jedoch nur auf 
~500-600mV herunter. Daher kommt bei FPGA 1, dem Master, kein Low Signal 
an. Auf dem angehängten Bild kann man die Aufzeichnung des SCL Signales 
sehen. Beide Aufzeichnungen wurden auf der linken Platine gemacht, eine 
vor und eine nach dem LTC chip. Wie man sieht reicht das vom Slave auf 
600mV herunter gezogene Signal nicht aus für den LTC und er lässt dieses 
nicht durch.

Daher nun meine Frage an euch. Könnt ihr mir sagen wie ich, am besten 
natürlich auf einfachem Wege, diese 600mV auf ~300-400mV (Wert aus der 
Luft gegriffen) verringern kann?

Die Chips auf den Platinen kann ich nicht wechseln, aber es ist denkbar 
eine Miniplatine zwischen den beiden Platinen unter zu bringen.


Anbei Links zu den Datenblättern der beiden Chips:
Adum:
http://www.analog.com/static/imported-files/data_sheets/ADUM1250_1251.pdf
LTC:
http://pdf1.alldatasheet.com/datasheet-pdf/view/104950/LINER/LTC4300A-3IMS8.html


Vielen Dank schonmal :)

Philipp
Angehängte Dateien:
Gast #3531703
Lesenswert?

>wird aber laut Datenblatt vom Adum bei 3.3V Operation verlangt. Siehe
>Datenblatt Seite 4 und 9.

Das sieht für mich nicht unbedingt nach einem muss aus.
Und dein I2C Slave kriegt bei den lockeren 30mA ja auch
die Leitungen nicht mehr richtig auf low gezogen.

Mach da mal 1k dran.
Gast #3531711
Lesenswert?

Philipp schrieb:
> wird aber laut Datenblatt vom Adum bei 3.3V Operation verlangt. Siehe
> Datenblatt Seite 4 und 9.

das sind die Testbedingungen. Das heißt nicht, dass du auch 120Ohm und 
400pF Lastkapazität dranhängen musst.

Aus der AN-913 zu dem Baustein:
"The pull-up resistors are those associated with any I2C interface. 
Guidelines for the selection of resistor values are provided within the 
I2C specification"
Gast #3549361
Lesenswert?

Vielen Dank für den Input und die Hilfestellung!
Inzwischen habe ich das Problem gelöst. Zum einen hatte ich ein 
veraltetes Schaltbild, in der neueren Version ist der Adum gar nicht 
mehr verbaut und zwischen LTC und FPGA 2 (Slave) ist ein 500 Ohm 
Widerstand.

Was aber das wirkliche Problem war, war der IO Port in VHDL der auf dem 
FPGA 1 (Master) implementiert war.
Meiner Meinung nach konnte der Port mit
1
  scl <= scl_clk WHEN scl_ena = '1' ELSE 'Z';
2
 sda <= '0' WHEN sda_ena_n = '0' ELSE 'Z';
implizit implementiert werden. Allerdings hat sich nach einem Blick auf 
das RTL gezeigt, dass der IO-Buffer nicht wirklich implementiert war. 
Erst als ich explizit den IO Buffer verwendet hatte mit
1
 IOBUF_inst_for_SCL : IOBUF
2
   generic map (
3
      CAPACITANCE => "DONT_CARE", -- "LOW", "NORMAL", "DONT_CARE" 
4
      DRIVE => 12,
5
      IOSTANDARD => "DEFAULT",
6
      SLEW => "SLOW")
7
   port map (
8
      O => scl_in,     -- Buffer output
9
      IO => SCL,   -- Buffer inout port (connect directly to top-level port)
10
      I => scl_clk,     -- Buffer input
11
      T => en_scl_iobuf      -- 3-state enable input 
12
   );
13
  
14
   IOBUF_inst_for_SDA : IOBUF
15
   generic map (
16
      CAPACITANCE => "DONT_CARE", -- "LOW", "NORMAL", "DONT_CARE" 
17
      DRIVE => 12,
18
      IOSTANDARD => "DEFAULT",
19
      SLEW => "SLOW")
20
   port map (
21
      O => sda_in,     -- Buffer output
22
      IO => SDA,   -- Buffer inout port (connect directly to top-level port)
23
      I => '0',     -- Buffer input
24
      T => en_sda_iobuf      -- 3-state enable input 
25
   );
lief das Program tadellos.

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