Forum: Mikrocontroller und Digitale Elektronik AT91 & OpenOCD Externes Flash Problem


von Siegfried D. (schnuller)


Lesenswert?

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!

von Dominic R. (dominic)


Lesenswert?

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

von Siegfried D. (schnuller)


Lesenswert?

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

von Siegfried D. (schnuller)


Angehängte Dateien:

Lesenswert?

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

von Dominic R. (dominic)


Lesenswert?

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

von Dominic R. (dominic)


Lesenswert?

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

von Siegfried D. (schnuller)


Angehängte Dateien:

Lesenswert?

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

von Dominic R. (dominic)


Lesenswert?

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

von Siegfried D. (schnuller)


Lesenswert?

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!

von Siegfried D. (schnuller)


Angehängte Dateien:

Lesenswert?

Sorry Anhang vergessen!

MFG Sigi

von Dominic R. (dominic)


Lesenswert?

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

von Siegfried Dellinger (Gast)


Lesenswert?

Hallo Dominic

Ich war im Urlaub und möchte nun mit dem Programmer weitermachen.
Hast du etwas rausgefunden?

von Dominic R. (dominic)


Lesenswert?

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

von Siegfried Dellinger (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.