I read a lot about fuse bits in AVR microcontrollers and everyone says that fuse bits can be reset by using high-voltage programmer only, they can't be reset via UART<->ICSP.
So, I've received an Atmega328p from AliExpress recently, seems like it's not original one, but it works perfectly. Then I was setting fuse bits using avrdude
and did a mistake accidentely by passing 0xFF
into high fuse, and avrdude
told me that fuse bits were written successuly. I was really surprised and tried to read back the written bits, and hfuse
was really set to 0xFF
!
Then I played with other bits like lfuse
and efuse
and everything worked like a charm. I can write 0xFF
into any fuse, then change it to 0x00
and then change it back to 0xFF
just via USPASP programmer and ICSP interface.
Now the question is why I can change fuse bits just using USBASP programmer and ICSP interface? Is this the way AVR Atmega328p works or is this just the behavior of my fake Atmega328p? Did anyone faced the same behavior?