c't 14/2019
S. 128
Praxis
Speicheraufrüstung für WLAN-Router
Aufmacherbild
Bild: Thorsten Hübner

Organspende

TP-Link WR841N: RAM und Flash aufrüsten

Der günstige WR841N von TP-Link ist der beliebteste WLAN-Router für OpenWrt und Freifunk. Doch seine 32 MByte RAM und 4 MByte Flash-Speicher sind allmählich zu klein für das alternative Routerbetriebssystem. Eine Speicheraufrüstung löst das Problem und vermeidet unnötigen Schrott.

Der für rund 20 Euro erhältliche TP-Link stieg in den letzten Jahren zum beliebtesten Gerät für das Routerbetriebssystem OpenWrt [1] auf. Besonders häufig wird er von Freifunkern eingesetzt: Von fast 50.000 Freifunk-Hotspots in Deutschland laufen mehr als 30.000 mit diesem Router.

Doch die Entwickler von OpenWrt haben angekündigt, Geräte mit nur 32 MByte RAM oder nur 4 MByte Flash wie den WR841N in der übernächsten Version nicht mehr zu unterstützen. Das betrifft auch Freifunk, denn dessen Firmwares basieren auf OpenWrt. Schon jetzt spürt man die Einschränkungen des WR841N durch den kleinen Arbeitsspeicher, wenn viele Geräte im WLAN angemeldet sind. Eine gute Alternative zu dem beliebten Router zum ähnlichen Preis gibt es bislang nicht.

Zum Glück kann man RAM- und Flash-Chips mit ein wenig Geschick und gutem Werkzeug austauschen. Die Aufrüstung auf 64 MByte RAM und 8 oder 16 MByte Flash-Speicher kostet rund einen Euro, ist für erfahrene Löter in etwa 20 Minuten erledigt und beschert dem WR841N weitere Lebensjahre. Wir zeigen Ihnen Schritt für Schritt, wie Sie die Organspende bei den jüngeren Versionen 8, 9, 10 und 11 durchführen. Ältere Modelle wurden bei Redaktionsschluss noch nicht unterstützt. Ergänzungen veröffentlicht der Autor in seinem GitHub-Repository, verlinkt über ct.de/y79b.

Zum Aufrüsten sollten Sie ein ruhiges Händchen, praktische Erfahrung beim Löten und grundlegende Kenntnisse zum Raspberry Pi und dessen Linux-Konsole mitbringen.

Werkzeug & Teile

In Ihrem Werkzeugkasten sollte ein Schraubendreher- beziehungsweise Bitset mit Griff vorhanden sein, da der Router mit Kreuzschlitzschrauben verschlossen ist und Sie einen flachen Schlitzschraubendreher benötigen, um den RAM-Chip zu entfernen.

Um den alten Flash-Chip auszulesen und den neuen, größeren Chip zu beschreiben, benötigen Sie einen SPI-Flash-Programmierer. Wir erledigen das mit einem Raspberry Pi – weitere Elektronik benötigen Sie nicht. Zum Download weiterer Installationsdaten muss Ihr Pi mit dem Internet verbunden sein.

Die Flash-Chips stecken in SOIC-8-Gehäusen, die Sie über einen handelsüblichen, für etwa 5 Euro erhältlichen Kontaktierungs-Clip mit dem Pi verbinden. Es gibt zwar auch Sockel, aber ein Clip hat den Vorteil, dass Sie den alten Chip ohne Auslöten (sprich „in-system“) auslesen und beschreiben können. Ist sein Kabel zu lang, kann es passieren, dass der Chip nicht zuverlässig gelesen oder beschrieben werden kann. Hierfür sollten Sie einen Kondensator mit mindestens 4,7 µF bereithalten, der gegebenenfalls auftretende Spannungsabfälle ausgleicht.

Ein temperaturregelbares Heißluftlötgerät ist zum Entlöten des RAM-Chips unverzichtbar – bevor Sie hier über einen Kauf nachdenken, lesen Sie den Kasten auf Seite 132. Andere Methoden wie das Durchtrennen der Kontakte mit einem Skalpell oder einem Feinbohrschleifer bergen die Gefahr, dass sich die Lötpads ablösen.

Für alle weiteren Lötarbeiten benötigen Sie einen temperaturregelbaren Lötkolben mit einer stiftförmigen 0,1-mm- sowie einer um 45 Grad abgewinkelten, runden 1-mm-Spitze. Hinzu kommt feines Lötzinn mit 0,35 mm Durchmesser, 2 mm breite Entlötlitze und ein No-Clean-Flussmittelgel. Optional verschafft eine Lötzange mit 5-mm-Aufsätzen einen Geschwindigkeitsvorteil beim Auslöten der Flash-Chips.

Bei dem benötigten 64-MByte-RAM-Chip handelt es sich um einen DDR1-SDRAM (DDR-400) im TSOP-II-Gehäuse. Wir entschieden uns für den günstigen und leicht erhältlichen SK Hynix HY5DU121622DTP-D43. Beim Flash ist der Router nicht sehr wählerisch: Fast alle 3,3-V-SPI-Flash-Chips im SOIC-8-Gehäuse können eingesetzt werden. Unsere Wahl fiel auf Winbonds W25-Reihe, die sowohl 8-MByte- (W25Q64) als auch 16-MByte-Chips (W25Q128) enthält. Links zu Clips, erprobten Lötstationen und Lötspitzen sowie weitere kompatible RAM- und Flash-Chips finden Sie über ct.de/y79b. Alle benötigten Werkzeuge und Komponenten finden Sie außerdem im Kasten rechts.

Flashtool vorbereiten

Starten Sie zunächst Ihren Raspberry Pi mit einem aktuellen Raspbian und melden Sie sich auf der Konsole an – entweder lokal mit Bildschirm und Tastatur oder per Netzwerk über SSH.

Um SPI am Pi zu nutzen, müssen Sie es aktivieren: sudo raspi-config startet die Konfigurationsoberfläche. Im Menü aktivieren Sie unter Interfacing Options die Option P4 SPI. Anschließend verlassen Sie das Menü mit der Escape-Taste.

Das Tool „Flashrom“ liest und schreibt Daten von und auf SPI-Flash-Chips. Installieren Sie zunächst seine Abhängigkeiten plus git:

sudo apt update && :

.sudo apt install git:

. libpci-dev libusb-1.0:

. libusb-dev

Anschließend klonen Sie den Sourcecode aus dem GitHub-Repository, wechseln in das neue Verzeichnis und starten die Installation:

git clone https://github.com:

./flashrom/flashrom

cd flashrom

make && sudo :

.make install

Nach der Installation führen Sie flashrom -R aus, um das Tool zu testen.

Flash auslesen

Bevor Sie mit den neuen Komponenten starten können, müssen Sie den alten Flash-Speicher auslesen: Die ART-Partition (Atheros Radio Test) enthält wichtige Kalibrierungsdaten für das WLAN-Modul. Die Daten sind auf jedem Router individuell, sodass Sie diesen Vorgang für jedes Gerät wiederholen müssen. Falsche Kalibrierungsdaten beeinträchtigen unter Umständen das von WLAN verwendete Zugriffsverfahren CSMA/CA, sodass der Datendurchsatz einbricht und WLANs in der Umgebung gestört werden.

Verkabeln Sie Ihren Clip, wie in der Grafik auf Seite 130 gezeigt. Achten Sie dabei auf die Orientierung des Chips, die mit einer runden Kerbe auf dem Gehäuse markiert ist.

Anschließend trennen Sie den Router von der Stromversorgung und öffnen das Gehäuse. Dazu entfernen Sie die beiden Gummifüße nahe den Netzwerkports des Routers und lösen die darunterliegenden Kreuzschlitzschrauben. Dann klappen Sie die Antennen nach hinten aus und nehmen den Router mit der Rückseite in eine Hand, sodass Sie mit den Fingerkuppen oben in die Netzwerkanschlüsse greifen können. Mit der anderen Hand greifen Sie auf gleicher Höhe an den Rand des Deckels. Möglichst weit unten halten die Daumen das Gerät in Position. In diesem Griff stellen Sie das Gerät für zusätzlichen Halt auf einer rutschfesten Unterlage ab und ziehen beide Seiten behutsam, aber kräftig auseinander, bis sich der Deckel löst. Abbrechende Haken sind hier kein Grund zur Sorge – die Schrauben halten das Gehäuse auch so verschlossen.

Der Flash-Chip lässt sich leicht auf der Platine des Routers erkennen: Er ist der SOIC-8-Chip, der dem Hauptprozessor in der Mitte der Platine am nächsten ist. Sind Sie nicht sicher, suchen Sie mit der Bezeichnung auf seinem Gehäuse ein Datenblatt im Internet. Alle Versionen des TP-Link WR841N besitzen nur einen Flash-Chip.

Bei dem ersten Versuch, den Flash auszulesen, sollte der Ein/Aus-Schalter am WR841N im Aus-Zustand sein. Gelingt das Auslesen nicht, versetzen Sie ihn in den Ein-Zustand.

Prüfen Sie erneut, ob die Pinbelegung korrekt ist. Dann klemmen Sie den Clip vorsichtig auf den Flash-Chip. Sitzt er gut, schalten Sie den Pi ein. Sollte der Pi nicht hochfahren, besteht wahrscheinlich ein Problem mit der Verkabelung oder der Clip sitzt nicht richtig.

Läuft der Pi, öffnen Sie erneut eine Konsole und prüfen mit dem Befehl

flashrom -p:

. linux_spi:dev=:

./dev/spidev0.0:

.,spispeed=1000

ob der Flash-Chip vom Pi angesprochen werden kann. Klappt das nicht, setzen Sie stattdessen spidev0.1 ein. Scheitert das ebenfalls, besteht wahrscheinlich ein Problem mit der Verkabelung.

Bei erfolgreicher Verbindung lesen Sie den Flash mit

flashrom -p:

. linux_spi:dev=:

./dev/spidev0.0,:

.spispeed=1000 -r:

. flashdump.bin

beziehungsweise mit spidev0.1 aus. Es ist ratsam, den Vorgang mehrfach zu wiederholen und nach jedem Durchlauf mit md5sum flashdump.bin einen Hashwert zu generieren, um zu prüfen, ob die Daten identisch sind. Stimmen mindestens zwei Dumps überein, wurden diese korrekt ausgelesen.

Die ART-Partition befindet sich in den letzten 64 KByte des Flashinhalts. Sie muss gesondert aus dem Flashdump extrahiert werden. Das erledigt der Befehl

dd ibs=4k skip=1008:

. if=flashdump.bin:

. of=artdump.bin

Aufgrund des Platinenlayouts der Versionen 10 und 11 kann es schwierig sein, den Flash direkt auszulesen, weil der Clip nicht richtig sitzt. In diesem Fall können Sie die Partition auch per SSH herunterladen. Hierzu müssen Sie ein frisches OpenWrt installieren oder in Freifunk-Gluon ein Passwort für den Fernzugang setzen. Ob Sie per IPv4 oder IPv6 zugreifen, spielt dabei keine Rolle:

ssh-keygen -f "~/.ssh:

./known_hosts" -R <IP>

ssh root@<IP> :

.'dd if=/dev/mtd4 :

.of=/tmp/art.bin'

scp root@<IP>::

./tmp/art.bin artdump.bin

Neues Speicherabbild vorbereiten

Auf dem Label des Routers steht die für das Image benötigte MAC-Adresse. Hier sollte man außerdem vermerken, dass der Router aufgerüstet wurde.

Weil der Hersteller-Bootloader den größeren Flash-Chip nicht unterstützt, nutzen wir eine angepasste Variante des Open-Source-Bootloaders „U-Boot“. Sie bringt außerdem zusätzliche nützliche Funktionen mit; beispielsweise ein Webinterface, mit dem Sie OpenWrt neu aufspielen können, wenn die Betriebssystemdaten beschädigt sind.

Um das neue Speicherabbild vorzubereiten, laden Sie die Bootloader-Datei für Ihre WR841N-Version herunter. Ändern Sie im Befehl VERSION zur Versionsnummer Ihres Routers. Die Versionsnummer finden Sie auf dem Etikett auf der Unterseite des Routers:

wget -O uboot.bin:

. http://derowe.com/:

.u-boot/stable/:

.tp-link-tl-wr841n:

.-vVERSION.bin

Die passende OpenWrt-Firmware laden Sie mit

wget -O openwrt.bin https://:

.downloads.openwrt.org:

./releases/18.06.2/targets:

./ar71xx/tiny/openwrt-:

.18.06.2-ar71xx-tiny-:

.tl-wr841-vVERSION:

.-squashfs-sysupgrade.bin

herunter. Alternativ laden Sie eine Sysupgrade-Freifunk-Firmware herunter. Für Freifunker gibt es außerdem einen Patch (ct.de/y79b), der die Hardware-Definitionen für modifizierte WR841N zu Gluon hinzufügt, um die Speicherbeschränkung beim Firmware-Bauvorgang aufzuheben und die Geräte als modifiziert zu kennzeichnen. Danach erzeugen Sie ein leeres Speicherabbild für den neuen Flash-Chip in der entsprechenden Größe. Für 8-MByte-Chips führen Sie dazu

dd if=/dev/zero:

. ibs=4k count=2048:

. | tr "\000" "\377" :

.> out.bin

aus. Haben Sie einen 16-MByte-Chip, erhöhen Sie count auf 4096. Dann kopieren Sie die ART-Partition ans Ende des Speicherabbilds. Hier ist der Befehl erneut abhängig von der Speichergröße. Im Befehlstext

dd conv=notrunc :

.obs=4k seek=2032 :

.if=artdump.bin of=out.bin

zeigt seek=2032 auf die letzten 64 KByte des 8-MByte-Abbbilds. Für 16-MByte-Chips ändern Sie den Parameter auf 4080.

Den Bootloader kopieren Sie unabhängig von der Speichergröße an den Anfang des Abbilds

dd conv=notrunc:

. if=uboot.bin :

.of=out.bin

und fügen dahinter das OpenWrt-Abbild an:

dd conv=notrunc :

.obs=4k seek=32 :

.if=openwrt.bin :

.of=out.bin

Schreiben Sie die erste MAC-Adresse von der Unterseite des Routers in das Abbild, indem Sie die Ziffern im folgenden Befehl statt aa, bb… einsetzen. Achten Sie dabei darauf, dass das x am Anfang jedes Blocks stehen bleibt:

printf :

."\xaa\xbb\xcc\xdd\xee\xff":

. | dd conv=notrunc:

. ibs=1 obs=256 seek=509:

. count=8 of=out.bin

Zuletzt schreiben Sie die Vorkommastellen der Versionsnummer in das Abbild:

printf:

. '\x08\x41\x00\x<VERSION>\:

.x00\x00\x00\x01':

. | dd conv=notrunc:

. ibs=1 obs=256 seek=509:

. count=8 of=out.bin

Tragen Sie VERSION immer zweistellig ein, beispielsweise 09.

Damit keine Änderung im SD-Karten-Schreibpuffer des Pis hängen bleibt, führen Sie sync aus. Danach ist das neue Speicherabbild bereit und Sie können den neuen Chip vor dem Einlöten beschreiben. Trennen Sie den Pi dazu vom Strom, verbinden Sie den neuen Chip und starten Sie den Pi wieder. Auf der Konsole angekommen schreiben Sie das Abbild in den Speicher:

flashrom -p linux_spi:

.:dev=/dev/:

.spidev0.0,:

.spispeed=1000:

-w out.bin

Achten Sie hierbei darauf, die korrekte SPI-Geräteadresse anzugeben.

Umgelötet: SPI-Flash

Mit dem SOIC-8-Clip liest und beschreibt man SPI-Flash-Chips, ohne sie auslöten zu müssen. Das ist wichtig, um die Kalibrierungsdaten des WLAN-Moduls vom alten Speicher zu sichern.

Um die Bauteile des Routers nicht durch elektrostatische Entladungen zu beschädigen, erden Sie sich, bevor Sie die Platine des Routers berühren. Am zuverlässigsten klappt das an den Schutzkontakten einer Steckdose – den blank liegenden Metallbögen oben und unten in der Dose, die Sie kurz mit dem Finger berühren.

Zum Auslöten setzen Sie die 0,1-mm-Spitze in den Lötkolben ein und stellen ihn auf 350°C. Da das alte Lot einen sehr hohen Schmelzpunkt aufweist, hilft es, neues Lot auf die Kontakte des Flash-Chips aufzubringen. Das Aufbringen von Flussmittel auf die Litze erleichtert den Vorgang.

Mit einer Lötzange lässt sich der alte Chip leicht entfernen. Beachten Sie jedoch, dass dieser dabei wahrscheinlich durch die Hitze zerstört wird: Decken Sie die Kontakte des Chips zunächst mit so viel Lötzinn ein, dass sich Lötbrücken zwischen den Kontakten bilden. Das verbessert die Wärmeleitung. Dann setzen Sie die Zange an, warten, bis das Lötzinn flüssig ist und heben den Chip vorsichtig von der Platine.

Nutzen Sie keine Lötzange, müssen Sie das Lötzinn mit der Litze entfernen und die Pins einzeln mit dem Lötkolben erhitzen und beispielsweise mit einem feinen Schraubendreher vorsichtig von der Platine heben. Restliches Lot entfernen Sie mit Entlötlitze oder einer Entlötsaugpumpe sauber von den Pads. Etwas neues Lötzinn und Flussmittel können dabei helfen.

Das Auflöten des neuen Flash-Chips gestaltet sich einfacher: Setzen Sie den Chip mit der runden Kerbe auf die Markierung auf der Platine. Achten Sie darauf, dass der Chip mit den Pins mittig auf den Lötpads sitzt und fixieren Sie ihn mit etwas Klebeband. Löten Sie die ersten beiden Pins an, dann entfernen Sie das Klebeband und verlöten die restlichen Pins. Da er hitzeempfindlich ist, sollten die Pins nie länger als zwei Sekunden berührt werden. Sind die Lötstellen augenscheinlich gelungen, schließen Sie den Router an ein Netzteil an. Haben Sie ordentlich gearbeitet, bedankt sich der Router nach circa 10 Sekunden mit einem schnellen Blinken der Status-LED.

RAM-Chip auslöten

Der RAM-Chip ist mit seinen 66 Pins etwas schwieriger zu löten als der Flash-Chip. Mit einem Heißluftlötkolben und einer angeschrägten Lötspitze lässt er sich jedoch tauschen.

Der RAM-Chip ist mit seinen 66 Pins auf der Platine sofort zu erkennen. Aufgrund der vielen Pins braucht es hier Geduld und eine ruhige Hand. Mit ein wenig Übung schaffen Sie den Austausch aber in weniger als 10 Minuten.

Das Gehäuse lässt sich nicht vollständig von der Platine trennen, da die Antennen angelötet sind. Entfernen Sie daher die Antennenkabel aus eventuell vorhandenen Führungs-Clips und legen Sie das Gehäuse daneben. Nutzen Sie eine hitzebeständige Unterlage und stellen Sie einen schweren Gegenstand vor die Netzwerkports, damit die Platine später nicht verrutscht.

Bringen Sie mit dem Lötkolben frisches Lötzinn auf die Pins des alten RAM-Chips auf. Großzügiges Auftragen sorgt für eine gute Hitzeverteilung.

Bereiten Sie Ihr Heißluftgerät mit einem möglichst kleinen Aufsatz vor und stellen Sie es auf 350 °C ein. Unser Gerät lieferte bei mittlerer Zulufteinstellung die besten Ergebnisse. Es ist unserer Erfahrung nach nicht notwendig, die Platine vorzuheizen. Legen Sie sich außerdem einen möglichst flachen Schlitzschraubendreher bereit, um den RAM-Chip anzuheben. Die eventuell störenden LEDs biegen Sie herunter.

Ist das Heißluftgerät auf Temperatur, setzen Sie den Schraubendreher auf der Seite der LEDs mittig am RAM-Chip an. Beginnen Sie, die Pins des RAM-Chips kreisend (1 Runde/Sekunde) mit dem Heißluftgerät aus etwa 5 mm Höhe zu erhitzen. Sobald sich das Lot verflüssigt, üben Sie vorsichtig leichten Druck mit dem Schraubendreher aus. Der Chip stellt sich auf und lässt sich vorsichtig anheben. Bei gleichzeitiger Hitzezufuhr ist es so möglich, ihn umzukippen und von der Platine zu entfernen, sobald kein Kontakt mehr mit den Lötpads besteht.

Danach befreien Sie die Lötpads mit der 1-mm-Spitze des Lötkolbens und großzügig in Flussmittel getränkter Entlötlitze vorsichtig und möglichst restlos vom alten Lot. Arbeiten Sie gründlich, denn Lotreste behindern das Anlöten des neuen RAM-Chips.

Neuen RAM einlöten

Zum Kasten: Lohnt sich das?

Setzen Sie den neuen Chip behutsam auf die gereinigten Pads. Achten Sie auf die Orientierung seiner Kerbe und der entsprechenden Markierung auf der Platine. Danach verschieben Sie ihn, bis er möglichst mittig auf den Lötpads sitzt, da sich das neue Lot ansonsten schlecht verteilt oder Lötbrücken entstehen.

Drücken Sie den Chip vorsichtig an die Platine, sodass die Pins sicheren Kontakt mit den Lötpads haben. Halten Sie den Druck und löten Sie mit der 0,1-mm-Spitze an zwei diagonal gegenüberliegenden Ecken jeweils drei Pins an. Prüfen Sie die Positionierung erneut. Dann bestreichen Sie beide Pinleisten großzügig mit Flussmittel.

Wechseln Sie zur angeschrägten 1-mm-Lötspitze und benetzen Sie ihre Fläche sparsam mit Lötzinn. Lassen Sie die Spitze mit behutsamen Auf- und Abbewegungen über die Pins des Chips gleiten. Sind alle Pins verbunden, reinigen Sie die Spitze und machen mit neuem Lötzinn auf der anderen Seite weiter. Zuletzt prüfen Sie, ob alle Pins mit ihren Pads verbunden und beide Seiten frei von Lötbrücken sind.

Haben Sie versehentlich Pins gebrückt, versuchen Sie das überschüssige Lot mit zusätzlichem Flussmittel zu verteilen. Hilft das nicht, verwenden Sie die 0,1-mm-Spitze und Entlötlitze, um die Brücken zu entfernen.

Sitzt der RAM-Chip sicher auf der Platine, ist der Eingriff abgeschlossen. Stecken Sie das Netzteil ein. Blinkt die Status-LED nach etwa 10 Sekunden, war die zweite Organspende auch erfolgreich. (amo@ct.de)