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.
Warum Bootloader? Kann ich nicht unter CodeVision dies so machen: Beispiel: unsigned int flash x=1111; Da müsste doch der Wert 1111 im Flash stehen oder?
Das verstehe ich nicht. Bootloader??? Ich möchte z.B. 128K Flash mit irgendwas beschrieben und wieder lesen. Kann ich da nicht ein Array mit 128 Bytes anlegen und beschrieben?
Jedes ISP-Tool sollte gehen, also Ponyprog mit entsprechender Hardware.
@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??
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?
nicht im flash speicher!!! dazu kannst du das EEPROM nehmen aber achtung maximale schreibzyklen beachten! die daten kannst du dann von der RS232 nehmen
> 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.
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?
Ach noch was: 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?
> 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.
@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
@Steffen Beschreib bitte GENAU was du machen willst.. Woher kommen die Daten, was willst du damit machen und wohin sollen die Daten gehen muessen sie bei einem PowerDown in der MCU gespeichert bleiben??
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.
Nochienmal sollen die daten erhalten bleiben?? WTF nimmst du nicht das EEPROM???????????
Ja die Daten sollen gespeichert bleiben. Warum EEPROM? Das EEPROM ist doch beim ATMEGA128 nicht so groß wie das Flash oder? Die Flashgröße beträgt 128kB.
Ja die Daten sollen gespeichert bleiben. Warum EEPROM? Das EEPROM ist doch beim ATMEGA128 nicht so groß wie das Flash oder? Die Flashgröße beträgt 128kB.
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
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?
sagte ich doch schon externer flash speicher im prinzip endlos viel platz eeprom 4k byte (100 000 schreibzüklen) oder du nimst einfach eine MMC Karte, die ja im grunde schon flash ist
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
Der IC AT24C512 ist bei mir schon auf dem Board. Ok ich werd mich mal damit beschäftigen. Peter kannst du mir eine Quelle geben, wo ich einen C-Code für die I2C Ansteuerung finde?
"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
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.
Sehe ich das richtig so, dass der ATFC512 5125Kbit Speichekapazität hat. Umgerechnet in Kbyte = 8,192Kbyte. Leider brauche ich 30Kbyte!
Sorry ich habe da was falsch gerechnet. Es sind 64Kybte. --> 512KBit / 8 = 64Kbyte
"Ist allerdings für den kleinen AT24C16, die größeren benötigen ein Adreßbyte mehr." Wie setzte ich dies um?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.