Inhaltsverzeichnis
English: This is a discription of the serial interface on the USRobotics USR 5461 router. If you need an english version please send me an email. If I have the time, I will try to translate it.
Serielle Konsole auf dem USR 5461
Neulich musste ich den Router USRobotics USR 5461 eines Freundes reparieren. Vor einigen Jahren habe ich ihm DD-WRT auf den Router geflasht, damit er ihn als Wireless-Client verwenden konnte. Mittlerweile ist das Passwort in Vergessenheit geraten und ich sollte den Router wieder zum Laufen bekommen.
Das Problem
Nun ist die Standard-Prozedur DD-Wrt auf den Auslieferungszustand und damit das Passwort zurückzusetzen hier genau beschrieben. Allerdings funktioniert dies beim USR5461 wie hier beschrieben nicht. Aber die Lösung wird auch gleich angegeben: Die Original-Firmware flashen, dann auf Werkseinstellungen zurücksetzen und dann wieder DD-WRT flashen.
Also eben schnell tftp auf meinem Linux-Rechner installiert, feste IP gesetzt, beim Aufruf von tftp einen blöden Fehler gemacht (siehe unten) und schon funktionierte (fast) nichts mehr. Erste Versuche zeigten, dass der Bootloader noch läuft. Es ließen sich auch die verschiedenen Firmwares flashen, aber keine bootete.
Pinout
In solchen Fällen hilft meistens eine Serielle Konsole, die bei vielen Geräten wie diesem Router irgendwo auf der Platine abzugreifen ist. Schnell war diese Seite gefunden, aber das wichtigste, die Pinbelegung, war nicht angegeben.
Nun musste ich die Pinbelegung selbst rausfinden. Also habe ich das Gehäuse geöffnet (unter den Füßen sind auch noch Klammern) und habe mir die Platine angeschaut. Da dies nicht das erste Gerät dieser Art ist, mit dem ich mich beschäftigte, fiel mir sofort der nicht bestückte Jumper J5 auf. 4 Pins, lötfreundlicher 2,54mm Pinabstand - das muss die serielle Schnittstelle sein.
Eine serielle Schnittstelle benötigt mindestens die Signale GND (Masse), TxD (Sendedaten) und RxD (Empfangsdaten). Häufig ist auch noch die Versorgungsspannung herausgeführt.
Der GND-Pin ist ziemlich eindeutig Pin 4 (der weiß hinterlegte Pin ist Pin 1), da er direkt mit den großen Masseflächen auf der Platine verbunden ist. Um die Datenpins zu finden habe ich dann mein Oszilloskop angeschlossen und gesehen, dass an Pin1 gelegentlich ein Rechtecksignal anliegt. Also musste das der TxD-Pin sein. Bei der Gelegenheit habe ich auch noch gleich die Frequenz nachgemessen - 115200 hz. Also gebräuchliche Parameter für eine Serielle Schnittstelle. An Pin2 war nichts zu erkennen und an Pin3 lagen dauerhaft 3.3V - also die Versorgungsspannung. Bleibt für Pin2 nur die Empfangsleitung übrig.
Pin | Signal |
---|---|
1 | TxD |
2 | RxD |
3 | Vcc (3,3V) |
4 | GND |
Nun habe ich eine Buchse aufgelötet und ein Kabel zum Anschluss an eine kleine Platine mit einem MAX2323CPE gebastelt. Der MAX2323CPE ist ein Pegelwandler, der die 3,3V-TTL-Pegel in richtige +-12V RS232-Pegel wandelt so dass die serielle Schnittstelle an einem PC damit klar kommt.
Der Fehler beim Flashen
Nachdem ich nun Zugriff auf die serielle Schnittstelle hatte, konnte ich den Flash-Vorgang über TFTP genau beobachten. Es erschien eine Fehlermeldung
Could not load flash0.os:: Error
Hierzu lieferte dieser Forenpost gleich die passende Antwort :
Things that might make the difference: 1 - setting rexmt to 1 2 - using binary mode/not text
Also nun den tftp-Transfer binär durchgeführt - zunächst die original-Firmware, dann DD-WRT und nun funktioniert wieder alles.
Übrigens ist die original-Firmware auf der seriellen Konsole viel geschwätziger. Unter DD-WRT kommt nichts mehr, sobald der Linux-Kernel gestartet wird. Als letztes steht dann
Entry at 0x80001000 Closing network. Starting program at 0x80001000
auf der seriellen Konsole.
Weitere Links:
- Offizielle Supportseite USR5461 - Hier bekommt man die original-Firmware.
- DD-WRT über den USR5461 - Wie flasht man den USR5461
- http://www.dd-wrt.com/site/support/router-database - Router-Datenbank von DD-WRT. Nach Eingabe von „usr 5461“ kann man die aktuelle Firmware herunterladen.