Intel(Altera) I2C Master IP Core

Gast #5394710
Lesenswert?

Hey Leute,
hat von euch schon einmal den "Intel FPGA Avalon I2C (Master) Core" in 
QSYS in Verbindung mit dem NIOS2 Prozessor genutzt?

Hier der Link zum IP-Core: 
https://www.altera.com/documentation/sfo1400787952932.html#tkx1476291674786

Habe mir ein kleines System erstellt mit dem Prozessor, JTAG UART, 
On-Chip Memory (RAM) und eben dem I2C Master Core. Alles verbunden, kann 
den Core auch konfigurieren, Statusbits etc. setzen. Wenn ich dann in 
das TFR_CMD Register schreibe um ein Command zu senden passiert leider 
nichts. Habe das SCL und SDA Signal an 2 GPIOs von einem DE0-Nano 
ausgegeben.

Ich denke es liegt an meinem einbinden der I2C Signale. Die Komponente 
hat die Signale SCL, SDA, SCL_oe und SDA_oe (oe = Output enable). In der 
Doku steht, die Signale sollen über ein Open Drain Buffer angeschlossen 
werden: 
https://www.altera.com/documentation/sfo1400787952932.html#gmk1476294215146

Wie ich den Open Drain Buffer gelöst habe seht ihr im Anhang, ich denke 
mal da habe ich einen Denkfehler. Vielleicht hat von euch jemand eine 
Bessere Lösung? Bin gerade leider nicht am richtigen PC und kann die 
gesamte NIOS Komponente im VHDL zeigen, aber ich hoffe die Idee meiner 
Lösung wird klar.

Besten Dank und Grüße


PS.: Laden der Altera-Seiten kann dauern...
Angehängte Dateien:
Gast #5395852
Lesenswert?

Interne PullUps sind aktiviert. Habe vorerst auch mal die Output Enable 
Signale angeschaut. Da hat sich leider nichts getan. Habe jetzt einen 
score von OpenCores, der funktioniert wie er soll. Auch die C 
Programmierung ist um einiges einfacher. Gibt für den Altera Core leider 
nirgends ein Beispiel wie man es richtig macht.

Falls jemand mal ein funktionierendes Design hat würde ich mich aber 
über eine Antwort freuen.
(Firma: www.elpra.de) Persönliche Seite #5397487
Lesenswert?

Donni D. schrieb:
> Interne PullUps sind aktiviert.

Vorsicht bei den internen PullUps! Unter Umständen sind die sehr 
hochohmig. Zumindest ist dies bei Xilinx so, und hängt natürlich auch ab 
vom "Drive Strength" Attribut am Ausgangstreiber, jedoch meine ich war 
selbst beim größten drive der äquivalente PullU Widerstand weit größer 
als die I2C Spezifikation vorsieht. Je nach Kapazität auf den Leitungen 
und Busfrequenz schafft es der Ausgangstreiber nicht die Leitung korrekt 
runter zuziehen.

Ich hatte schon Designs die aus diesem Grund gescheitert sind. :(
Gast #5397534
Lesenswert?

Das der Bus funktioniert weiß ich nun, denn mit dem IP Core von 
OpenCores geht ja alles. Der hat als Verbindung direkt zwei inout 
Signale.
Problematisch ist es jetzt nur bei dem von Intel direkt, der hat zwei 
Inputs, SDA und SCL, sowie zwei Outputs SDA_oe und SCL_oe. Wie ich diese 
nun mit einem OpenDrain Buffer verbinden soll ist mir etwas schleierhaft 
(siehe Eingangspost VHDL Datei). Weiterhin bin ich mir unschlüssig wie 
ich das Teil in C programmiere. Habe dauerhaft interrupts bekommen 
obwohl ich nichts gesendet habe, empfangen ging auch nicht...

Deshalb frage ich nach einem komplett Beispiel.

Aber schon einmal danke für die Antworten. Grüße
Gast #5399463
Lesenswert?

Donni D. schrieb:
> Problematisch ist es jetzt nur bei dem von Intel direkt, der hat zwei
> Inputs, SDA und SCL, sowie zwei Outputs SDA_oe und SCL_oe. Wie ich diese
> nun mit einem OpenDrain Buffer verbinden soll ist mir etwas schleierhaft
> (siehe Eingangspost VHDL Datei)

Bei mir sehen die Ausgangstreiber so aus:
1
...
2
    port
3
    (
4
        ...
5
        scl  : inout std_logic;
6
        sda  : inout std_logic;
7
        ...
8
    );
9

10
begin
11

12
    ...
13
    i2ci.scl  <= scl;
14
    scl       <= i2co.scl when i2co.scloen = '0' else 'Z';
15

16
    i2ci.sda  <= sda;
17
    sda       <= i2co.sda when i2co.sdaoen = '0' else 'Z';
18
    ...
Du musst noch auf die richtige Polarität von SDA_oe und SCL_oe achten.

Duke
Gast #5580940
Lesenswert?

Artix schrieb:
> Wären die internen pull up Widerstände klein genug, um ein ausreichendes
> Signal zu erzeugen, wenn der Chip direkt am FPGA hängt und wenn es nur
> einer ist?
Da wäre ich skeptisch. Die internen Pull-Ups sind m.E. als Stromquellen 
realisiert und liegen i.d.R. größenordnungsmäßig gefühlt so bei 50 bis 
100 kOhm. Was sagt denn das Datenblatt? Und von welcehm FPGA reden wir 
hier?

Duke

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