-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
EEPROM library not working #26
Comments
Known issue need to port fix from megatinycore
…____________
Spence Konde
Azzy’S Electronics
New products! Check them out at tindie.com/stores/DrAzzy
GitHub: github.com/SpenceKonde
ATTinyCore: Arduino support for almost every ATTiny microcontroller
Contact: spencekonde@gmail.com
On Fri, Oct 9, 2020, 16:38 obdevel ***@***.***> wrote:
Arduino 1.8.13, macOS 10.13.6
AVR128DA28 DIP package w/Optiboot
EEPROM writes not sticking, e.g.
EEPROM[34] = 10;
Serial.println(EEPROM[34]); // prints 255
I haven't got jtag2updi working so I set the fuses and programmed the
bootloader using pyupdi. I based the fuse settings on the avrdude command
line displayed by Tools->Burn Bootloader
Everything else seems to be working so far.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#26>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABTXEW5IO2LMZOPD7Z2RTULSJ5YEXANCNFSM4SKQNGVA>
.
|
Any pointers to how I might solve this myself ? I don't see any relevant appnotes and the one AS Start example isn't helpful either. I've read the NVMCTRL section of the datasheet but I don't know how to convert this to code. |
Hold your horses, it's a 5-minute fix from my end... |
Wait wait wait - the avr-libc routines don't work? Ugh... Okay, that will be a bit longer :-( |
Need to implement those macros, in that case... |
What's in there now is definitely totally hosed though |
I just pushed a version of EEPROM that I would expect to work (in github repo - obv. not in a board manager release). Does that not work? |
If it doesn't work, please describe how it doesn't work... |
Thanks. I copied that straight over the file in /Users/xxx/Documents/Arduino/hardware/DxCore/megaavr/libraries/EEPROM/src. Compilation output: [eeprom_test_compile_v1.txt]. I restarted the IDE just to make sure there wasn't anything cached. (https://github.com/SpenceKonde/DxCore/files/5359825/eeprom_test_compile_v1.txt) Same result - whatever value or address I write reads back as 255, e.g.
But, if it's calling eeprom_read_byte() surely that's resolved from avr-libc ? |
Check NVMCTRL.STATUS after attempting a write, see if there are any error flags. I suspect read is working correctly, and write is not. It's easy enough to verify read by just directly reading from the address of the mapped EEPROM |
After a write, NVMCTRL.STATUS is 16. Per the datasheet (sec 10.5.3), that's the LSB of the error code, which translates to 0x1 INVALIDCMD (The selected command is not supported). |
Yup, I had a feeling that was what you'd see.... Yeah, eeprom_write_byte needs to be reimplemented.... |
I installed MPLABX and used the mcc to generate some code, but I don't know how to implement this correctly. Maybe this will be a helpful pointer ?
There is no implementation provided for protected_write_io() so I assume it's buried somewhere in some library ? |
Ok, this seems to work. Again, cobbled together from disparate MCP sources.
|
5403512 .... but yeah your approach is better if that works, somehow I thought (looks like incorrectly) that you weren't supposed to change the command while it was busy.... |
I was hoping you'd know better than me ! As I said, it was hacked together using MCC, a couple of app notes and some googling. Works fine using your changes. Thanks. |
I had a similar problem when I tried to do it in the past defining a macro like that. I was as baffled as you were. That's why I didn't do it like that this time - I'd tripped over it before. No clue why the include guards don't do their job here... |
https://github.com/SpenceKonde/DxCore/blob/master/megaavr/libraries/EEPROM/src/EEPROM.h#L38 Oops :) index needs to be wider than 8 bits to address 512 bytes. Wondered why I was getting strange overwrites. |
Arduino 1.8.13, macOS 10.13.6
AVR128DA28 DIP package w/Optiboot
EEPROM writes not sticking, e.g.
I haven't got jtag2updi working so I set the fuses and programmed the bootloader using pyupdi. I based the fuse settings on the avrdude command line displayed by Tools->Burn Bootloader
Everything else seems to be working so far.
Edited to add -------
avr-libc routines don't work either, e.g.
The text was updated successfully, but these errors were encountered: