ATMEGA128:Flash beschrieben

Gast #221323
Lesenswert?

Hi,

ich habe ein kleines Testboard mit einem ATMEGA128 darauf.
Wie kann man unter CodeVisionAVR(C Programmierung) den Flash Speicher
beschreiben und lesen?

Ich möchte damit z.B. den ganzen Flash Speicher über Windows per RD232
auslesen und wieder mit Werten beschreiben.
Persönliche Seite #221328
Lesenswert?

@Hubert lesen ....
>>Ich möchte damit z.B. den ganzen Flash Speicher über Windows per
RD232
>>auslesen und wieder mit Werten beschreiben...

So, wie du es geschrieben hast moechtest du im Betrieb den Flash
auslesen / schreiben??
oder willst du ihn allgemein Lesen / Schreiben?

Wenn du den mega128 NUR per rs232 OHNE Isp Tools etc beschreiben willst
brauchst du einen Bootloader (er ist dann die Programmiersoftware)..

ein Jumper wird gesetzt und dann kannst du per RS232 dein Programm in
den Flash reinschreiben
auslesen kannst du auch waehrend der µC Laeuft

oder redest du etwa von externem Flash Speicher??
Gast #221329
Lesenswert?

Nein ich möchte schon den internen Flash 128K benutzen.
Ich schreibe ein Programm und in diesem deklariere ich ein Array Größe
128K (bzw. kann auch weniger sein).
Dann möchte ich in der while Schleife im Main das Array befüllen bzw.
auslesen.das müsste doch so gehen oder?
Gast #221331
Lesenswert?

> Ich schreibe ein Programm und in diesem deklariere ich ein Array
> Größe 128K (bzw. kann auch weniger sein).

Das steht im RAM, nicht im Flash.

> Dann möchte ich in der while Schleife im Main das Array befüllen
> bzw. auslesen.

Flash kann man nicht einfach so beliebig lesen und schreiben. Wenn man
das könnte, wäre es RAM.

Wenn du den Flash neu programmieren willst, und das nicht über ISP,
dann ist ein Bootloader genau das, was du willst.
Gast #221332
Lesenswert?

Hallo Rolf,

kannst du mir nähere Angaben über diesen Bootloader geben.Ich weiss, es
gibt 100 Beiträge.Welchen Bootloader vewendest du da? Und wie wird der
eingesetzt bzw. benutzt?
Kann ich den dann in meinem C Programm für den ATMEAG128 benutzen?
Gast #221334
Lesenswert?

> kannst du mir nähere Angaben über diesen Bootloader geben.Ich
> weiss, es gibt 100 Beiträge.Welchen Bootloader vewendest du da?

Ich verwende bisher gar keinen, weil ich das noch nicht gebraucht hab.
Kann dir also leider keine Auskunft darüber geben, was da am besten
ist, wo die Unterschiede liegen und wie man ihn genau einsetzt.

> Ich kann doch z.B. in meinem C Programm einfügen
> unsigned char flash x=10;
>
> Das müsste doch gehen? Der Wert 10 müsste doch dann im Flash
> stehen, der?

Indirekt steht der Wert natürlich schon im Flash, denn irgendwo muß er
ja herkommen. Die Variable "flash" ist aber zunächst mal im RAM und
belegt dort ein Byte. Sie muß natürlich beim Programmstart mit dem Wert
10 initialisiert werden, und dazu wird dieser Wert aus dem Flash in die
Variable im RAM kopiert. Ich sehe aber nicht, wie dir das beim
Programmieren des Flash weiterhelfen sollte.
Persönliche Seite #221335
Lesenswert?

@Rolf Magnus
>> Dann möchte ich in der while Schleife im Main das Array befüllen
>> bzw. auslesen.

>Flash kann man nicht einfach so beliebig lesen und schreiben. Wenn
man
>das könnte, wäre es RAM.

das stimmt nciht ganz!!!
Flash kann man zwar nur ueber den Bootloader schreiben, aber lesen
klappt wunderbar
endweder direkt ueber adressen oder man deklariert ein PRG_MEM welches
die Daten im flash speichert
das PRG_MEM kann man aber NICHT mit der MCU bearbeiten..

@Steffen
schau mal in der Codesammlung und lerne erst einmal die funktionsweise
etc eines Bootloaders...
dann kannst du erst damit anfanngen einen zu suchen und auszuwaehlen

Gruss Jens
Gast #221337
Lesenswert?

Ok um den bootloader näher kennen zu lernen benötige ich
Informationen.Kann mir dabei jemand sagen, wo ich Infos
herbekomme(deutsch).

Also ich mochte Daten vom PC via RS232 auf den Flashspeicher des
ATMEGA128 ablegen und abfragen können.
Persönliche Seite #221341
Lesenswert?

weil du NICHT die 128k vom flash komplett nutzen kannst (darin wird auch
das Programm gespeichert)
werde doch einmal konkret wieviele daten willst du speichern??
wenn alles nicht reichen sollte nim ein externen flash speicher oder
sogar eine mmc karte, da bekommst du sicher genug rein..

der flash ist nicht dafuer da roh daten zu speichern, sondern nur das
programm und konstante
evtl noch eine scancode tabelle und bei einem grafikdisplay die
zeichentabelle mehr nicht..

Gruss
Gast #221342
Lesenswert?

Ok ich habe da ein altes Projekt mit einem 80C535.
Da messe ich Temperatur und Luftdruck. Zusätzlich wird da noch die Zeit
gespeichert. Insgesamt benötige ich da 30KByte.
Die Werte konnte ich mit der RS232 auslesen. Die Werte standen da im
RAM.Das heisst ich durfte das Ding niemals ausschalten, sonst sind ja
die ganzen Daten weg.
Wie könnte ich da beim ATMEGA128 tun?
Gast #221344
Lesenswert?

Den internen Flash kann man nur seitenweise (512 Bytes am Stück)
beschreiben. Dazu muß die entsprechende Routine im Bootbereich liegen.

Für 30kB würde ich nen AT24C512 oder AT24C256 anschließen, die können
sowohl byteweise als auch blockweise beschrieben werden. I2C-Routinen
gibt es haufenweise dafür, man sollte allerdings Software-I2C verwenden
(einfacherer und sicherer).


Peter
Gast #221347
Lesenswert?

"Peter kannst du mir eine Quelle geben, wo ich einen C-Code für die
I2C
Ansteuerung finde?"

http://home.tiscali.de/peterd/appl/soft/c51/eeprom/index.htm

Ist allerdings für den kleinen AT24C16, die größeren benötigen ein
Adreßbyte mehr.

Auch mußt Du die SDA-Zugriffe anpassen, der 8051 hat ja open-drain
Ausgänge, der AVR aber nicht (kann man aber über das Direktion-Bit
simulieren).


Peter
Gast #221348
Lesenswert?

Hi Peter,

das heisst ich müsste doch für das Adressbyte eine Integer Variable
reservieren oder?
Im Mikrocontroller Forum habe ich keinen Beispielcode für die
Ansteuerung eines AVR (ATMEGA) auf AT24C512 gefunden.
Gast #221352
Lesenswert?

Hello All;
I have to modify the following source code which was written for
atmega128 ( using avr-gcc) to port it in msp430f1611 using IAR
compiler, and I would be very grateful if you could help me.
any help any advice will be appreciated
Thanks
=================================================

//void ReadEEPROM (BYTE *pData_buff, unsigned short address, unsigned
short  length)

//  DESCRIPTION:
//    Reads data from the 4kB MCU EEPROM
// Paramaeters
//      BYTE *pData_buff  :    A pointer to the read buffer
//      unsigned short address : The address of the first read byte
//      unsigned short   NUM_BYTES :  The number of bytes to read
//---------------------------------------------------------------------- 
---------------------------------
void ReadEEPROM(BYTE *pData_buff, unsigned short   address, unsigned
short NUM_BYTES) {

    // Wait for the last write operation to complete
    while (EECR & BM(EEWE));

    // For each byte...
    do {

        // Setup the address register, issue the read command, and
store the result
        EEAR = address++;
        EECR |= BM(EERE);
        *(pData_buff++) = EEDR;

    } while (--NUM_BYTES);

} // ReadEEPROM

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