Sun 3/80 NVRAM Reparatur

Mit der Einführung der Sun 3/80 wurden die vorher in einem EEPROM (dies waren die Einstellungen, die mit dem Kommando "eeprom" angezeigt und geändert werden konnten) und einem PROM (Kennung, Seriennummer und Ethernetadresse) abgelegten Daten der Hardwareeinstellungen in einem sogenannten NVRAM gespeichert.

Bild (46 kByte): Sun 3/80 von hinten

Zum Öffnen der Sun 3/80 die rot markierten Schrauben entfernen. Die Grafikkarte ist mit den blau markierten Schrauben befestigt.

Bild (43 kByte): Sun 3/80 offen

Danach den Deckel nach oben aufklappen.

Das NVRAM sitzt auf der Hauptplatine in der linken hinteren Ecke. Es hat einen gelborangen Aufkleber mit Barcode. Es ist ein batteriegepufferter Speicher und die Batterie, eine 3V Lithiumbatterie gibt üblicherweise nach 4-6 Jahren ihren Geist auf. Außerdem steckt noch die Hardwareuhr in diesem Chip.

Bild (99 kByte): Sun 3/80 Hauptplatine

Hier sieht man die Hauptplatine der 3/80. Die Grafikkarte ist bereits entfernt. Das NVRAM ist blau eingekreist.

Symptome

Die Symptome treten nach einem Aus- und Einschalten oder einem Stromausfall auf und äussern sich wiefolgt: Bild (20 kByte): Fehlermeldung

Vorsichtsmaßnahmen

Falls Ihr NVRAM noch funktioniert, machen Sie bitte sofort eine Kopie des Inhalts auf die Platte. Damit können Sie später den korrekten Inhalt wieder herstellen.

Dazu geben Sie als "root" folgendes Kommando ein:

# dd if=/dev/eeprom of=/var/adm/eeprominhalt bs=1 count=2040

Reparatur des NVRAM

Das NVRAM läßt sich mit einfachen Mitteln wieder gebrauchsfähig machen. Die Batterie sitzt in einem Plastikgehaeuse auf der Oberseite des Chip.

Besorgen Sie sich folgende Teile:

Nehmen Sie zuerst die Grafikkarte heraus. Dazu lösen Sie die Schrauben, die das Frontblech halten und die Muttern, die den Stecker sichern. Heben Sie nun die Karte hinten am Steckplatz an, bis Sie herausspringt. Entfernen Sie das NVRAM aus seiner Fassung. Der Pin 1 ist mit einem kleinen weißen Punkt markiert. Hier die Ansicht von oben:
           1 1 1 0 0 0 0 0 0 0 0 0
           2 1 0 9 8 7 6 5 4 3 2 1 
          +-----------------------+
Stirn-  > |  +----------------+  o<-- weisser Punkt
seite   > |  !      XXXX      |   |
zum     > |  !  ||||||||||||  |<----- gelber Aufkleber 
Kratzen > |  +----------------+   |   mit Barcode und
          +-----------------------+   vierstelliger
           1 1 1 1 1 1 1 2 2 2 2 2    Kennziffer
           3 4 5 6 7 8 9 0 1 2 3 4
Das aufgesetzte Plastikgehaeuse fuer die Batterie ist an den Stirnseiten vermittels einer harzartigen Masse mit dem eigentlichen Chip verklebt. Kratzen Sie diese Masse vorsichtig auf der dem Pin 1 gegenüberliegenden Seite (also zwischen Pin 12 und Pin 13) auf, bis zwei Metallbahnen zum Vorschein kommen. Dann noch vorsichtiger diese soweit freilegen, bis man ein Drähtchen daran anlöten kann.

Eine der Metallbahnen hat direkte Verbindung zum Massepin des Chip (Pin 12). Löten Sie ein Drähtchen an die Oberseite dieses Massepin und das andere Drähtchen an die andere Metallbahn.

Bild (54 kByte): Loetpunkte

Hier sehen Sie das NVRAM auf dem Rücken liegend. Ein Draht ist bereits an Pin 12 (rot), der ja mit der einen Metallbahn (ebenfalls rot) verbunden ist, angelötet, der andere muss erst noch an die andere Metallbahn (blau) angebracht werden.

Löten Sie nun die Batterie an die Drähtchen. Achten Sie auf die Polarität. Minus (-) kommt an den Massepin, Plus (+) an die freigelegte Metallbahn, die keinen Kontakt mit dem Massepin hat.

Tip: Die Oberfläche der Lithiumbatterie läßt sich wesentlich besser mit Lot benetzen, wenn man sie vorher mit einem schafen Gegenstand ankratzt. Zu langes Heizen mit dem Lötkolben ruiniert dagegen eventuell die Batterie.

Nachdem die Batterie abgekühlt ist, umwickeln Sie sie rundherum mit Isolierband. Biegen Sie die Drähtchen vorsichtig so um, daß die Batterie auf dem Chip zu liegen kommt.

Setzen Sie das NVRAM und die Grafikkarte wieder ein. Die Grafikkarte sollte die Batterie nun festhalten.

Rechner wieder in Gang bringen

Nun geht das NVRAM zwar wieder, aber da es noch keinen vernüftigen Inhalt hat, weigert sich der Rechner weiterhin, zu starten.

Zur kurzweiligen Unterhaltung können Sie jetzt das Terminal an Port A anschließen. Einstellungen: 9600 baud, 8 bit, no parity. Wahrscheinlich brauchen Sie auch ein Null-Modem-Kabel (2x3,4x5,6+8x20,7-7). Dann koennen Sie die Diagnoseausgaben beobachten. Ansonsten müssen Sie eben solange warten, bis der Bildschirm hell wird. Das dauert aber eine ganze Weile. Gehen Sie dann in den PROM-Monitor ((L1-A) drücken).

Nun muss das IDPROM mit sinnvollem Inhalt gefüllt werden. Sonst kann man nicht booten, weder vom Netz (mit Broadcast-Adresse sowieso keine gute Idee) noch von der Platte. Wir werden das IDPROM mit zufällig gewählten Daten füllen. Später können Sie dann, wenn Sie noch eine Kopie des NVRAM oder zumindest die Ethernet-Adresse und/oder die Seriennummer haben, diese nachtragen.

Geben Sie im PROM-Monitor folgendes ein:

> q70b (return)
70b=00? 6 (return)
70c=00? (Ctrl-C) (return)
> ^t fef04000 (return)
Hiweis: ^ ist das ASCII-Zeichen 0x5e (normalerweise links neben der 1).
Unter anderem erfolgt diese Ausgabe (hier mit Beispieldaten)
TIA entry = 33FA500
TIB entry = 33FB80A
PTE = 64000049
Diese Werte aufschreiben!!!

Nun muss der Eintrag für TIA fedfa000 geändert werden:

m a fedfa000 (return)
TIA MAP FEDFA000 [...] ? 33FA500 (return)
Bei der nächsten Kommandoeingabe (Strg-C) (return) drücken.

Nun muss der Eintrag für TIB fedfa000 geändert werden:

> m b fedfa000 (return)
TIB MAP FEDFA000 [...] ? 33FB80A (return)
Bei der nächsten Kommandoeingabe (Strg-C) (return) drücken.

Und zu guter Letzt muß noch der pagemap-Eintrag angepasst werden:

> p fedfa000 (return)
PageMap FEDFA000 [...] ? 64000049 (return)
Bei der nächsten Kommandoeingabe (Strg-C) (return) drücken.
> o fedfa7d8 (return)
So! An dieser Stelle müssen jetzt die neuen Werte für das IDPROM eingegeben werden. Insbesondere muß die Quersumme stimmen, da ansonsten die Maschine nicht bootet.

Position      Inhalt
fedfa7d8      Versionsnummer - immer 01
fedfa7d9      Erstes Byte der hostid (Systemtyp, 42 bei der Sun 3/80)
fedfa7da-df   6 Bytes Ethernetadresse (die ersten drei sind immer 08,00,20)
fedfa7e0-e3   Herstellungsdatum. Oft alles Nullen
fedfa7e4      Zweites Byte der hostid (hoechstes Byte der Seriennummer)
fedfa7e5      Drittes Byte der hostid (mittleres Byte der Seriennummer)
fedfa7e6      Viertes Byte der hostid (niedrigstes Byte der Seriennummer)
fedfa7e7      IDPROM Quersumme - XOR der Bytes d8-e6
Hier klicken, um einen per Zufall ausgewürfelten IDPROM-Inhalt sammt Quersumme zu bekommen.

Wenn Sie den Rechner nun aus- und wieder anschalten, sollte er einen Kaltstart ohne Diagnose machen und von der Platte booten.

Inhalt des NVRAM wiederherstellen

Glücklich schätzen kann sich nun, wer den Inhalt seines NVRAM irgendwann zuvor mit "dd" auf die Platte gerettet hat. Mit folgendem Kommando schreibt man es zurück:
# dd if=/var/adm/eeprominhalt of=/dev/eeprom bs=1 count=2040
# halt
Danach muß man die Maschine anhalten, aus- und wieder einschalten. Achten Sie darauf, daß die Ethernetadresse korrekt angezeigt wird.

Wer nicht dieses Glück hatte, muß sich den Inhalt des NVRAM selber zusammenbasteln.

Inhalt des NVRAM zusammenbasteln

Wenn Sie mit den zufällig ausgewürfelten Werten leben können, dann prima! Aber wenn Sie die original Ethernetadresse oder Seriennummer noch haben und diese wieder eintragen wollen, dann ist es einfacher, SunOS hochzufahren, /dev/eeprom auszulesen, mit Ihrem Lieblings-Hexeditor (ich kann den "beav" nur empfehlen, er ist im Emacs-Stil gehalten) abzuändern und wieder zurückzuschreiben.

Hier nochmal die Prozedur, das NVRAM auszulesen:

# dd if=/dev/eeprom of=/var/adm/eeprom.contents bs=1 count=2040
Das wichtigste ist eigentlich, die Quersumme bei 0x7e7 korrekt hinzubekommen. Falls Sie (wie ich) leichte Schwächen beim Rechnen im Hexadezimalsystem haben, hier ein kleines C-Programm, welches Ihnen die Checksum berechnet:
#include 
main()
{
        unsigned char x,y;
        int i;

        x=0;

        while(1)
        {
                scanf("%x",&i);
                y=i;
                x^=y;
                printf("%x\n",x);
        }
}
Speichern Sie das Programm als xor.c und übersetzen Sie es:
# gcc xor.c -o xor
Geben Sie die Hex-Werte von 0x7d8-0x7e6 ein:
# ./xor
01 42 08 00 20 07 ed aa 24 74 ec 43 00 50 18
1
43
4b
4b
6b
6c
81
2b
f
7b
97
d4
d4
84
9c
Der letzte Wert (0x9c) muss dann an die Stelle 0x7e7 geschrieben werden.

So, nun ist es fast geschafft! Schreiben Sie das NVRAM zurück und halten Sie die Maschine an:

# dd if=/var/adm/eepromneu of=/dev/eeprom bs=1 count=2040
# halt
Schalten Sie die Maschine aus und wieder ein und achten Sie auf die korrekte Anzeige der Ethernetadresse.

Was noch?

Falls Ihr Rechner bei der Einagbe des Kommando "eeprom" meckert, die Checksum wäre falsch, geben Sie einfach "eeprom -c" ein. Dabei handelt es sich nicht um die Checksum bei 0x7e7, sondern um eine andere.

Wenn Sie überhaupt keine Daten Ihrer Maschine mehr finden, weder in irgendwelchen Unterlagen noch in /etc/ethers, dann gibt es noch eine Möglichkeit, an diese Daten über den gelben Aufkleber zu kommen. Sun hat nämlich eine Datenbank, in der alle diese Werte aufgehoben wurden. Versuchen Sie doch mal Ihr Glück bei der Sun-Hotline. Wichtig sind die vier Kennbuchstaben/-ziffern unterhalb des Barcode.

Lang lebe die Sun 3/80

Ich denke, daß das NVRAM eine Fehlkonstruktion ist. Tatsächlich hat es sich nicht nur bei der 3/80, sondern auch bei der nachfolgenden Generation von Sparc-Rechnern als Archillesferse erwiesen.

Die ganze Reparaturanleitung ist natürlich ohne jede Gewähr!!!

Ich hoffe trotzdem, Ihnen gelingt die Reparatur des NVRAM anhand meiner Anleitung. Ich selbst habe schon über 10 NVRAMs auf diese Art und Weise repariert und so einige Sun 3/80 vor der Schrottpresse bewahrt.

Peter Koch