Forum: Mikrocontroller und Digitale Elektronik AVR128DA EEPROM write


von Leon W. (le0n)


Lesenswert?

Hallo Zusammen,

ich versuche jetzt schon seit mehreren Tagen beim AVR128DA28 auf das 
EEPROM zu schreiben leider funktioniert das nicht so wie ich das gerne 
hätte.

Über UPDI funktioniert das ganze! Also ich kann ein bestehendes EEPROM 
file runter schreiben und lese dann auch die korrekten Daten.

Gehe ich jedoch nun her und schreibe im Programm auf das EEPROM so 
ändert sich der WERT dort nicht und ich lese nur den zuvor geschreibenen 
Wert oder 0xFF falls das EEPROM zuvor gelöscht wurde.

Das hier ist mein aktueller Code:

// LESEN DES EEPROM
uint8_t eeprom_read(uint16_t address)
{
  return *(uint8_t *)(EEPROM_START + address);
}

// SCHREIBEN DES EEPROM
void eeprom_write(uint16_t address, uint8_t data)
{
  // Wait for completion of any previous EEPROM or Flash operation
  while (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm)
  {
    ; // Wait
  }

  // Issue Erase and Write command
  CCP = CCP_IOREG_gc;
  NVMCTRL.CTRLA = NVMCTRL_CMD_EEERWR_gc;

  // Write data to EEPROM address
  *(uint8_t *)(EEPROM_START + address) = data;


  // Clear the command
  CCP = CCP_IOREG_gc;
  NVMCTRL.CTRLA = NVMCTRL_CMD_NONE_gc;
}

// MAIN FUNCTION
int main(void)
{
  set_internal_oszillator(24000000, 0);

  USART1_init();

  uint8_t data = 0;
  eeprom_write(0, 7);
  _delay_ms(1000);
  data = eeprom_read(0);

  /* Replace with your application code */
  while (1)
  {
    USART1_sendFormattedString("Data: %d\r\n", data);
    _delay_ms(1000);
  }
}

Die write Funktion habe ich aus diesem Guide von Seite 8.
Hat jemand eine Idee was das Problem sein könnte oder hatte ein 
Ähnliches verhalten?

Zusätzliche Infos:
Fuses alle auf Default
F_CPU mit internem Oszillator auf 24MHz


Leider habe ich die vorgabe die 2 Funktionen selbst zu schreiben also 
darf das avr/eeprom.h nicht nutzen.
Ebenfalls ist die Vorgabe das ganze mittels C zu schreiben.
Um das ganze mit bestehendem Code richtig zu integrieren.

Hat jemand vielleicht eine funktionierende Funktion um auf das EEPROM zu 
schreiben?

: Bearbeitet durch User
von Georg M. (g_m)


Lesenswert?

1
 Configuration Change Protection
2
3
 Register          Key
4
5
 NVMCTRL.CTRLA     SPM
6
 NVMCTRL.CTRLB     IOREG

von Leon W. (le0n)


Lesenswert?

Oh mann das hatte ich voll übersehen, dass da unterschiedliche Keys 
sind...

Jetzt funktioniert es vielen Dank!

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.