> -----Original Message----- > From: avr-libc-dev-bounces+pitchumani.s=atmel....@nongnu.org [mailto:avr- > libc-dev-bounces+pitchumani.s=atmel....@nongnu.org] On Behalf Of Scott Price > Sent: 10 February 2016 00:54 > To: avr-libc-dev@nongnu.org > Subject: [avr-libc-dev] 2.0.0 and XMega32E5 eeprom troubles... > > > I am not able to get any of the eeprom_write_* or eeprom_update_* functions > working on an XMega32E5. There are no compile errors or warnings, the > functions just don't do anything. The eeprom read functions that I am using > all work fine. > > I had previously been using a version of avr-libc that I lifted from > AVRStudio 6.2 to get support for the E5. The eeprom functions worked well > on that version. > > I compiled it using gcc-4.9.3 on Ubuntu Trusty. > > Atmel's nvm functions work for me, but add a significant amount of code. > I would rather use the ones from avr-libc, since I use them for all of my > other AVR projects. > > Looking through the code and the docs it seems like the functions should > work. > > I have done a number of experiments, including writing a fixed value to a > fixed location on boot then reading the eeprom out with avr-dude. > Nothing I have done has produced a successful write. > > What more information do you need, or what tests can I run to help debug > this?
Hi Scott, If you are building avr-libc, could you try below patch? This is the related difference I could see from Atmel's avr-libc build. Regards, Pitchumani diff --git a/avr-libc/libc/misc/eewr_byte.S b/avr-libc/libc/misc/eewr_byte.S index 98008c2..30b1595 100644 --- a/avr-libc/libc/misc/eewr_byte.S +++ b/avr-libc/libc/misc/eewr_byte.S @@ -61,6 +61,12 @@ ENTRY eeprom_write_r18 # define NVM_CMD_ERASE_EEPROM_BUFFER_gc 0x36 # endif +#if ! defined (NVM_EEMAPEN_bm) + ; Saving X register because it might contain source address of block + push XL + push XH +#endif + ; Prepare base address of NVM. ldi ZL, lo8(NVM_BASE) ldi ZH, hi8(NVM_BASE) @@ -136,6 +142,12 @@ ENTRY eeprom_write_r18 ; Increment address. adiw addr_lo, 1 +#if ! defined (NVM_EEMAPEN_bm) + ; Restoring X register + pop XH + pop XL +#endif + ret #else /* ---------------------------------------------------- */ _______________________________________________ AVR-libc-dev mailing list AVR-libc-dev@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-libc-dev