I²C bricht Verbindung ab

OP #612887
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Problem mit einer I²C-Verbindung, die nach einigen 
gesendeten Bytes einfach abbricht. Aber erst mal von vorne: Ich habe 
einen 32bit µC von Fujitsu am I²C-Bus hängt ein Video Input Processor 
(SAA7113, tut aber eigentlich nix zur Sache), den ich über den Bus 
konfigurieren will, sprich es werden vom Master nur Daten gesendet.

Die Daten sehen so aus:
1
static const UINT8 vic_params[] = {
2
  0x01 , 0x08,  /* Horizontal Increment delay, recommanded */
3
  0x02 , 0xC0,  /* Input,Composite */
4
  0x03 , 0x33,  /* Analog Control , Enable */
5
  0x04 , 0x00,  /* Gain Control */
6
  0x05 , 0x00,  /* Gain Control */
7
        .....usw

Der äußere Aufbau zum Senden sieht so aus:
1
for (i=0; i < sizeof(vic_params); i += 2)
2
  {  
3
    I2C_Start(VIC_ADDR | I2C_WRITE); // Send slave address
4
    I2C_Write(vic_params[i]);  // Send "sub" address
5
    I2C_Write(vic_params[i+1]); // Send value
6
    I2C_Stop();
7
        }

Die Treiberfunktionen hab ich aus einemn Fujitsu-Beispiel-Programm 
entnommen.
Ich hab sie mal verlinkt der Übersichtlichkeit halber:
http://www.file-upload.net/download-345641/i2ctreiber.txt.html


Ziemlich häufig bleibt die Verbindung beim Senden der Daten des 
11.Sendezyklus (Adresse senden, Subadresse senden, Daten senden) hängen.
und zwar in der while-Schleife der Funtkion I2C_Write. Ab und zu 
funktioniert auch das komplette Senden, ist aber eher selten. Habe schon 
400 und 100kbit/s ausprobiert.


Und hier sind noch 3 Oszi-Screenshots, vielleicht helfen die ja auch:
Normaler Sendezyklus: http://www.abload.de/img/i2c_1syr.jpg
Abbruchstelle: http://www.abload.de/img/i2c_2whv.jpg


Im µC-Handbuch ist noch der folgende Flowchart drin: 
http://www.abload.de/img/zwischenablage01c98.jpg
Wie man sieht fehlt in den Treiber die Arbitration Lost Abfrage, ist das 
die Ursache?
Und warum ist die steigende Flanke der Signale eigentlich so kapazitiv 
geprägt?

Vielleicht hat ja jemand von euch einen Tipp für mich.
Auf jeden Fall schonmal vielen Dank
OP #613626
Lesenswert?
• ▲
▼
Hab jetzt mal noch ein bisschen rumprobiert, auch selbst die Routinen 
nach meinen Vorstellungen neu gemacht. Die Fehlerursache ist, dass 
irgendwer (Master/Slave?) die SDA-Leitung ab und zu einfach dauerhaft 
auf Masse zieht (sieht man auch oben im verlinkten Screenshot). Somit 
kann der Master dann natürlich nichts mehr senden, da sofort der 
Arbitration Loss Fehler kommt.

Was kann denn die Ursache dafür sein?

Das sind die Hardwarebestandteile:

Host CPU: 
http://mcu.emea.fujitsu.com/mcu_tool/detail/SK-91F467-FLEXRAY.htm

Grafik-Controller + Video Input Processor + andere Bauteile, alle 
anscheinend über I2C konfigurierbar: 
http://www.fujitsu.com/emea/services/microelectronics/gdc/gdcdevices/mb86276-lime.html

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.