Hi zusammen. Ich hatte bereits schon im Microchip Forum vor einiger Zeit die geliche Frage gestellt, aber ohne Antwort. Daher versuche ich es nochmal bei euch direkt. Habe die MPLAX X IDE und den "neueren" AVR16DD14 MCU zum ersten mal im Einsatz. Habe mir ein paar Basisroutinen mit dem eingebauten Codegenerator generiert. U.a. auch EEPROM Write and Read Funktionen. Ich bekomme keine Daten ins EEPROM geschrieben. Auch wenn ich mich an den Beispielcode aus der Doku halte (https://onlinedocs.microchip.com/oxy/GUID-41EA2496-1EE8-4319-A387-9EC9318EF178-en-US-23/GUID-FAB7D938-8223-479A-9238-5949CF35E9BD.html#GUID-2636BA3B-149A-49C1-869A-4FA48C874937) Hat von euch einer Idee woran das liegen könnte? Hier die generieten EEPROM Funktionen und mein Beispiel, wie ich eine Speicherstelle (die Erste Adresse im EEPROM) beschreiben möchte. Speicher bleibt immer auf 0xff :/
1 | #define EEPROM_ADDRESS 0x1400U
|
2 | void EEPROM_Write_Test(void) |
3 | {
|
4 | |
5 | eeprom_data_t eepromWriteData = 0x55; |
6 | |
7 | //Write EEPROM byte
|
8 | EEPROM_Write(EEPROM_ADDRESS, eepromWriteData); |
9 | while (EEPROM_IsBusy()); |
10 | if (NVM_StatusGet() == NVM_OK) |
11 | {
|
12 | //printf("EEPROM_Write passed \r\n");
|
13 | }
|
14 | else
|
15 | {
|
16 | //printf("EEPROM_Write failed \r\n");
|
17 | NVM_StatusClear(); |
18 | }
|
19 | |
20 | }
|
Die (generierten) Routinen sind:
1 | eeprom_data_t EEPROM_Read(eeprom_address_t address) |
2 | {
|
3 | return *(eeprom_data_t *) address; |
4 | }
|
5 | |
6 | void EEPROM_Write(eeprom_address_t address, eeprom_data_t data) |
7 | {
|
8 | //Program the EEPROM with desired value(s)
|
9 | ccp_write_spm((void *) &NVMCTRL.CTRLA, NVMCTRL_CMD_EEERWR_gc); |
10 | |
11 | |
12 | //Write byte to EEPROM
|
13 | *(uint8_t *) address = data; //Hier habe ich auch schon uint16_t probiert - da die Adresse ja 16 bit hat?!) - ging aber auch nicht. |
14 | |
15 | //Clear the current command
|
16 | ccp_write_spm((void *) &NVMCTRL.CTRLA, NVMCTRL_CMD_NONE_gc); |
17 | }
|
18 | |
19 | bool EEPROM_IsBusy(void) |
20 | {
|
21 | return (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm); |
22 | }
|
Bin über jeden Hinweis dankbar