WLAN-Chip für hohen Datendurchsatz

Texas Instruments hat mehhrere Wireless Module, die sich direkt an einen ARM Prozessor anbinden lassen. Hier wird einer der mehreren wireless Chips erklärt, der für höchstleistungen gedacht ist (Datenblatt  WL1835)
und deshalb oft angeboten wird mit starken Cortex Prozessoren

WLAN Chip WL1835
TI verkauft Beagle Bones (ARM Cortex A8 Prozessor Boards), mit denen sich dieser Chip über ein Zusatz-Cap mit Beagle Bone Prozessor per Stecker verbinden lässt. Eine Alternative sind die TI SimpleLink Module. Diese basieren auf einem ARM Cortes M3.

Sende Fähigkeiten
Nr. 35 sendet WLAN auf  2.4 GHz und Bluetooth  (Projekt Brüt.)
Nr. 37 auf auf 5 GHz, 2.4 GHz und Bluetooth  (Projekt Brüt. 2)
Nr. 31 hat nur Bluetooth v4:  Mit Dual-Mode Bluetooth Low Energy

Der Chip ist explizit stromsparend ausgelegt und kann für low power-Anwendungen gebraucht werden.

Prozessor AM335x
Ist ein Coretex A8 mit Schwerpunkt auf der Ethernet-Kommunkation.
Nordic bindet sein RF-Chip an einen ARM Mx-Prozessor. Die Instruktionen sind dann etwas anders.

 

Steuerung Audio Codec

Überblick der Funkionen
Der Audio Codec gibt die Audiodaten aus. Zudem verwaltet er alle Audio-Pfäde auf dem Board. Er definiert, ob der Analoge Input aktiv oder der Digitale Input übergangen wird. Alle Einstellungen stehen in seinen Registern.

audio_Codec_v1

Bidirektionale Konfiguration des Audio Codec IO-Bauteilen
Die Einstellungen des Audio Codecs erfolgen über Register. Damit die Register gesetzt werden können, wird mit I2C auf die Codecregister zugegriffen.Insgesamt bestehen 11 Register mit je 16 Bits.

Einerseits werden über den Codec Kontroller die Konfigurationen gesetzt, anderseits setzt der Audio Codec die Pfade aktiv oder nicht. Die Kommunikation ist bidirektional: in beide Richtungen.

Audio Codec mit Audio-Daten speisen
Die konkrete Musikdatei wird über I2S dem Codec übermittelt und dann an den entsprechenden Ausgang geleitet.

Textbasiertes Testing: Aufbau Inputfile

File mit Testwerten

1 00000001 00000001 00000002 0
1 FFFFFFFF FFFFFFFF 00000000 1
2 00000004 00000005 FFFFFFFE 1
2 FFFFFFFF FFFFFFFF 00000000 0

wr_ram 0001 00F1  11
wr_ram 0002 0015  11
wr_rm  0002 F632  10

rd_ram 0001 00F1  99
rd_ram 0002 F615  99

reset 00 00 00 00 00 00 00 00 00
check 00 00 00 00 00 00 00 00 00
singl 13 01 00 00 00 00 00 00 00
check 13 00 00 00 00 00 00 00 00

Die Daten werden entweder als string  mit der Funktion read(<von>,<zu>)  oder als Hex-Zahl hread(<von>,<zu>)  eingelesen (vgl. std_logic_textio.vhd).

Richtige Zahlenwerte eintragen
Weil die Zahlen als Hex interpretiert werden, entspricht eine 0  4 Bits. Und die Zahl 10  entspricht dem dezimalen Wert 15.

Aus diesem Grund enstehen folgende Anzahl Bits:
00  im File    ->      std_logic_vector(7 downto 0)  beim Einlesen in der Testbench
0   im File    ->     std_logic_vector(3 downto 0)
7  im File     ->     std_logic_vector(3 downto 0)
0F5  im File  ->     std_logic_vector(11 downto 0)


Aufbau der Token
Die Token können alle vom selben Datentyp sein und über alle Testtyps die gleiche Struktur beinhalten. Das vereinfacht ihre Verarbeitung.

<Testtyp>  <Wert1>   <Wert2>    <Ergebnis_Addition> <Ueberlaufbit>
1          00000001  00000001   00000002             0

Im zweiten Beispiel hängt die Funktion der Token von dem Testtyp ab.

<Testtyp>  <adress>  <value>   <byte enable>
wr_ram     0001      00F1      11
<Testtyp>  <address>  <result>  <byte enable>
rd_ram     0001       00F1      01

Tipp: Fixe Tokenstruktur mit Auslassungen

singl 14 01 00 00 00 00 00 00 00   // verwerfen
polyp 13 01 14 01 15 01 14 00 02

Zum Decodieren wird es schwer, wenn unterschiedliche Verarbeitungs-Strukturen je nach Testtyp aufgebaut werden müssen.

Zu empfehlen ist, dass alle Test-Werte in einer Linie stehen und beim Verarbeiten gewisse Token verworfen werden.

Umsetzung in VHDL

Tri-State Transistoren treiben Ausgang / Bus

Transistoren vor IO
In der Digitaltechnik müssen IOs getrieben werden. Das heisst, dass der Input nicht „von selbst“ an den Ausgang übertragen wird, sondern nur, verstärkt den Zustand übergeben kann. Dazu dienen Transistoren.

npnbuffr
IO-Logik hat deshalb nicht nur zwei, sondern drei Leitungen zu verwalten (In, Out und enable).

tristate

Zustand des Ausgangs

Durch das Transistoren-Bild sieht man, dass der Output, beim Nichtleiten, vom Rest abgehängt ist.  Aus diesem Grund gibt es in der Digitaltechnik für die IOs den dritten Zustand ‚Z‚, was so viel wie in der Luft hängen bez. hochomig bedeutet.

Diese gute Visualisierung habe ich von folgender Website.

Beagle Bone (mit WLAN-CAP)

Beagle Bones sind von Texas Instruments. Sie sind die professionellere Variante der Arduinos und eine Alternative zu den Raspberry Pi.

Implementation des WLAN-Chips WL183x
Zum Testen dieses Chips, ist das Beagle Bone eine gute Idee.

beaglebone_Kommunikation

Die Prozessoren sind von ARM, dieses Modell hat HDMI ist ist bezüglich Kommunikation sehr vielseitig. Gleichzeitg ist das Board energiesparend konzipiert.

BEAGLEBONE_WL1835MOD_Cape
Das WLAN- und Bluetooth-Cap ist für durchsatz-starkes WLAN ( 802.11 n) gedacht und hat leistungsstarke Komponenten. Das Cap hat 2 Antennen (MIMO) und kann 40 MHz-Bandbreiten (802.11n) verarbeiten.

Bei Bluetooth ist BLE implementiert und die Coexistenz von BLE und WLAN ist möglich. Ein eigener, freier Datenstack ist vorhanden

WLAN Standards IEEE 802.11

IEEE 802.11
Der Standard definiert das Frequenzband [F0], die Anzahl Kanäle, deren Kanalbreiten [B], die Modulationsarten, die Kommuncationsart (unicast, multicast) und die Anzahl Antennen (SISO <-> MIMO).

Überblick Spezifikationen
IEEE 802.11a, b, c, g:  1 Antenne,
.                                          B = 20 MHz,
.                                          F0 = 2.4 GHz,
.                                          Anzahl Kanäle =  14 (! überlappen sich. Nur 1, 6, 11 nutzbar)
.                                          R_max = 54 Mbps

IEEE 802.11n:              4 Antennen:
.                                         Durchsatz R multipliziert sich mit Anzahl Antenen
.                                          B = 20 MHz, 40 MHz
.                                          F0 = 2.4 GHz, 5 GHz
.                                          Anzahl Kanäle = ? (überlappen sich bei 2. FO nicht)
.                                          R_max 1 Antenne = 150 Mbps (64-QAM, B = 40, guard = 0.4 u
.                                          R_max 4 Antennen = 600 Mbps (siehe 1 Antenne)

IEEE 802.11ac:             8 Antennen,
.                                          B = 160 MHz,
.                                          F0 =5 GHz,
.                                          Anzahl Kanäle = 8
.                                          R_max 1 Antenne = 866.7 Mbps
.                                          R_max 8 Antennen = 6.77 Gbps

Datendurchsatz R per LAN messen [Bitpersecond]

Iperf
Ist ein freie Software, um den Datendurchsatz auf TCP/IP-Netzen zu messen. Das Programm generiert UDP oder TCP Datenströme und funktioniert nach dem Server-Client-Prinzip.

# Client
iperf3 -c <ip-server>
# Client mit Paketgrösse und Meesszeit 1 min
iperf3 -c <ipserver> -l 1400 -t 60 
-f k 
--get-server-output
# Server 
iperf3 -s

Befehle
– l     :  Packetgrösse
– t    :   Wie lange (in s). Standard: 10 s.
– i    :   Intervall der Pakete (in s). Standard: 1 s.
— get-server-output : Die Messwerte des Serverers
.          erscheinen auch unter den Messwerten des
.          Clients. So in 1 Datei beide Werte.
– f    :   Ausgabeformat der Messung.
.          -f k   bedeutet, dass alle angaben in k sind
-B   :   welche IP (bei mehreren Netzen, z.B. LAN und WLAN)
– u    :  UDP.  Standard: TCP.

Eingabe Parameter über Konsole (Windows)

# Messinterval und Messzeit eingeben
echo %1 %2
iperf3 -c -i %1 -t %2

Eingabe Paramter über Konsole (Linux)

echo "Messintervall: " $1
echo "Messdauer: "     $2
iperf -c -i $1 -t $2

 

Theoretische Durchsatzraten WLAN

 

 

Pipe

Eine Pipe ist ein Datenstrom zwischen zwei Prozessen.
Bzw. es ist der Ausgang der Daten des ersten Programmes, der Abgefangen wird.

programm1 >> daten >> programm2
programm1 | ausgabe.txt // Die daten werden in ausgabe.txt geschrieben

Das Ergebnis eines Programms wird als Eingabe eines anderen Programms verwendet

| <optionen
Programm 1 übergibt Datenstrom direkt Programm 2