www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I²C bricht Verbindung ab


Autor: Christian E. (c-e)
Datum:

Bewertung
0 lesenswert
nicht 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:
static const UINT8 vic_params[] = {
  0x01 , 0x08,  /* Horizontal Increment delay, recommanded */
  0x02 , 0xC0,  /* Input,Composite */
  0x03 , 0x33,  /* Analog Control , Enable */
  0x04 , 0x00,  /* Gain Control */
  0x05 , 0x00,  /* Gain Control */
        .....usw

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

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


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

Autor: Christian E. (c-e)
Datum:

Bewertung
0 lesenswert
nicht 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-91F...

Grafik-Controller + Video Input Processor + andere Bauteile, alle 
anscheinend über I2C konfigurierbar: 
http://www.fujitsu.com/emea/services/microelectron...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.