Forum: FPGA, VHDL & Co. FX3/FPGA in einem I2C Multi-Master System


von P. K. (pek)


Lesenswert?

Auf meinem Board kommuniziert ein FX3 mit einem FPGA, einerseits via 
Slave-Fifo-I/F, andererseits über I2C (FX3 ist Master, FPGA und andere 
Devices sind Slaves).

Ich möchte nun auf einige der Slaves direkt mit dem FPGA zugreifen, und 
betriebe nun auch das FPGA als Master. Wenn ich in einem intensiven 
Datentransfer (FPGA als Master) die Bus-Free-Time aufs Minimum von 1.3 
us setze (sowohl gemäss Spec. I2C 400Khz als auch CYUSB301X), hängt sich 
das System auf, wenn der FX3 ebenfalls einen Master-Access machen soll 
(dieser zeiht dann SDA permanent tief).

Experimentell habe ich festgestellt, dass der FX3 nach einer 
STOP-Condition des FPGA-Masters typisch etwa 7.9 us wartet, bis ein 
eigener, pendenter Master-Access startet. Benutze ich auch im FPGA eine 
Bus-Free-Time grösser als diese (aktuell 30 us) funktioniert das System 
tadellos.

Meine Fragen:
A) Wo finde ist spezifiziert (allenfalls programmiert), wie lange die 
Bus-Free-Zeit des FX3 ist (maximal und adaptiv)?
B) Gibt es zum Thema Bus-Free-Zeit und Arbitrage generelle Guidelines 
oder Strategien (oder kocht da jeder sein eigenes Süppchen, z.B. 
kontinuierlich kürzere Bus-Free-Zeit nach Arbitration-Loss)?

von Duke Scarring (Gast)


Lesenswert?

P. K. schrieb:
> hängt sich
> das System auf, wenn der FX3 ebenfalls einen Master-Access machen soll
> (dieser zeiht dann SDA permanent tief).
Das klingt nach einer fehlerhaften Implementierung des I2C-Masters im 
FX3.
Ders sollte zumindest nach einem Timeout den Bus wieder loslassen.

Eventuell kannst Du ja einen PCA9541A (2-to-1 I²C-bus master selector) 
o.ä. dazwischenhängen. Oder die Devices, wo das FPGA ran muss an einen 
zweiten I2C-Bus direkt ans FPGA hängen und der FPGA spielt dann 
Multiplexer.

Duke

von P. K. (pek)


Lesenswert?

Duke Scarring schrieb:
> Eventuell kannst Du ja einen PCA9541A (2-to-1 I²C-bus master selector)
> o.ä. dazwischenhängen.

Naja, das wäre etwas Overkill, da ich ja eine Lösung habe, die 
funktioniert (30 us warten zwischen zwei Zugriffen vom FPGA-Master aus).
Mein Ziel ist es, Information über das I2C-Arbitrage-Verhalten im 
allgemeinen ("best practice") und des FX3 im Speziellen zu finden.

von Lattice User (Gast)


Lesenswert?

P. K. schrieb:
>
> Naja, das wäre etwas Overkill, da ich ja eine Lösung habe, die
> funktioniert (30 us warten zwischen zwei Zugriffen vom FPGA-Master aus).

Das ist keine Lösung, sondern ein vorrübergehender Workarround. Solange 
nicht verstanden ist, warum es passiert kann man nicht garantieren dass 
es 100% funktioniert. Die 30us deuten IMO darauf hin, dass eine 
Kollision einfach unwahrscheinlich wird.

Deswegen
> Mein Ziel ist es, Information über das I2C-Arbitrage-Verhalten im
> allgemeinen ("best practice") und des FX3 im Speziellen zu finden.
ist das umso wichtiger.

Kann der FX3 Multimaster?
Wenn ja, ist der Treiber in der FX3 Firmware dafür ausgelegt und 
bugfrei?

Die gleichen Fragen gelten für den I2C Core im FPGA.

von P. K. (pek)


Lesenswert?

Lattice User schrieb:
> Kann der FX3 Multimaster?
Ja, laut Doku schon.

Lattice User schrieb:
> Das ist keine Lösung, sondern ein vorrübergehender Workarround.
Jein. Bis jetzt hatte ich die Abstürze nur, wenn ich den FPGA-Master 
sehr gierig eingestellt habe (neue Start-Condition sehr nahe am Minimum 
(1.3 us). Um das System sicher zu machen, müsste ich die Info haben, wie 
sich der FX3 während der Bus-Free-Time verhält, i.e. wie schnell er 
reagieren kann (wenn er sagen wir immer mindestens 2 us braucht, dann 
hungert er natürlich aus wenn ich immer nach 1.5 us den Bus wieder 
beanspruche, könnte aber perfekt damit leben, wenn ich 2.5 us warte). 
Nur eben suche ich immer noch nach (nicht experimentell erarbeiteter) 
Info, wie sich der FX3 verhält. Dann kann ich die Sache nämlich 
definitiv lösen.

: Bearbeitet durch User
von Christian R. (supachris)


Lesenswert?

Frag am besten im Cypress Forum an, da sind auch Mitarbeiter dabei.

von P. K. (pek)


Lesenswert?

Christian R. schrieb:
> Frag am besten im Cypress Forum an, da sind auch Mitarbeiter dabei.

Jep, ist getriggered (werde es posten, wenn was sinnvolles dabei 
rauskommt).

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.