2017-02-08 5 views
0

Auf meinem STM32F7 muss ich ein 3G-Modem über die serielle Schnittstelle anschließen. Ich kann mit dem Modem über AT-Befehle kommunizieren. Ich möchte PPPos (PPP über serielle) Bibliothek von LWIP verwenden, um in den PPP-Modus zu gelangen. Also nehme ich einen langen Blick auf die offizielle DokumentationSTM32 LWIP PPPos-Implementierung

http://lwip.wikia.com/wiki/PPP

und

https://github.com/tabascoeye/lwip/blob/master/doc/ppp.txt

ich den Leitfaden zu verstehen, aber ich bin wirklich überrascht es gibt keine Implementierungsbeispiel mit serieller Schnittstelle. In der Tat, ich denke, es gibt viele Modems, die eine serielle Schnittstelle haben, also dachte ich, ich kann leicht ein Anwendungsbeispiel finden.

Wer hat das schon gemacht oder hat ein Beispiel?

Antwort

2

Während ich mein Beispiel nicht veröffentlichen kann, ist die allgemeine Idee, wenn es darum geht, TCP/IP-Stack Ihrer Wahl mit seinem PPP-Treiber zu integrieren, der gleiche unter allen seriellen Modems und allen TCP/IP-Stacks, mit denen ich gearbeitet habe. Wie Sie bereits erwähnt haben, beginnen Sie mit der Konfiguration des Modems mit AT-Befehlen - z. B. prüfen, ob eine SIM-Karte vorhanden ist, ob PIN erforderlich ist, PIN bei Bedarf angeben und überprüfen, ob sie erfolgreich im Netzwerk registriert wurde. Möglicherweise werden zusätzliche Informationsdaten wie IMEI, IMSI sowie Diagnosedaten gelesen: Signalqualität, BER usw. Wenn Sie fertig sind, schalten Sie das Modem in den Datenmodus (siehe ATD * 99), warten Sie, bis das Modem antwortet zu diesem Befehl und übergeben Sie die Verantwortung an den TCP/IP-Stack, wie zu diesem Zeitpunkt beginnt das Modem PPP zu sprechen.

Wenn es darum geht, Ihr Modem mit dem Stack zu integrieren, damit es damit kommunizieren kann, müssen die implementierten Implementierungen einige Low-Level-API-Funktionen für den Stack implementieren. Für LwIP, die Wiki-Seite, die Sie im Abschnitt "PPP over Serial" verlinkt haben, wird sehr gut beschrieben, wie sich diese Funktionen verhalten sollten. Da TCP/IP-Stacks nur eine Softwarebibliothek sind, die nicht an bestimmte Hardware gebunden ist und auf fast allem ausgeführt werden kann (vorausgesetzt, dass genügend Ressourcen vorhanden sind), werden bestimmte API-Implementierungen wie die besprochene nicht immer bereitgestellt Beispiele dafür, um irgendeinen Wert zu liefern. Obwohl, wenn Sie dafür googeln, könnten Sie jemanden finden, der es für die MCU getan hat, die Sie persönlich verwenden. Vorausgesetzt, Sie haben bereits den Teil ausgeführt, in dem Sie erfolgreich mit Ihrem Modem mit AT-Befehlen kommunizieren, sollte es nicht viel mehr als die Verwendung der bereits vorhandenen Sende-/Empfangsfunktionen sein. Einige geringfügige Änderungen sind möglicherweise erforderlich, z. B. das Anpassen ihres Verhaltens (synchron -> asynchron oder umgekehrt) oder das Umleiten empfangener Daten an die TCP/IP-API-Empfangsfunktion anstelle des AT-Befehlsparsers. Trotzdem sollte die meiste notwendige harte Arbeit bereits getan werden.

Sobald der TCP/IP-Stack übernommen wurde, fahren Sie mit dem Modem fort und verwenden die bereitgestellte Stack-PPP-API. Für LwIP siehe Funktionen wie: pppSetAuth, pppOverSerialOpen. Diese bewirken, dass der Stack die erforderliche Kommunikation mit dem Modem über PPP intern abwickelt: LCP, PAP/CHAP, IPCP. Sobald dieser Teil fertig ist (Sie erhalten IP-Konfigurationsdaten aus dem Netzwerk), wird es transparent, wie dies funktioniert - es wird eine (möglicherweise mehrere) Netzwerkschnittstellen und Sie verwenden sie wie jede andere, zum Beispiel mit der Socket-API.

+0

danke für Ihre große Antwort. Ich schaue mir das an, aber ich bin wirklich überrascht, dass es kein Beispiel mit serieller Implementierung gibt ... – lgm42

+0

Wie gesagt, jede Implementierung von Sende-/Empfangsdaten unterscheidet sich je nach verwendeter MCU (Register und Handhabung unterscheiden sich)), obwohl einige Bibliotheken wie STM32Cube versuchen, eine gemeinsame API bereitzustellen, zumindest für einen bestimmten Satz von MCU-Familien.Allerdings kann sich die Implementierung selbst für einen einzelnen MCU-Typ unterscheiden, abhängig vom Rest Ihres Projekts. Zum Beispiel wird es anders sein, ob Sie ein Betriebssystem wie FreeRTOS verwenden oder nicht. Mit Betriebssystem werden Sie wahrscheinlich Systemwarteschlangen verwenden, um Daten zu senden/zu erhalten, Semaphore, um Blockierungsoperationen usw. durchzuführen, ohne sie werden Sie wahrscheinlich alles von Hand machen. –

+0

Ich verstehe gut, aber STM32Cube haben eine Menge komplexer Beispiel wie HTTP-Server auf einer oder zwei MCU. Wenn Sie dieses nicht haben, ist es leicht zu verstehen und an Ihre MCU anzupassen. Für PPPos habe ich keine gefunden. – lgm42