Wie interagiert der TCP/IP-Stack mit Wifi-Komponenten?

Ich versuche, über Arduino hinauszugehen, und ich versuche zu lernen, wie man ein RTOS (wie FreeRTOS) verwendet, um sich über WLAN mit dem Internet zu verbinden. Es scheint, dass FreeRTOS und ZentriOS und andere RTOS TCP/IP-Stacks bereitstellen. Korrigieren Sie mich, wenn ich falsch liege, aber es scheint mir, dass dieser TCP/IP-Stack die API für die Interaktion mit der Außenwelt entweder über Ethernet oder WLAN bereitstellt. Ist der WLAN-Treiber die Schnittstelle zwischen dem TCP/IP-Stack und dem WLAN-Modul selbst? Implementiert der WLAN-Treiber standardmäßige TCP/IP-Schnittstellen? Oder ist es die Aufgabe der Firmware-Entwickler, herauszufinden, wie ein TCP/IP-Stack mit dem WLAN-Treiber interagiert?

Antworten (1)

Der TCP/IP-Stack ist so generisch wie möglich konzipiert, sodass Anwendungen mit verschiedenen Datenverbindungsprotokollen wie 802.3 (Ethernet), 802.11 (Wi-Fi), PPP (Punkt-zu-Punkt-Protokoll) usw. interagieren können, ohne dies zu müssen wissen, welche Art von Link sie verwenden.

TCP/IP umfasst eigentlich mehrere Protokollschichten, z

 5. Application DNS, FTP, HTTP, IMAP, POP3, SMTP, SSH, Telnet, SSL, ...
 4. Transport   TCP, UDP, ...
 3. Network     IP (IPv4, IPv6), ICMP, ARP, ...
 2. Data Link   802.3 (Ethernet), 802.11 (Wi-Fi), PPP, ...
 1. Physical    Ethernet (NIC), Wireless (NIC), Cat 5/RJ-45, ... 

(Die oberste Schicht ist oft in drei separate Schichten unterteilt, ich vereinfache die Dinge ein wenig.)

Es ist also die unterste Ebene, auf der der Stack mit dem Treiber für Ihr spezifisches Wi-Fi-Modul verbunden werden muss.

Da dies auf Byte-Ebene ist, gibt es eine begrenzte Anzahl von Funktionen, die implementiert werden müssen. Sie folgen einem ziemlich standardmäßigen I/O-Gerätetreibermodell, dh

Open function
Close function
Send function
Receive function
IO Control function
Get PhysicalAddress function
Interrupt service routine (ISR) callback

Es sollte also ziemlich einfach sein, die Stack-Schnittstelle mit einem bestimmten Modul zu verheiraten.

Siehe hier für ein Beispiel mit mehr Details für ein bestimmtes Betriebssystem.

Einige Wi-Fi-Module, wie das ESP8266 , verfügen über einen integrierten TCP/IP-Stack, da TCP/IP einen kleinen Mikrocontroller belasten kann. Der Zugriff erfolgt über AT-Befehle, ähnlich wie bei einem Zellmodul oder Bluetooth-Modul.

Verfügen die physikalische Ebene der Ebene 1 und die WLAN-Treiber über einen vereinbarten Satz von APIs, sodass jeder WLAN-Treiber mit einem TCP/IP-Stack interagieren kann? Oder liegt es an den Firmware-Ingenieuren, die physikalische Schicht mit WLAN-Treibern zu verbinden, wenn sie eine neue WLAN-Komponente verwenden.
@ Inc1982 Ich habe meiner Antwort ein bisschen mehr hinzugefügt. Die Schnittstelle sollte so ziemlich die gleiche wie bei jedem E/A-Gerätetreiber sein, zB Öffnen, Schließen, Senden, Empfangen usw. Ziemlich einfach, je nach Bedarf irgendwelche "Klebe"-Routinen zwischen dem Stack und dem Treiber zu schreiben.