www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7S Program mit SAM-BA ins RAM schreiben und ausführe


Autor: Bernd Bauer (Firma: privat) (bauerb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich hab ein selbstgebautes AT91SAM7S-Board mit USB drauf.

Auf dem Controller hab ich zur Zeit das SAM-BA Bootprogramm mithilfe
der Recovery-Methode drauf.

Meine frage lautet nun, ob ich mit SAM-BA mein Programm ins RAM laden 
kann
und anschließend das Programm ausführen kann. Ich will nicht immer nach 
dem
flashen und eventuellen versagen des Programms das SAM-BA Programm
zurückspielen.

Ausserdem wenn ich SAM-BA auf meinem Windows-Rechner starte und lasse
mir die Speicherbereiche ausgeben, dann sthet dan immer 0 drinnen.
Sollte da zumindest nicht SAM-BA im Flash drinnen stehen?

mfg bernd

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein gut gemeinter Rat: Kauf oder bau ein JTAG interface und vergiss 
SAMBA so schnell du kannst. Gibts hier im Shop, aber auch zum selbst 
bauen. openOCD als Software tut hier einwandfrei Dienst.

Autor: Bernd Bauer (Firma: privat) (bauerb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke für den gut geminten Rat, abe rich hab auf meinem PC weder einen
Paralellen Port noch eine Serielle Schnittstelle. Bin also in gewisser 
weise
auf USB angewiesen und die USB JTAG-Teile sind mir einfach ein bißchen 
zu
teuer.

mfg bernd

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst doch auch selber bauen. Hier schwirrt auch ein Projekt von 
Benedikt Sauter herum, das das mit nem AVR erledigt. Sonst halt nen 
FT2232 oder wie der heißt kaufen. Kosten < 20 Euro, und glaub mir, das 
lohnt sich.

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeit derzeit auch mit SAM-BA.

Wenn ich die Binary manuell hochlade, dann wähle ich im Registerblatt 
"SRAM" den "Send File Name". Als Zieladresse nehme ich immer 0x202000, 
um nicht mit dem anderen Zeug in Konflikt zu geraten.

Zu diesem Zeitpunkt sollte dann auch der Button "Compare sent file with 
memory" ein positives Ergebnis liefern.

Starten kannst Du dein Programm dann z.B. über "go 0x202000" im 
TCL-Bereich.

------------------------------------

Das ganze geht auch ein bischen komfortabler, wenn man sich eine 
TCL-Datei aufzeichnet. Dann eine Verknüfung anlegen, die ungefähr so 
aussieht:

"C:\Programme\ATMEL Corporation\AT91-ISP v1.9\SAM-BA v2.5\SAM-BA.exe" 
\usb\ARM0 AT91SAM7S256-EK "C:\Dokumente und 
Einstellungen\Peter\Desktop\iartest\leds.tcl"

Dann geht eigentlich alles immer ganz flott, nachdem man die Binary 
erzeugt hat...

MfG
Peter

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...in der TCL steht dann ungefär sowas:

----8<----8<----8<----8<----8<----

########################################################################
global target
########################################################################

send_file {SRAM} "C:/Dokumente und 
Einstellungen/Peter/Desktop/iartest/ram/Exe/ledtest.bin" 0x202000 0
go 0x0202000

----8<----8<----8<----8<----8<----

Autor: gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Danke für den gut geminten Rat, abe rich hab auf meinem PC weder einen
>Paralellen Port noch eine Serielle Schnittstelle. Bin also in gewisser
>weise auf USB angewiesen und die USB JTAG-Teile sind mir einfach ein >bißchen >zu 
teuer.
also wem ~45€ (soviel kostet ein olimex ARM USB JTAG TINY für OpenOCD 
hier im shop) zuviel ist, dem ist auch nicht zu helfen!

gruss
gerhard

Autor: Bernd Bauer (Firma: privat) (bauerb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

wass heisst hier nicht mehr zu helfen... ausserdem ist das ein haufen 
kohle
für ein bißchen silizium...

@ Peter Pippinger:

ist das bei dir auch dass, beim rambereich immer nur nullen stehen?

ausserdem wie läuft das dann mit den interrupts, wenn das programm auf
adresse 0x202000 liegt? die müssen doch ganz am anfang bzw auf 0x200000
liegen. weil den bereich kann ich ja dann remappen.

mfg bernd

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer mit ARMen basteln will und sich über die "teure" Ausstattung 
aufregt, sollte wohl lieber bei AVR oder ähnlichem bleiben. Komisch, 
dass sich beim AVR niemand über die teuren ISP Adapter oder gar das 
unerschwingliche STK500 aufregt. kopfschüttel
Da war doch erst kürzlich jemand, der sich beim beschreiben des Rams mit 
SAMBA eben jenes überschrieben hat und sich dann wundert, warum nichts 
mehr klappt. Die 45 Öcken hast du durch eine Stunde weniger Frust bei 
der Fehlersuche locker wieder drin. Wer nicht will, der hat schon.

Autor: Bernd Bauer (Firma: privat) (bauerb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi!

ich weiss gar nicht worüber sich hier aufgeregt wird. ich will mir das 
ding nicht einfach nicht kaufen. ausserdem gibt es eine andere 
möglichkeit den controller zu programmieren (SAM-BA) und für den anfang 
reicht das für mich voll und ganz aus. ich weiss ja noch gar nicht, ob 
mir der ARM zusagt.

das ARM board ist übrigends selbst entwickelt. hat mich gerade mal 11 
Euro gekostet.

ich würde mir ausserdem nie ein STK500 kaufen, weils mir einfach auch zu 
teuer ist. meine AVRs programmier ich mir übrigends auch über ein 
selbstgebautes board über usb.

und damit können wir hoffentlich endlich zur ursprungsfrage 
zurückkehren.

mfg bernd

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernd,

ich habs gerade mal gecheckt:

- die Binary habe ich im Hexeditor aufgemacht.
- nach dem Hochladen siehts in dem Speicherbereich über SAM-BA genau so 
wie in der Datei aus.

Soweit ich das aber sehe, ist es so, dass wenn der ARM7 dann mit "go" 
loslegt, ist er nicht mehr über SAM-BA erreichbar. Deshalb habe ich auch 
das mit der Verknüpfung bei mir gemacht. Einfach den ARM resetten (übers 
Knöpfle) und auf den Link klicken. Dann gehts gleich mit der neuen 
Binary weiter...

<Spekulation ohne Fachwissen>
Zu Deiner Frage mit den Interrupts:

Ich habe bisher noch nichts mit den Interrupts gemacht. Aber es ist doch 
so, dass man an ein festgelegtes Register im Speicher einen Zeiger 
setzt, wohin dann der Programmcounter bei ausgelöstem Interrupt 
"springen" soll, oder? Im Assembler arbeitest du doch wahrscheinlich 
auch mit Labels. Dann sollte sich doch eigentlich auch der Assembler / 
Linker um die Berechnung der Labels kümmern, oder?
</Spekulation ohne Fachwissen>

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.