AT91SAM7 - FLASH vs. SRAM

Gast #575205
Lesenswert?
• ▲
▼
Hallo NG,

nachdem gestern meine LED endlich munter vor sich hingeblinkt hat, fehlt 
mir jetzt, so denke ich noch eine Sache, damit ich rundum zufrieden bin.

Zum Entwickeln verwende ich die IAR Workbench 4.0.

Meine Vorgehensweise bis jetzt:
1. Programm erstellen
2. Programm assemblieren / linken
3. Flashspeicher löschen (ca. 10 Sek.)
4. Reset am Board
5. erzeugten .bin-File mittels USB-Kabel und SAM-BA hochladen.
6. Ergebnis anschauen.

Was mich jetzt ziemlich nervt, ist dass ich den Flashspeicher ständing 
löschen muss. Das dauert zum Einen und zum Anderen ist die Lebensdauer 
des Flashs betroffen.

Ich würde also gerne die .bin-Files ins RAM hochladen.
Das Parallelport-JTAG - Kabel hier aus dem Shop hätte ich auch noch.
Gibts da in Verbindung mit der IAR Workbench eine Lösung?
Oder muss ich da anders vorgehen (z.B. open-ocd...).

MfG
Peter
Gast #575211
Lesenswert?
• ▲
▼
Hallo Peter,

ich benutze zwar keine IAR Workbench, jedoch den SAM-BA.
Bei ihm kannst du angeben, dass er ins SRAM schreiben soll.
Ich fange hier meist bei Adresse 0x202000 an.

Allerdings musst du dem Linker die Startadresse mitgeben.
Default (für FLASH) ist 0x0 --> auf 0x202000 ändern.

Neu Linken und los geht´s!

Gruß,
Greg
Gast #575219
Lesenswert?
• ▲
▼
Hallo Greg,

Welches Board stellst Du dann bei der Verbindung über SAM-BA ein?
Wird das Programm dann automatisch nach dem Hochladen ausgeführt?
Nach einem Reset müsste es doch dann weg sein, oder?

MfG
Peter
Gast #575226
Lesenswert?
• ▲
▼
Hallo Peter,

welches Board du einstellst ist ziemlich egal.
Ich habe ein selbstentwickeltes Board dran. Ich stelle zwar meist etwas 
ein, was mit dem jeweiligen Chip übereinstimmt (z.B. xxx256xxx).

Nach erfolgreicher Übertragung ins SRAM startest du das Programm
mit    go <adr>
z.B.   go 0x202000

Nach dem Reset steht dir SAM-BA wieder zur Verfügung.

Gruß,
Greg.
Gast #575282
Lesenswert?
• ▲
▼
@peter,
das Parallelport-JTAG - Kabel wird von der workbench unterstützt.
unter project -> options -> debugger -> driver stellst du "macraigor" 
ein.
unter project -> options -> debugger -> macraigor -> ocd interface 
device stellst du "Wiggler" ein und das ganze sollte laufen.

du kannst dann über die verschiedenen configurations entscheiden ob der 
code nur ins ram geladen wird (was deutlicher schneller geht) oder ob in 
das flash programmiert werden soll (damit der code auch spannungslo 
machen noch vorhanden ist).

außerdem steht dir damit auch der c-spy debugger zur verfügung.


gruss
gerhard
Gast #575441
Lesenswert?
• ▲
▼
@greg

Habe bisher auch immer geflasht.
Das mit dem Ausführen aus dem RAM versuche ich gerade auch. Klappt aber 
nicht.
Im Makefile RUN_MODE=RAM_RUN angegeben. Sollte bei 0x200000 anfangen.
Lade ich aber das File in SAMBA hoch, werden alle Speicherzellen nur 
noch mit 0 angezeigt. Beim "go" an Adresse 0x200000 kommt nur eine 
Meldung "0".
Gebe ich das Programm mal testweise als HEXfile aus und schaue mir die 
Adressen an, startet der Code bei 0x100000. Also definitiv falsch. Es 
ist mir unmöglich, einen Code zu erzeugen, der bei 0x200000 beginnt.
Benutze WinARM. Hast Du eine Idee, wo ich da suchen könnte?

Joachim
Gast #575464
Lesenswert?
• ▲
▼
@Joachim

Mit WinARM habe ich keine Erfahrung - ich benutze den gcc.

Es müsste einen Linker-Script geben (i.d.R. Endung ".ld").
Dort steht drin, wo dein Speicher anfängt und wie groß er ist.
Auch wird dort festgehalten, in welcher Reihenfolge die Programmsegmente 
"zusammengeklebt" werden (glue-section).

Meist gibt es drei Speicherblöcke:
- das eigentliche Programm
- Daten (z.B. deine Variablen)
- Stack

Ich lege meine RAM-Programme auf 0x202000, da ich irgendwann gelesen 
hatte, dass SAM-BA den unteren Speicherbereich für sich benutzt.
Es muss ja schließlich auch deine Eingaben irgendwo ablegen...

Gruß,
Greg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren