Forum: Mikrocontroller und Digitale Elektronik AT91SAM7 - FLASH vs. SRAM


von Peter Pippinger (Gast)


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

von Greg (Gast)


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

von Peter Pippinger (Gast)


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

von Greg (Gast)


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.

von gerhard (Gast)


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

von Joachim (Gast)


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

von Greg (Gast)


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.

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.