I2C stört UART

OP Persönliche Seite #3665445
Lesenswert?
• ▲
▼
Bei einem aktuellen Projekt habe ich einen per UART angebundenen 
Bluetooth Chip und mehrere über I2C angebundene Sensoren. Das UART läuft 
mit Hardware Flowcontrol und ich bekomme auch keine Overflow Events des 
UART Internen Hardware FIFOs.

Seit längerem habe ich merkwürdige Abstürze des Bluetooth Stacks 
wahrgenommen, die sporadisch nach 1-4 Stunden auftreten.

Mittlerweile kann ich das Problem eingrenzen in: Ohne I2C aktivität 
läuft die Bluetooth Verbindung problemlos und unbegrenzt lang. Sobald 
ich jedoch das Auslesen der Sensoren per I2C aktiviere, bekomme ich die 
Abstürze. Um sachen wie Memory Corruption auszuschließen habe ich sogar 
das komplette Buffern der von den Sensoren ausgelesenen Daten 
deaktiviert, es wird also nur der Datensatz abgerufen und direkt 
verworfen.

Ich habe bereits die Datenleitungen des UARTS per Oszilloskop auf 
übersprechen oder sonstige Vorkommnisse überprüft, und auch Baudrate 
oder I2C Clockrate zu verstellen bringt keinerlei änderung.

Sowohl I2C als auch UART laufen interrupt basiert. Dabei habe ich 
bereits dem UART Interrupt die höchste Interrupt Priorität zugeteilt, 
sodass es auch nicht durch Unterbrechungen des UART Interrupts zu 
fehlern kommen kann.

Weiterhin teilen sich die Beiden Treiber für die Schnittstellen 
keinerlei Variablen oder haben sonst irgend eine Abhängigkeit.

Hat jemand eine Idee welche Probleme noch auftreten könnten die diese 
Symptome hervorrufen könnten?

µC: LPC1115
IDE: LPCXpresso 6.1.0
Bluetooth Chip: CC2564
Sensoren: Mag3110, MMA8451, L3G4200
OP Persönliche Seite #3665487
Lesenswert?
• ▲
▼
Hab ich bereits gemacht, und I2C ist nicht zu bemerken. Weiterhin 
stürtzt der Bluetooth Chip nicht ab, sondern nur das HCI H4 Transport 
Protokoll wird desynchronisiert.

Denn ich bekomme noch Events und Daten vom Bluetooth Chip, wenn ich sie 
vom PC aus sende, nur in der gegenrichtung geht nichts mehr, weil der 
Stack denkt, die Buffer im Bluetooth Chip wären voll. Das passiert, da 
er wohl zufällig Paket Bestätigungsmeldungen des Bluetooth Chips nicht 
mehr mit bekommt.

Ich habe vier Interrupt Prioritäten zur Verfügung. Momentan sehen sie 
folgendermaßen aus (niedrigste Prioritätsnummer = höchste Priorität bei 
der Ausführung)

0: UART Interrupt
1: I2C Interrupt
3: Mag3110 Interrupt (signalisiert vorhandene Daten)

Dementsprechend kann UART nicht von I2C unterbrochen werden, umgekehrt 
jedoch schon. Trotzdem kommt es zu fehlerhaften oder verlorenen UART 
Bytes (lässt sich schwer aufspüren was genau fehl schlägt auf Grund der 
sporadischen Natur des Phänomens)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.