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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.