Netgear GS116Ev2-Boot Loop Fix

Ich bin günstig an einen Netgear Switch gekommen, doch leider war dieser Defekt. Ich hab dann einfach mal ein Netzwerkkabel eingesteckt und den Switch eingeschaltet. Das Fehlerbild war, dass der Port kurz an ging und sofort wieder aus.

Der erste Gedanke war das eine Spannungsversorgung zusammenbricht. Also hab ich den Switch mal aufgeschraubt und an den Spannungswandlern mal die Spannung gemessen. Die 3,3V und die 1,5V waren jedoch in Ordnung. Mhmmm doch nicht die Spannungsversorgung.

Beim aufschrauben ist mir jedoch ein nicht bestücktes Bauteil aufgefallen. Nach einem genauen Blick auf den Footprint mit den Bauteilen drumherum, war mir klar das es ein nicht bestückter RS232 Wandler war. Und tatsächlich kamen an einem Pin Daten an. Mit dem Oszilloskop habe ich mal noch schnell die Spannung von dem Signal gemessen und es war ein 2,7V Signal. Ein bisschen Fädeldraht hat mir dabei geholfen das Signal besser abzugreifen und es besser an einen FTDI Chip (USB Serial Wandler) anzuschließen. Um es dem FTDI etwas leichter zu machen hab ich noch ein Level Shifter dazwischen gebaut.

Hier ein Auszug von den empfangenen Boot Log:

serial_init done
flash id:0xc22016, using default size:0x400000 Bytes
flash partition info:
 [partition total size]:0x400000
[loader] addr:0x0 size:0x3c000
[control_block] addr:0x3c000 size:0x4000
[image_a] addr:0x40000 size:0xc0000
[image_b] addr:0x100000 size:0xc0000
[running_image] addr:0x1c0000 size:0x200000
[boot_cfg] addr:0x3c0000 size:0x4000
[user_cfg] addr:0x3c4000 size:0x3c000
start boot elite at physical address:0x19000000!
serial_init done
Loader version: 1.4
music_spi_init
flash id:0xc22016, using default size:0x400000 Bytes
switch reset done
sw init done
Press ctrl+c to enter into command line
loader check will_select_flag = IMAGE_A
image_physical_base:100000
bootloader select image B!
decompress_addr:0x1c0000 compress_addr:0x100000
decompressing image is successful
start boot elite at physical address:0x100000!

start watchdog_init
start clock_init
start music_spi_init
flash id:0xc22016, using default size:0x400000 Bytes
start I2C_init
MUSIC i2c init done
MUSIC i2c write failed: write dev_id:[0x1b] offset:[0x0] return 2
MUSIC i2c write failed: write dev_id:[0x1b] offset:[0x0] return 2
MUSIC i2c write failed: write dev_id:[0x1b] offset:[0x0] return 2
cfg mgmt init
startup cfg inst init
load cfg v2 success
start gpio_config_init product ID:GS116Ev2
start elite_switch_init
start netgear_switch_init
start elite_app_init
usr cfg inst init

Nachdem der Switch dann ca. 10sek. in dem Zustand „ust cfg inst init“ verblieben ist, hat er sich resetet und das ganze hat von vorne begonnen.

Wenn man denn Bootvorgang mit Strg+C abgebrochen hat, kam man zwar in den Bootloader, aber der Befehlssatz bestand quasi nur aus „reset“, „boot“ und „help“. Also davon war quasi schonmal nichts zu gebrauchen. Dieser Weg ist wohl auch nicht der richtige.

Ob der Switch doch bereit ist für die Mülltonne? Naja kaputt ist er ja schon… Da kann man ja mal versuchen ein paar Daten im Flash zu manipulieren…

Den Flash Programmer ausgepackt und diesen einfach mal mit dem IC verbunden. Zum Glück musste dieser nicht ausgelötet werden. Mit dem Programm AsProgrammer habe ich den Chip ausgelesen und den Inhalt erstmal als Backup weg gespeichert. Die .bin Datei kann man dann einfach mit einem Hex Editor bearbeiten.

Nun sollte der Boot Log doch noch hilfreich werden. Dort war zu erkennen, dass Image A gestartet wurde. Um ein fehlerhaftes Image auszuschließen habe ich in der bin Datei Image B einfach mal nach Image A kopiert (Die Startadressen und die Größe war aus dem Boot log zu erkennen). Das hatte allerdings noch keine Auswirkungen auf den Switch die Firmware scheint also in Ordnung zu sein.

Da der Switch immer beim „usr cfg inst init“ hängen blieb, hab ich beschlossen mir diese Werte mal genauer anzusehen. Die Infos wo diese zu finden sind, waren wieder schön abzulesen: [user_cfg] addr:0x3c4000 size:0x3c000

Hier waren folgende Werte gespeichert:

Die Werte habe ich dann mal gelöscht.. Alle Werte die nicht FF waren, habe ich zu FF geändert. Und die Daten erneut ins Flash übertragen.

Nachdem ich dann den Switch wieder eingeschaltet habe, konnte man im Boot Log wieder den Startverlauf beoachten. Und siehe da… Es hat sich was verändert.

......
start elite_switch_init
start netgear_switch_init
start elite_app_init
usr cfg inst init

Brodacast Switch by SW ! 
create default cfg success
create default cfg success
led cfg init
start process_initstart 
serial_line_initprocess: starting 
'Event timer'process: starting 
'TCP/IP stack'process: starting 
'Web server'process: starting 
'TFTP server'process: starting 
'nsdp process'process: starting 
'watchdog'+++++++++++++++++watchdog process start++++++++++++++++
process: starting 'device_process'process: starting 'gpio'start gmac_init
start elite_ether_initprocess: starting 'Music gmac driver'
1033 usr cfg restore finished
IMAGE_A running music_elite build time:2018.06.19 17:21:53
image_version:2.6.0.22
product_serial_number:4L148C5400436
product_mac_address:28:80:88:df:af:2d
into Main scheduler loop

Er hat eine Default Konfiguration erstellt und ist anschließend ganz normal gestartet.

Nach gut 2 Tagen im Dauerbetrieb kann ich sagen, Der Switch ist gerettet!

Zu guter Letzt noch ein Bild vom Aufbau mit dem angeschlossenen Flash Programmer und die Verkabelung der Seriellen Schnittstelle.