Forum: Mikrocontroller und Digitale Elektronik Wie mit GPRS über AT Commands verbinden?


von Till X. (till_n)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hab vor Tagen mein altes Sony Ericsson W810 ausgekramt und diverse 
Dinge via Bluetooth (Serielle Schnittstelle) ausprobiert. Da gibts (gabs 
mal) so ein schönes Dokument mit allen möglichen AT-Commands.
Nun würde ich gern via GPRS Daten versenden und zwar später auch mal 
über den µC. Testen würde ich das Ganze gern mal am PC via Terminal.

Bis jetzt hab ich folgendes hinbeckommen (Stichwort PDP Context):
AT+CGDCONT?<\r><\r><\n>
+CGDCONT: 1,"IP","internet.victorvox","0.0.0.0",0,0
+CGDCONT: 2,"IP","internet.victorvox","0.0.0.0",0,0
+CGDCONT: 3,"IP","web.vodafone.de","0.0.0.0",0,0
OK

AT+CGATT=1<\r><\r><\n>
OK

AT+CGACT=1,1<\r><\r><\n>
OK

und bei kommt beim AT-Command AT+CGDATA="PPP",1 folgendes zurück:
AT+CGDATA="PPP",1;<\r><\r><\n>
CONNECT
~?}#?!}!}!} }8}#}$?#}(}"}'}"}"}&} } } } }%}&????}4?~
~?}#?!}!}"} }8}#}$?#}(}"}'}"}"}&} } } } }%}&????^A~
~?}#?!}!}#} }8}#}$?#}(}"}'}"}"}&} } } } }%}&??????~
~?}#?!}!}$} }8}#}$?#}(}"}'}"}"}&} } } } }%}&?????m~
~?}#?!}!}%} }8}#}$?#}(}"}'}"}"}&} } } } }%}&????}2?~
~?}#?!}!}&} }8}#}$?#}(}"}'}"}"}&} } } } }%}&????Xv~
~?}#?!}!}'} }8}#}$?#}(}"}'}"}"}&} } } } }%}&??????~
~?}#?!}!}(} }8}#}$?#}(}"}'}"}"}&} } } } }%}&?????4~
~?}#?!}!})} }8}#}$?#}(}"}'}"}"}&} } } } }%}&????}8?~
~?}#?!}!}*} }8}#}$?#}(}"}'}"}"}&} } } } }%}&????R/~
NO CARRIER

Jetzt weiß ich gar nicht was der von mir will. Was ich bisher 
herausgefunden hab ist, dass es sich scheinbar um das Nachrichten im 
PPP-Protokol handelt. Die ersten zwei und das letzte Asci-Zeichen deuten 
darauf hin. Ich habe mir das ganze mal in Binär und Hex angeschaut. 
Scheinbar übermittelt er als Protokoll PAP als inner Nachricht. Wie 
komme ich nun an dieses Passwort für PAP?

Kennt sich hier überhaupt jemand mit GPRS verbindungen aus bzw hat den 
entsprechenden Stack schon implementiert?
Gruß an alle ehrlichen Helfer

von Stefan W. (dl6dx)


Lesenswert?

Das sieht doch ganz gut aus.

PPP ist in RFC1661 beschrieben. Zum Einlesen starte eventuell mit 
http://de.wikipedia.org/wiki/Point-to-Point_Protocol.

Zu Beginn der PPP-Session wirst du dich beim Provider anmelden müssen. 
PAP ist eins der dafür möglichen Authentisierungsverfahren (Usernamen 
und Passwort).

Zur Implementation: Unter unixartigen OS erledigt das Protokoll ein 
separater Prozess, der PPP-Daemon pppd. Du kannst dir ja mal den 
Sourcecode ansehen. Für andere Umgebungen müsstest du mal suchen. Kann 
sein, es gibt schon Ports.

Was willst du denn als den darauf aufsetzenden IP-Stack verwenden?

Grüße

Stefan

Nachtrag: LwIP http://en.wikipedia.org/wiki/LwIP hat anscheinend bereits 
PPP-Support eingebaut.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Till Xxx schrieb:
> Nun würde ich gern via GPRS Daten versenden und zwar später auch mal
> über den µC. Testen würde ich das Ganze gern mal am PC via Terminal.

Hallo Till,
nur damit ich dich richtig verstehe - du willst eine GPRS-Verbindung ins 
Internet aufbauen? Oder was genau hast du vor? Ist das betreffende SIM 
für Internet-Zugang freigeschaltet? Tarif? Provider?

von Till X. (till_n)


Lesenswert?

Stefan Wagner schrieb:
> Das sieht doch ganz gut aus.
>
> PPP ist in RFC1661 beschrieben. Zum Einlesen starte eventuell mit
> http://de.wikipedia.org/wiki/Point-to-Point_Protocol.

Ja genau den Artikel hab ich mir schon durchgelesen.

> Zu Beginn der PPP-Session wirst du dich beim Provider anmelden müssen.
> PAP ist eins der dafür möglichen Authentisierungsverfahren (Usernamen
> und Passwort).

Und genau da liegt mein Problem. Die Messages die ich über das Terminal 
empfange, kann ich nicht ganz übersetzten bzw. eigentlich fast gar 
nicht. Die ersten zwei Byte stimmen noch mit dem im Wiki-Artikel 
überein. Das dritte Byte (Control-Byte) hab sehe ich leider nicht. Das 
vierte und fünfte Byte müsste ja das enthaltene Protokoll enthalten 
(siehe Artikel) ich bekomme die Bytes für PAP in umgekehrter Reihenfolge 
(wahrscheinlich LSB first). Und dann hab ich auch keine Ahnung mehr was 
der rest der Botschaft soll. Für meinen Provider (glaub Discoplus oder 
Discotel) gibts keine Zugangspasswörter oder Benutzernamen.

> Zur Implementation: Unter unixartigen OS erledigt das Protokoll ein
> separater Prozess, der PPP-Daemon pppd. Du kannst dir ja mal den
> Sourcecode ansehen. Für andere Umgebungen müsstest du mal suchen. Kann
> sein, es gibt schon Ports.

Danke. Ich werde mal danach suchen.

> Was willst du denn als den darauf aufsetzenden IP-Stack verwenden?

hab ich mir bis jetzt noch keine Gedanken gemacht. Ist für mich jetzt 
aber auch noch nicht entscheidend. Wenns zu kompliziert wird, muss ich 
die GPRS übertragung sowieso aufgeben. Hab da noch nicht viel Erfahrung 
und alles was ich finde is sehr mager.

> Grüße
>
> Stefan
>
> Nachtrag: LwIP http://en.wikipedia.org/wiki/LwIP hat anscheinend bereits
> PPP-Support eingebaut.

von Till X. (till_n)


Lesenswert?

Markus Weber schrieb:
> Till Xxx schrieb:
>> Nun würde ich gern via GPRS Daten versenden und zwar später auch mal
>> über den µC. Testen würde ich das Ganze gern mal am PC via Terminal.
>
> Hallo Till,
> nur damit ich dich richtig verstehe - du willst eine GPRS-Verbindung ins
> Internet aufbauen? Oder was genau hast du vor? Ist das betreffende SIM
> für Internet-Zugang freigeschaltet? Tarif? Provider?

Hallo Markus,

ja genau. Mir geht es erst einmal darum zu verstehen wie ich Daten über 
das Handy verschicken kann, ohne jedesmal eine SMS senden zu müssen. 
Lieber wäre mir eine GPRS-Verbindung aufzubauen. Provider ist Discotel 
und irgendein 9 Cent Tarif. Internet-Zugang ist denke ich schon 
freigeschaltet, wenn ich über GPRS Wap nutzen kann. Also ja, ich bin mir 
recht sicher.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Till Xxx schrieb:
> ja genau. Mir geht es erst einmal darum zu verstehen wie ich Daten über
> das Handy verschicken kann, ohne jedesmal eine SMS senden zu müssen.
> Lieber wäre mir eine GPRS-Verbindung aufzubauen. Provider ist Discotel
> und irgendein 9 Cent Tarif. Internet-Zugang ist denke ich schon
> freigeschaltet, wenn ich über GPRS Wap nutzen kann. Also ja, ich bin mir
> recht sicher.

Ich bin mir nicht sicher, aber ich denke, das Protokoll brauchst du 
nicht selbst zu programmieren. Es schaut so aus, als würde sich das 
Modem schon darum kümmern, wenn du es mit den richtigen Parametern 
versorgst. Laut Doku müssten dafür die AT-Kommandos AT*EIAAUW und 
AT*EIAAUR zuständig sein.

Der Verbindungsaufbau geschieht dann – wahrscheinlich – wie bei GPRS und 
UMTS üblich mit ATD "*99#".

von Timo N. (tnn85)


Lesenswert?

Hab mich zwischenzeitlich etwas schlauer gemacht. Es ist definitiv das 
PPP-Protokoll und mein Problem es zu verstehen lag immer darin, dass 
alle Bytes kleiner gleich 0x20 mit 0x20 geXORed werden und ein 0x7D 
vorangestellt. Sprich: 0x03 wird als 0x7d 0x23 übertragen.

Auf dieser Seite wird das PPP auch gut erklärt:

http://www.vijaymukhi.com/vmis/ppp.htm

Nach manuellem dekodieren der Nachrichten hab ich herausgefunden, dass 
in der PPP-Nachricht das LCP Protokoll (0xC0 0x21, fünftes und sechstes 
Byte) steckt und darin ein sogenanntes "Configuration Request" 
übertragen wird (0x7D 0x21, siebtes und achtes Byte = 0x01) und in der 
Nachricht einige "LCP Konfiguration Optionen" wie Autentifizierung usw 
übermittelt werden (siehe Wikipedia zu LCP-Protokoll
http://de.wikipedia.org/wiki/Link_Control_Protocol)

Meine Frage:

Ist das jetzt ein Configuration Request vom Provider an das Mobiltelefon 
oder andersrum. Weil wenn es ein Configuration Request des Mobiltelefons 
wäre, dann wüsste ich ja, dass der Server mir nicht antwortet. Woran 
liegt das dann? Wenn es andersherum ist, dann weiß ich zumindest, dass 
ich mit einem Configuration Acknoledge antworten muss, glaube ich.


Hier nochmal die mehreren Botschaften die ich nach der CONNECT 
Mitteilung in meinem Terminal angezeigt bekomme (diesmal in Hexformat, 
damit man die einzelnen Bytes besser erkennt)
Wie gesagt, davor hab ich mich mit dem ATD "*99#" -Kommando verbunden 
und dann als Antwort "CONNECT" erhalten. Nach den paar PPP-Nachrichten 
(unten) kommt dann ein "NO CARRIER" und das wars (siehe erster Beitrag 
von mir):

7E FF 7D 23 C0 21 7D 21 7D 21 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 FD 4F 7E
7E FF 7D 23 C0 21 7D 21 7D 22 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 31 A2 7E
7E FF 7D 23 C0 21 7D 21 7D 23 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 75 F9 7E

7E FF 7D 23 C0 21 7D 21 7D 24 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 B8 71 7E

7E FF 7D 23 C0 21 7D 21 7D 25 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 FC 2A 7E

7E FF 7D 23 C0 21 7D 21 7D 26 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 30 C7 7E

7E FF 7D 23 C0 21 7D 21 7D 27 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 74 9C 7E

7E FF 7D 23 C0 21 7D 21 7D 28 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 BB DE 7E

7E FF 7D 23 C0 21 7D 21 7D 29 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 FF 85 7E

7E FF 7D 23 C0 21 7D 21 7D 2A 7D 20 7D 39 7D 23 7D 25 C2 23 7D 25 7D 28 
7D 22 7D 27 7D 22 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 C1 67 
82 D1 33 68 7E

von Stefan W. (dl6dx)


Lesenswert?

T. N. schrieb:
> Ist das jetzt ein Configuration Request vom Provider an das Mobiltelefon

Wenn du die LCP-Pakete empfangen hast, kam das vom Provider.

Das Telefon an sich ist an der Stelle übrigens bereits "transparent", 
d.h. dein System "redet" direkt mit dem Einwahlknoten des Providers.

Grüße

Stefan

von Timo N. (tnn85)


Lesenswert?

Stefan Wagner schrieb:
> T. N. schrieb:
>> Ist das jetzt ein Configuration Request vom Provider an das Mobiltelefon
>
> Wenn du die LCP-Pakete empfangen hast, kam das vom Provider.

Sicher? Ich hab immer zweifel ob es nicht vom Telefon an das Terminal 
gesendet wurde. Z.b. so wie es in diesem Dokument

http://www.uniroma2.it/didattica/iss/deposito/1_ppp.pdf

unter "Link establishment" beschrieben wird. Ich bekomme als ans 
Terminal nur eine Kopie von dem, was an den Provider geschickt wurde.
>
> Das Telefon an sich ist an der Stelle übrigens bereits "transparent",
> d.h. dein System "redet" direkt mit dem Einwahlknoten des Providers.

Ok, du scheinst dir sicher zu sein.... Trotzdem lässt mich das Dokument 
zweifeln.


> Grüße
>
> Stefan

von Stefan W. (dl6dx)


Lesenswert?

T. N. schrieb:

Ab der Statusmeldung "CONNECT" des Telefons hast du eine (serielle) 
Datenverbindung mit dem angewählten System (vermutlich ein 
Einwahlknoten). Das Telefon verhält sich ab da transparent, d.h. alles 
gesendete geht direkt weiter zur Gegenseite, alles empfangene kam direkt 
von dort.
Dein PC (bzw. später dein µC) kommuniziert direkt mit diesem Endpunkt.

> Z.b. so wie es in diesem Dokument
> http://www.uniroma2.it/didattica/iss/deposito/1_ppp.pdf
> unter "Link establishment" beschrieben wird. Ich bekomme als ans
> Terminal nur eine Kopie von dem, was an den Provider geschickt wurde.

Ich befürchte, da hast du was falsch verstanden. Auf welche Folie 
beziehst du dich denn?

Grüße

Stefan

von Timo N. (tnn85)


Lesenswert?

Folie 12 unten

von Stefan W. (dl6dx)


Lesenswert?

T. N. schrieb:
> Folie 12 unten

Das ist der beidseitige LCP-Handshake zwischen den beiden Endpunkten des 
PPP-Links. Wo siehst du denn da das Modem?

Hast du eventuell die Bezeichnung "NAS" so interpretiert, dass das dein 
Modem sei? Oder hat dich die Bezeichnung "PHY" für den Layer unterhalb 
LCP auf die falsche Fährte gebracht?

Egal was: Schau dir noch mal die untere Folie auf Seite 1 an.

Dein Telefon entspricht dem links unten im gelben Kästchen gezeichneten 
Modem. Dein "Access Network" ist das GSM/GPRS-Netz. Der Network Access 
Server (NAS) steht irgendwo bei deinem Provider.

In dieser Situation ist der GPRS-Transport über das Telefon dein 
"PHY"-Layer, auch wenn er tatsächlich intern wesentlich komplexer ist.

Mit "AT+CGDATA="PPP",1;" baut dein Telefon (= Modem) eine byteserielle 
Verbindung zum NAS auf. Sobald es den abgeschlossenen Verbindungsaufbau 
meldet ("CONNECT") hast du eine direkte Verbindung zum NAS.

Alles weitere läuft auf dem Level von PPP zwischen deinem System und dem 
NAS ab.

Ok?

Grüße

Stefan

von Timo N. (tnn85)


Lesenswert?

Ok. ABER: Ich hab die Folie 12 "Link Establishment" so interpretiert, 
dass der "User" mein PC über das Modem ist und das "NAS" der Provider. 
Und auf der Seite wird also ein "Configuration Request" zuerst vom User 
ans NAS geschickt und dann müsste ein "Configuration Ack" vom NAS 
kommen.

Ich jedoch seh ja nur ein "Configuration Request" an meinem Terminal 
ankommend und interpretier das so, dass dieses entweder die Kopie von 
dem ist, was vom Modem (Telefon) an das Nas geschickt wird und mir das 
über das Terminal als Information zur Verfügung steht.

Wenn es jetzt ein "Configuration Request" vom NAS sein sollte, dann 
stimmt ja die Abbildung nicht, weil das NAS als erste Nachricht 
hoffentlich ja ein "Configuration ACK" schicken sollte.

von Stefan W. (dl6dx)


Lesenswert?

T. N. schrieb:
> Ich hab die Folie 12 "Link Establishment" so interpretiert,
> dass der "User" mein PC über das Modem ist und das "NAS" der Provider.

Korrekt.

> Und auf der Seite wird also ein "Configuration Request" zuerst vom User
> ans NAS geschickt und dann müsste ein "Configuration Ack" vom NAS
> kommen.

In dieser Darstellung, ja. Das ist nach meiner Erinnerung aber nicht 
zwingend so, sondern implementationsabhängig. Es kann also auch die 
"angerufene Seite" anfangen.

> Ich jedoch seh ja nur ein "Configuration Request" an meinem Terminal
> ankommend und interpretier das so, dass dieses entweder die Kopie von
> dem ist, was vom Modem (Telefon) an das Nas geschickt wird und mir das
> über das Terminal als Information zur Verfügung steht.

Nochmal: Dein Modem sendet gar nichts von sich aus. Für alles, was von 
deiner Seite aus gesendet werden soll, ist dein PC zuständig.

> Wenn es jetzt ein "Configuration Request" vom NAS sein sollte, dann
> stimmt ja die Abbildung nicht, weil das NAS als erste Nachricht
> hoffentlich ja ein "Configuration ACK" schicken sollte.

Ich habe den Eindruck, du hast das Protokoll und seine Abläufe noch 
nicht vollständig verstanden.

PPP ist vom Grundsatz her ein symmetrisches Protokoll, es gibt keinen 
Master und keinen Slave. Das heißt, dass alle Abläufe zweimal 
stattfinden, je einmal für jede Übertragungsrichtung.

Du sendet ein Configuration Request und wartest auf die Antwort des NAS 
und erwartest parallel dazu ein Configuration Request vom NAS (und 
antwortest darauf).

Grüße

Stefan

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.