Forum: Mikrocontroller und Digitale Elektronik I2C stört UART


von Hauke R. (lafkaschar) Benutzerseite


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

von Oliver R. (orb)


Lesenswert?

Hauke Radtki schrieb:
> Hat jemand eine Idee welche Probleme noch auftreten könnten die diese
> Symptome hervorrufen könnten?

Hast Du mal die Spannung am Bluetoothchip angesehn und I2C/kein I2C 
verglichen? Vielleicht einfach mal nen C drauflegen falls die Sensoren 
rumsauen.

von Hauke R. (lafkaschar) Benutzerseite


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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.