Forum: Mikrocontroller und Digitale Elektronik direkte Speicheradressierung


von Burkhard (Gast)


Lesenswert?

Hallo!

Möchte bei meinen Atmega8 im Flash Speicher nach dem Programmcode Daten 
schreiben. Woher bekomme ich das Ende des Programmcodes und wie kann ich 
fortlaufend dort Daten eintragen? Probiere jetzt schon seit einigen 
Stunden ohne Erfolg.

von Philipp B. (philipp_burch)


Lesenswert?

Indem du deine Daten einfach hinter das Programm hinschreibst?

von Burkhard (Gast)


Lesenswert?

;-) das ist schon klar. Aber wie? Woher bekomme ich die erste 
Speicherstelle nach dem Programmcode? Und wie schreibe ich dort dann 
direkt hin?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Schau dir dein Linkercontrolscript (LCS) an (avr/lib/ldscripts).

Es gibt für jede AVR Architektur gesonderte. Welche zu deinem µC passt, 
musst du in der Doku nachschlagen bzw. aus den Commandlineinfos vom 
Kompilieren her oder aus den Hilfsdateien rauspfriemeln.

Im LCS ist die Speicheraufteilung von FLASH-ROM und SRAM beschrieben. 
Insbesondere gibt es eine Zeile:

   __data_load_end = __data_load_start + SIZEOF(.data);

Das Symbol __data_load_end ist die letzte von Programmcode und 
initialisierten Daten belegte Adresse im FLASH-ROM.

Dahinter ist das von dir gewünschte leere ROM und anschliessend ggf. der 
Bootloaderbereich im ROM (Grösse und Position vielleicht per Fusebits 
abfragbar oder eh bekannt).

Dass du aus deiner Applikation dahin schreiben kannst, weiss ich nicht. 
Es gibt Möglichkeiten seitens des Bootloaders das zu unterbinden 
(Exklusives Schreibrecht durch den Bootloader). Analyse von 
Bootloadercode ist wahrscheinlich eine gute Methode, um das 
ROM-Schreiben zu lernen.

von Philipp B. (philipp_burch)


Lesenswert?

Öhm, geht um das Eintragen von Daten beim Programmieren (Also LUTs oder 
so), oder um das Schreiben zur Laufzeit? Letzteres ist nur aus dem 
Bootloader möglich und der weiss wiederum nix vom eigentlichen Programm, 
sodass du die Adresse entweder beispielsweise im EEPROM ablegen oder 
fest einprogrammieren musst...

von Burkhard (Gast)


Lesenswert?

Vielleicht sollte ich kurz beschreiben was ich machen will. Der Atmega 
soll die ausgelesenen Daten vom Drucksensor am Ende des Programmcodes in 
den Flashspeicher schreiben. Die Daten sollen fortlaufend geschrieben 
werden. Wenn ich im laufenden Betrieb den Atmega mit PONYPROG2000 
auslese, müsste ich dann ja eigentlich die Daten haben.

von Philipp B. (philipp_burch)


Lesenswert?

Wie gesagt, den Flash kannst du nur aus dem Bootloader beschreiben. Also 
entweder haust du dein ganzes Programm in den Bootloader und nutzt den 
App-Code als Datenspeicher (Würde ich nicht empfehlen), oder du 
verwendest externen Speicher, beispielsweise eine SD-Karte. Oder für 
kleine Datenmengen den EEPROM, ist aber halt relativ klein (AFAIK 512 
Byte beim m8).

von Burkhard (Gast)


Lesenswert?

Da hatte ich mir das wohl zu einfach vorgestellt. Der EEprom ist zu 
klein. Da muss ich mich wohl belesen wie ich ne SD-Card am Atmega zum 
laufen bekomme. Hat vielleicht einer einen Link dafür für mich.

von Falk B. (falk)


Lesenswert?

@  Burkhard (Gast)

>Da hatte ich mir das wohl zu einfach vorgestellt. Der EEprom ist zu
>klein. Da muss ich mich wohl belesen wie ich ne SD-Card am Atmega zum
>laufen bekomme. Hat vielleicht einer einen Link dafür für mich.

Es gibt noch einen recht günstigen Zwischenschritt. Nimm ein externes, 
serielles EEPROM, die gibt es bis 128kB und mehr. Einfach anzusteuern, 
billig.

MFG
Falk

von Philipp B. (philipp_burch)


Lesenswert?

http://elm-chan.org/fsw/ff/00index_e.html

Funktioniert ziemlich gut.

von 1234 (Gast)


Lesenswert?

Wie waere es denn ein separates Flash daneben zu haben ? zB ein Atmel 
AT45DB321, ein 32MBit = 4MByte im SO8 gehaeuse. Kostet 2 euro oder so. 
Dessen schnittstelle ist SPI, machbar mit 6 Pins. Guenstiger ist zB ein 
AT45DB041, 4MBit = 512kByte, kostet 50 cents oder so.

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.