Hallo Ich habe einen Amontec USB JTAG Key und möchte damit einen AT91M5580 mit einem Externen Flash AM29F400 programmieren. Die OpenOCD Version = 184. Im Telnet Fenster kriege ich bei Flash probe 0 schon die Meldung "probing failed fpr flash bank '#0' at 0x01000000. Wenn ich dann flash info 0 eingebe bekomme ich im Logfile aber die Meldung: Error: cfi.c:2111 cfi_info(): cfi primary command set 0 unsupported Liegt das an falschen CFI Befehlen vom AMD Baustein oder habe ich einen Fehler im CFG File: working_area 0 0x00000000 0x0800 nobackup #flash configuration = M29F400 flash bank cfi 0x01000000 0x20000 1 2 0 Beim at91M63200.script bin ich mir auch nicht sicher! mww 0xffe00000 0x0100203d # MC_FMR: flash mode (FWS=1,FMCN=60) mww 0xffe00020 0x00000001 # MC_FMR: flash mode (FWS=1,FMCN=60) mww 0xffe00024 0x00000007 # MC_FMR: flash mode (FWS=1,FMCN=60) arm7_9 force_hw_bkpts enable # program resides in flash Ich wäre für Hilfe sehr dankbar!
Es scheint sich bei dem AM29F400 um ein ziemlich "altes" Flash zu handeln (4Mbit 5V CMOS only), das noch kein CFI unterstützt. Falls das Flash tatsächlich kein CFI unterstütz kannst du es evtl. mit der non-cfi Unterstützung zum Laufen bekommen. Dazu muss in non_cfi.c ein Datensatz angelegt werden, der dein Flash beschreibt. Das Flash wird dann allein anhand seiner Jedec ID konfiguriert. Im Netz konnte ich nur AM29F400B finden - wenn du ein Datenblatt hast, das exakt dein Flash beschreibt, könnte ich dir evtl. weiterhelfen. Gruß, Dominic
Danke für die schnelle Antwort! Aber wo kriege ich die Source Codes für OPENOCD her, ich habe nur die alten 141 und da gibts kein non_cfi.c File und für die neue 184 habe ich keine Source Files. Der Berlios Server ist scheinbar Tot! MFG Sigi
Hallo Nachdem der Haupserver von Berlios Zu ist , habe ich deine SourceFiles unter http://svn.berlios.de/svnroot/repos/openocd/trunk gefunden. Ich bin aber ein Anfänger und kann die Änderungen in dem non_cfi.c File vermutlich nicht machen, wäre toll, wenn du es machst, dann versteh ich es vielleicht auch! Ich hab dir das Datasheet beigelegt. Vielen Dank im vorraus! MFG Sigi
Ich habe mal anhand des Datasheets die aktuelle R188 um Unterstützung für das ST29F400 erweitert - allerdings funktioniert das jetzt NUR mit dem ST29 - wenn du tatsächlich das _AM_29F400 verwendest wird das nicht erkannt, da es andere JEDEC IDs hat. Eine MinGW Binary findest du unter http://mmd.ath.cx/openocd/openocd_mingw_r188_st29f400b.exe Ein Patch gegen R188 ist unter http://mmd.ath.cx/openocd/st29f400b.patch zu finden. Gruß, Dominic
Nachtrag zu deinem .cfg File: flash bank cfi 0x01000000 0x20000 1 2 0 Die Syntax ist: flash bank cfi <base> <size> <chip-width> <bus-width> <target#> Dein Flash ist 512KB groß, die Size sollte also 0x80000 sein. Ob die Base passt musst du selbst wissen. Dein .cfg gibt an, dass du einen 16-bit Bus hast (2), der aus 8-bit Chip(s) besteht (1) - dass also zwei Chips gemeinsam an einem Chipselect angeschlossen sind, um ein 16bit Interface zu erhalten. Bei deinem Chip wäre das möglich (er ist x8/x16), allerdings bin ich mir nicht sicher, ob es das ist, was du meinst. Wenn tatsächlich nur ein Chip vorhanden ist, wäre: flash bank cfi 0x01000000 0x80000 2 2 0 richtig. Gruß, Dominic
Nachdem ich die CFG geändert habe ( 1x 29F400BB ) und deine neue Exe verwendet habe bekomme ich die richtige ID vom Flash Info zurück!!! Ich kann auch löschen nur beim schreiben habe ich noch das Problem, das ich ein HEX habe und ich dieses erst noch zu einem BIN umwandeln muss. ( müsste ja mit objcopy aus der GNU Toolcain gehen ) Nochmal einen extremen Dank an Dominic! !!!Respekt!!! Nur noch ein klitzekleines Problem :-) Mit dem ST gehts nun, aber ich brauch auch noch ein AMD Flash. Der unterscheidet sich doch nur noch in den IDs oder ? Ich habe dir das PDF beigelegt, wäre super , wenn du es auch noch implementieren würdest! Vielen Dank im Vorraus!! MFG Sigi
Der OpenOCD versteht sich in der aktuellen Revision auch auf HEX, S19 und sogar ELF Files. Allerdings ist die Behandlung von Offsets noch nicht ganz schlüssig. Bei "binary" ist es leicht - dass Offset Argument gibt den Offset innerhalb der Flash Bank an. Bei HEX und ELF Files allerdings sind bereits absolute Adressen enthalten, ausserdem können ELF Files Sektionen enthalten, die garnicht geladen werden - daran arbeiten wir gerade. Hab die Files (Patch und Binary) upgedated, unter den alten Links findet sich jetzt auch Unterstützung für die AMD Varianten. Gruß, Dominic
Hallo Dominic Sieht alles sehr gut aus, ich kann Proben und bei info kommt auch was sinnvolles zurück. Mich wundert nur die Reihenfolge der Speicherblöcke: #0: 0x00000000 (0x10000kB) erase state unknown, protection state unknown #1: 0x00010000 (0x10000kB) erase state unknown, protection state unknown #2: 0x00020000 (0x10000kB) erase state unknown, protection state unknown #3: 0x00030000 (0x10000kB) erase state unknown, protection state unknown #4: 0x00040000 (0x10000kB) erase state unknown, protection state unknown #5: 0x00050000 (0x10000kB) erase state unknown, protection state unknown #6: 0x00060000 (0x10000kB) erase state unknown, protection state unknown #7: 0x00070000 (0x8000kB) erase state unknown, protection state unknown #8: 0x00078000 (0x2000kB) erase state unknown, protection state unknown #9: 0x0007a000 (0x2000kB) erase state unknown, protection state unknown #10:0x0007c000 (0x4000kB) erase state unknown, protection state unknown Ich hab mal das Datasheet geprüft, da ist eine andere Reihenfolge drin. Kann es sein, das du den Top und Bottom Typen vertauscht hast? in dem Patchfile cfi.c steht drin: + .mfr = CFI_MFR_ST, + .id = 0xd5, + .pri_id = 0x02, + .dev_size = 0x13, /* 2^19 = 512KB */ + .interface_desc = 0x2, /* x8 or x16 device with nBYTE */ + .max_buf_write_size = 0x0, + .num_erase_regions = 4, + .erase_region_info = + { + 0x00400000, /* 1x 16KB */ + 0x00200001, /* 2x 8KB */ + 0x00800000, /* 1x 32KB */ + 0x01000006, /* 7x 64KB */ + 0x00000000 Falsche Reihenfolge ?? Bei flash erase 0 0 10 sieht es gut aus er Meldet: erase sectors 0-10 on Bank 0 in 0s 359375us Wenn ich aber den Programmer abstecke, hat der Mikro immer noch seine gewünschte Funktion obwohl der Code im Flash steckt und der ja gelöscht wurde. der Ablauf war wie folgt! openocd.exe -d -f arm7_amt.cfg -l log.txt ( exe ist die Richtige! ) telnet localhost 4444 flash probe 0 flash info 0 flash erase 0 0 10 flash write 0 tran.bin 0 Im Anhang habe ich bei CFG, das BIN und das Log File. Es wäre toll wenn du mir noch einmal weiterhelfen könntest!! MFG Sigi Nachtrag!! hab gerade nochmal den AMD Typ getestet, da ist die Reihenfolge so wie sie beim ST + AMD sein sollte ( ich habe einen BB Typen )?!? aber nach dem löschen ist immer noch de Code drin, er löscht also nicht!
Hi, scheinbar hatte ich die BT und BB vertauscht (das Flash gibt's mit Top- und mit Bottom-Bootblock). Das Problem mit Erase muss ich mir näher ansehen. Laut Datasheet bietet das Flash kein Locking etc., also sollte das Löschen eigentlich problemlos funktionieren. Ich melde mich, wenn ich etwas gefunden habe. Gruß, Dominic
Hallo Dominic Ich war im Urlaub und möchte nun mit dem Programmer weitermachen. Hast du etwas rausgefunden?
Hallo Siegfried, eigentlich nur, dass der CFI Code dringend ein Review benötigt, für das mir im Moment die Zeit fehlt. Eventuell komme ich dieses Wochenende dazu, zumindest aber in den nächsten Wochen. Sorry, dass ich dir keine besseren Nachrichten geben kann. Gruß, Dominic
Hallo Dominic Hast du mich vergessen, ich habe das Projekt zur Seite gelegt und möchte nun mal weitermachen, aber dazu brauche ich deine Hilfe! Ich weis du machst es freiwillig und kostenlos , sicherlich hast du auch viel zu tun. Aber mich drückt auch der Schuh. Vielen Dank im Vorraus für deine Mitarbeit!!! MfG Dellinger Sigi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.