Page 1 of 1
Program Fuse / Memory Lock Bits
Posted: Mon Nov 15, 2021 11:23 am
by dbellairs
H/W - Freematics One
Is there a way to program the fuse and/or memory lock bits through the micro USB connection?
Thanks,
DB
Re: Program Fuse / Memory Lock Bits
Posted: Tue Nov 16, 2021 8:50 am
by dbellairs
I've tried the following things to program the lock bits:
- Platform I/O Configuration
I'm using Visual Studio Code...
The platformio.ini file is as follows:
;start of file
[env:uno]
platform=atmelavr
board=uno
framework=arduino
monitor_speed=115200
upload_flags = -Ulock:w:0xFC:m
lib_extra_dirs=../libraries
[platformio]
src_dir=.
;end of file
but when uploading to the board, the procedure fails and says
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x00 != 0xfc
avrdude: verification error; content mismatch
- AVRDUDE
I tried the command:
avrdude -u -c arduino -p m328p -P COM7 -b 115200 -U lock:r:-:h
that command always returns 0x00
I've also tried writing with AVRDUDE:
avrdude -u -c arduino -p m328p -P COM7 -b 115200 -U lock:w:0xFC:m
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "0xFC"
avrdude: writing lock (1 bytes):
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0xFC:
avrdude: load data lock data from input file 0xFC:
avrdude: input file 0xFC contains 1 bytes
avrdude: reading on-chip lock data:
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x00 != 0xfc
avrdude: verification error; content mismatch
avrdude done. Thank you.
- Program During Runtime
There's a lot of forums that claim you can program the lock bits by including the header file <avr/boot.h> and by calling
boot_lock_bits_set_safe(0x03);
In the software I'm calling:
lbits = boot_lock_fuse_bits_get(GET_LOCK_BITS)
which always returns 0xFF
I'm also fairly confident that none of these attempts to lock the device are working because the command:
avrdude -c arduino -p m328p -P COM7 -b 115200 -U flash:r:"D:\download.hex":h
creates a file that has the same contents as the .hex that I'm uploading to the ECU.