Hallo, highlander.
Kurze Vorbemerkung: von allem, was ich jetzt schreibe, habe ich eigentlich keine Ahnung. Wenn ich hier jetzt was falsches verzapfe, würde ich mich über eine schnelle Korrektur von wem-auch-immer sehr freuen. Ich habe nur mal ein bisschen gelesen und gedacht, aber das Denken ist ja so 'ne Sache...
Ich habe jetzt den Code vom wrt.exe auch mal überflogen (eigentlich nur den Anfang mit den Definitionen) und auf der Seite von Numonyx nach der Spezifikation von dem Chip geschaut (leider sehe ich den Anhang bei Dir im Post nicht).
Es scheint von dem Chip 2 Varianten zu geben: 8bit und 16bit, die nur durch die interne ID unterschieden werden, nicht aber durch die Chip-Bezeichnung. Jetzt hoffe ich mal, dass Du die 16bit-Variante hast, denn wenn ich mir die Chip-Definitionen im wrt.exe anschaue, dann sind das alles 16bit-Chips.
Auf der Numonys-Seite kann man sich einen Treiber im Source-Code von dem Chip runterladen:
c2635.zip. Der hilft einem schon mal bei der Erstellung des Definitions-Eintrags in wrt.exe.
Wie schon MaxMuster geschrieben hat, gilt es, einen Eintrag mit der Struktur
Code:
typedef struct _flash_chip_type {
unsigned int vendid; // Manufacturer Id
unsigned int devid; // Device Id
unsigned int flash_size; // Total size in MBytes
unsigned int cmd_type; // Device CMD TYPE
char* flash_part; // Flash Chip Description
unsigned int region1_num; // Region 1 block count
unsigned int region1_size; // Region 1 block size
unsigned int region2_num; // Region 2 block count
unsigned int region2_size; // Region 2 block size
unsigned int region3_num; // Region 3 block count
unsigned int region3_size; // Region 3 block size
unsigned int region4_num; // Region 4 block count
unsigned int region4_size; // Region 4 block size
} flash_chip_type;
zu machen.
Im File c2635.h des Treibers stehen einige Definitionen. In Zeile 500 und 653 steht die vendid (=Manufacturer) (0x0020). Die Definitionen sind wegen der 8bit und 16bit-Varianten zweimal da, zu Beginn des Treiber-Headers wird aber auch ein Define für die 16bit-Variante gesetzt. Ich führe also in Zukunft nur die Zeilen dieser Variante auf.
Die devid für 16bit steht in Zeile 654 (0x227E).
Die flash_size nimmt man am besten als Definition aus dem wrt54g.h: size16MB.
Der Command-Type ist meiner Meinung nach CMD_TYPE_AMD. Warum? Im Treiber-File c2635.c werden die ganzen Kommandos immer 0x00555, 0x002AA, 0x00555 eingeleitet und im wrt54g.c bei Zeile 1209 genau diese Folge für CMD_TYPE_AMD benutzt wird, während _SST und _BSC etwas bzw. ganz anders aussehen. Hier wäre eine Bestätigung von jemandem, der es besser weiß, aber ganz nett. Was mich verwirrt ist die Verschiebung um ein Bit nach links im wrt.exe. Aber vielleicht passiert das auch im Original-Treiber, ich hab' mir das da nicht so genau angeschaut.
Den flash_part kann man ja als freien Text definieren, da bietet sich natürlich "M29W128GH 8Mx16" an.
Und jetzt kommen die Region-Definitionen. Die region2_*- bis region4_*-Werte kann man alle auf 0 setzen, weil der Treiber ab Zeile 669 lauter gleich große Blöcke definiert. Man braucht also nur die richtigen region1-*-Definitionen. Und hier gerate ich ins Schwimmen. Der Treiber definiert für die 16bit-Variante die Blöcke nämlich nicht in Bytes, sondern in Words(=2 Bytes). Er definiert also 128 Blöcke mit 64k Words (=128k Bytes). Jetzt weiß ich nicht, ob man in beim wrt.exe [region1_num, region1_size] = [128,size64k] oder auf [128,size128k] setzen muss. Auch hier wäre ein Wissender hilfreich! Da der wrt.exe bei allen anderen Struktur-Definitionen aber immer Bytes zählt (obwohl ja alle Chips 16bit sind), tippe ich auf 128,size128k.
Insgesamt komme ich auf folgende Strukturdefinition, die man in wrt54g.h vor der Nuller-Zeile in Zeile 364 einfügen müsste:
Code:
{ 0x0020, 0x227E, size16MB, CMD_TYPE_AMD, "M29W128GH 8Mx16 (16MB)" ,128,size128K, 0,0, 0,0, 0,0 },
Mit dem HairyDairy...4.8.zip-File auf
http://downloads.openwrt.org/utils/ konnte ich mit "make" unter Unix ohne Problem das Executable neu bauen und beim Aufruf von
kam dann sogar gleich die neue Chipdefinition raus:
Code:
kiel HairyDairyMaid_WRT54G_Debrick_Utility_v48 # ./wrt54g -h
====================================
WRT54G/GS EJTAG Debrick Utility v4.8
====================================
>>>snip
/fc:XX = Optional (Manual) Flash Chip Selection
-----------------------------------------------
/fc:01 ............. AMD 29lv160DB 1Mx16 BotB (2MB)
/fc:02 ............. AMD 29lv160DT 1Mx16 TopB (2MB)
/fc:03 ............. AMD 29lv320DB 2Mx16 BotB (4MB)
/fc:04 ............. AMD 29lv320DT 2Mx16 TopB (4MB)
/fc:05 ............. AMD 29lv320MB 2Mx16 BotB (4MB)
/fc:06 ............. AMD 29lv320MT 2Mx16 TopB (4MB)
/fc:07 ............. AMD 29lv320MT 2Mx16 TopB (4MB)
/fc:08 ............. Intel 28F128J3 8Mx16 (16MB)
/fc:09 ............. Intel 28F160B3 1Mx16 BotB (2MB)
/fc:10 ............. Intel 28F160B3 1Mx16 TopB (2MB)
/fc:11 ............. Intel 28F160C3 1Mx16 BotB (2MB)
/fc:12 ............. Intel 28F160C3 1Mx16 TopB (2MB)
/fc:13 ............. Intel 28F160S3/5 1Mx16 (2MB)
/fc:14 ............. Intel 28F320B3 2Mx16 BotB (4MB)
/fc:15 ............. Intel 28F320B3 2Mx16 TopB (4MB)
/fc:16 ............. Intel 28F320C3 2Mx16 BotB (4MB)
/fc:17 ............. Intel 28F320C3 2Mx16 TopB (4MB)
/fc:18 ............. Intel 28F320J3 2Mx16 (4MB)
/fc:19 ............. Intel 28F320J5 2Mx16 (4MB)
/fc:20 ............. Intel 28F320S3/5 2Mx16 (4MB)
/fc:21 ............. Intel 28F640B3 4Mx16 BotB (8MB)
/fc:22 ............. Intel 28F640B3 4Mx16 TopB (8MB)
/fc:23 ............. Intel 28F640C3 4Mx16 BotB (8MB)
/fc:24 ............. Intel 28F640C3 4Mx16 TopB (8MB)
/fc:25 ............. Intel 28F640J3 4Mx16 (8MB)
/fc:26 ............. Intel 28F640J5 4Mx16 (8MB)
/fc:27 ............. MBM29LV320BE 2Mx16 BotB (4MB)
/fc:28 ............. MBM29LV320TE 2Mx16 TopB (4MB)
/fc:29 ............. MX29LV320B 2Mx16 BotB (4MB)
/fc:30 ............. MX29LV320B 2Mx16 BotB (4MB)
/fc:31 ............. MX29LV320T 2Mx16 TopB (4MB)
/fc:32 ............. MX29LV320T 2Mx16 TopB (4MB)
/fc:33 ............. SST39VF320 2Mx16 (4MB)
/fc:34 ............. ST 29w320DB 2Mx16 BotB (4MB)
/fc:35 ............. ST 29w320DT 2Mx16 TopB (4MB)
/fc:36 ............. Sharp 28F320BJE 2Mx16 BotB (4MB)
/fc:37 ............. TC58FVB321 2Mx16 BotB (4MB)
/fc:38 ............. TC58FVT321 2Mx16 TopB (4MB)
/fc:39 ............. AT49BV/LV16X 2Mx16 BotB (4MB)
/fc:40 ............. AT49BV/LV16XT 2Mx16 TopB (4MB)
/fc:41 ............. MBM29LV160B 1Mx16 BotB (2MB)
/fc:42 ............. MBM29LV160T 1Mx16 TopB (2MB)
/fc:43 ............. MX29LV161B 1Mx16 BotB (2MB)
/fc:44 ............. MX29LV161T 1Mx16 TopB (2MB)
/fc:45 ............. ST M29W160EB 1Mx16 BotB (2MB)
/fc:46 ............. ST M29W160ET 1Mx16 TopB (2MB)
/fc:47 ............. SST39VF1601 1Mx16 BotB (2MB)
/fc:48 ............. SST39VF1602 1Mx16 TopB (2MB)
/fc:49 ............. SST39VF3201 2Mx16 BotB (4MB)
/fc:50 ............. SST39VF3202 2Mx16 TopB (4MB)
/fc:51 ............. SST39VF6401 4Mx16 BotB (8MB)
/fc:52 ............. SST39VF6402 4Mx16 TopB (8MB)
/fc:53 ............. K8D1716UTC 1Mx16 TopB (2MB)
/fc:54 ............. K8D1716UBC 1Mx16 BotB (2MB)
/fc:55 ............. MX29LV800BTC 512kx16 TopB (1MB)
/fc:56 ............. MX29LV800BTC 512kx16 BotB (1MB)
/fc:57 ............. K8D3216UTC 2Mx16 TopB (4MB)
/fc:58 ............. K8D3216UBC 2Mx16 BotB (4MB)
/fc:59 ............. SST39VF6401B 4Mx16 BotB (8MB)
/fc:60 ............. SST39VF6402B 4Mx16 TopB (8MB)
/fc:61 ............. M29W128GH 8Mx16 (16MB)
>>>snip
So, damit könntest Du es jetzt mal probieren. Aber bitte bedenke, das ist alles nur ein theoretischer Gedanke! Ich kann keine Verantwortung dafür übernehmen, dass Dein Chip dabei heil bleibt! Du tust auf eigene Verantwortung, was auch immer Du mit diesen Informationen anfängst (We seek safe harbour, puhhh).
Gruß
dumdideldumdei