MKR1000->UART->SparqEE Cell=klappt nicht richtig

Ich benutze einen Arduino MKR1000 (ARM 48MHz), um über UART von einem GSM-Modul SparqEE Cell Daten zu lesen. Irgendwie kriege ich das nicht zuverlässig gebacken, auch der SParqEE-Support weiß bisher nichts Erhellendes.

Zunächst mal läuft die Verbindung nur bei 115200 Baud halbwegs stabil, aber auch da nicht immer. Niedrigere Baudraten verstärken den Effekt (s.u.) eher, als dass es besser würde.

Bei größeren Datenmengen gehen Daten verloren. Ich benutze als Test immer den Befehl AT+COPN, der die Liste der möglichen Provider ausgibt. Wenn ich das vom PC aus über USB an dem Modul mache, kommen >1400 Zeilen als Ergebnis. Da die Liste intern aus dem Modul ausgelesen wird, ist die Geschwindigkeit wohl maximal.

Bei 115200 Baud kommen von den 1400 so 250 Zeilen an. Ich schreibe einlaufende Zeichen immer nur in einen Puffer, um keine Zeit zu verlieren, muss den aber ab und an ausgeben, wenn er vollläuft. Am Output ist zu sehen, dass die größten Datenverluste da passieren - klar, der Arduino ist ja momentan anderweitig beschäftigt.

Bei niedrigeren Baudraten werden die Datenverluste größer, obwohl der Arduino da ja mehr Zyklen pro Zeichen zur Verfügung haben sollte.

Überschlagsrechnung: 115200 Baud bei 8N1 sind etwa 10KB/s, der Arduino hat zwischen 1 und 4 Takte pro Befehl, bei 48MHz also 24 Mio. Instruktionen pro Sekunde, wenn man von im Mittel 2 Takten pro Befehl ausgeht. Sagen wir, die Hälfte geht für interne Abläufe drauf - bleiben immer noch 10 Mio./s. Das heißt, ich habe mindestens 1.000 Instruktionen pro einlaufendes Byte zur Verfügung - da kann doch nichts überlaufen?!?

Es sieht fast so aus, als würden die Zeichen gar nicht im UART-Puffer des Arduino verloren gehen, sondern auf der anderen Seite, im Modul. Wie kann ich das sicher herausfinden?

Ehrlich gesagt, für mich klingt das nach einem Schaltungsfehler - fehlende Masseverbindung oder unpassende Signalpegel (unterschiedliche Versorgungsspannungen).

Der MKR1000 läuft mit 3,3 V, das SparqEE Cell soll mit 5 oder 3,3V laufen. Liegt da das Problem?

Gruß Tommy

Hi, und danke für die Reaktion! :slight_smile:

Inzwischen hat sich das Problem dahingehend geklärt, dass ZTE (die Hersteller des GSM-Moduls) davon ausgegangen war, dass der AT+COPN-Befehl maximal 20 Zeilen Output generieren würde. Bei T-Mobile als Provider liefert der aber >1400 Zeilen, und das überfordert das interne Buffermanagement im Modul.

Der Arduino hat da überhaupt kein Problem, der Pufferüberlauf passiert schon modulintern.

Masseverbindungen sind alle okay, und das Modul hat einen Vref-Eingang für die Signalspannung, der auch korrekt belegt ist. Klappt alles, auf dieser Seite des UART :slight_smile:

"Don't do that then" ist also momentan die Lösung. Ich hoffe nur, dass die Bufferei bei echtem Netztraffic besser klappt...