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
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
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.