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?
1 | Configuration Change Protection |
2 | |
3 | Register Key |
4 | |
5 | NVMCTRL.CTRLA SPM |
6 | NVMCTRL.CTRLB IOREG |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.