Cypress FX2 I2C Gateway BERR Fehler

OP #2179400
Lesenswert?

Hallo,
ich versuche gerade meinen Cypress cy7c68013a dazu zu bewegen mit einem 
Tuner über ein Gateway in einem Demodulator Chip zu reden.
Welche Typen das sind darf ich leider nicht sagen.

Der Demodulator Chip hat ein Register über welches man mit dem auf der 
anderen Seite liegenden Tuner reden können soll.

Das I2C Schreiben geht auch, Lesen aber nicht.
Das Problem besteht darin, das der Demodulator für das Lesen des Tuners 
folgende Schreib-Lese-Sequenz erwartet:

Start, DemodAddr_1, Ack, RegisterAddr, Ack, TunerAddr_1, Ack, ReStart, 
DemodAddr_1, Ack, ReadData,Ack, ReadData, Ack, ..., Stop

wobei DemodAddr_1 bedeutet, dass das bit 0 gesetzt ist, d.h. Lesen 
gewählt wird.

Der Cypress FX2 fliegt jetzt nach dem Schreiben der RegisterAddr raus 
weil im Register I2CS das Bit bmBERR gesetzt ist. Natürlich gibt es 
keinen anderen Master im System, oder sonstige konkurrierende 
Schreibzugriffe. Anschließend ist die ganze I2C Engine geblockt, weil 
das Vieh auf ein (externes) Stop wartet, d.h. nur ein HW Reset bringt 
das Ding zurück ins Leben.

Ändere ich die Sequenz auf
Start, DemodAddr_0, Ack, RegisterAddr, Ack, ...

wobei DemodAddr_0 bedeutet, das Bit 0 gelöscht ist (d.h. Schreiben) gibt 
es den bmBERR Fehler nicht, aber der Zugriff funktioniert nicht.

Offensichtlich wertet die Engine das Schreib-/Lesebit aus und erwartet 
zwingend nach der Ausgabe der Adresse einen Lesezugriff, da ich Schreibe 
stimmen die Bits nicht überein und Rumms :-(

Frage: hat jemand von Euch dieses Problem auch schon gehabt?
Frage: wenn ja, was habt ihr gemacht?

Dummerweise kann man die SDA SCL Pins nicht manuell ansteuern, andere 
Pins sind quasi nicht mehr frei


Vielen Dank für's Lesen.
Gruß Ekkehard
Gast #2179678
Lesenswert?

nun ich würde mal folgendes probieren:

Start,  DemodAddr_0, Ack, RegisterAddr, Ack, TunerAddr_1, Ack,
ReStart DemodAddr_1, Ack, ReadData,Ack, ReadData, Ack, ..., Stop

RegisterAddr und TunerAddr_1 sollte doch wohl Schreibzugriffe sein oder
um die interenen Adresscounter für das Lesen vorzubereiten.

Die I2C Schnittstelle geht jedenfalls problemlos bei den Cypress Chips.
Ich kann mich dunkel daran erinneren, dass der Beispielcode von Cypress 
auf dem FX einen Bug hatte. Ob das später gefixt wurde kann ich nicht 
sagen. Ansonsten würde ich erst mal mit einem kleinen EEprom die
Routinen testen.

Thomas
OP #2180410
Lesenswert?

Hallo Thomas,
in der Tat genauso gehts. Die Dokumentation des Demodulator Chips ist 
fehlerhaft, bzgl. des R/W Flags.
Das es mit korrekt gesetztem R/W Flag (zunächst) nicht funktionierte lag 
daran, das ich kein ReStart sondern erst Stop und dann Start gesendet 
hatte.
Naja alte Regel, wenn zwei (Menschen/Maschinen) Mist bauen krachts.
Danke!!
Gruß Ekkehard

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