AT91 & OpenOCD Externes Flash Problem

OP #623901
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
OP
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
OP
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
Angehängte Dateien:
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
OP
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
Angehängte Dateien:
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
OP
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 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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.