Cannot burn a bootloader in atmega328p, 1 bytes of lock verified

I am sitting here with my own custom PCB which is assembled by JLCPCB. It houses an atmega328P and CH340G chip with usb socket.

I can succesfully upload programs via an arduino nano as ISP programmer.
I have succesfully tested the USB connections. I can read and send bytes from monitor to my own board over USB, so the hardware appears to be fine. Must have done something right.

Being an atmega in TQFP housing, the board settings are set to an arduino Nano. I tried UNO as well, no change in output.

Despite I can program via ICSP connector, I cannot burn the boatloader. This part of the log seems interesting.

avrdude: reading input file "0x0F"
avrdude: writing lock (1 bytes):

The whole log

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\Gebruiker\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"

         Using Port                    : COM6
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "C:\Users\Gebruiker\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3/bootloaders/optiboot/optiboot_atmega328.hex"
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against C:\Users\Gebruiker\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: load data flash data from input file C:\Users\Gebruiker\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: input file C:\Users\Gebruiker\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3/bootloaders/optiboot/optiboot_atmega328.hex contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: reading input file "0x0F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude done.  Thank you.

I am guessing that I must change something in boards.txt but I am not sure what exactly. I must confess: I have not looked into boards.txt yet either. Going to look into it now.

Can somebody tell me what precisely is happening and how can I fix this?

Kind regards,

Bas

Also tried arduino-cli (which probably uses same boards.txt) exact same results

I have made several boards with the TQFP 328P and program them over the ISP. But i use a arduino Uno as ISP-server and so is the setting (in my case Arduino Uno on Com3) Then i can bootload the the 328P without problems.
1 to 328p pin 16
2 to +5V
3 to 328p pin 17
4 to 328p pin 15
5 to 328p pin 29
6 to GND
on the Arduino Uno side: wire 5 goes to 10

check that.

How are you determining that the bootloader has in fact not been written? (note - DO NOT upload a sketch via ISP after burning the bootloader)

Can you post a schematic of your board? Can you verify that attempting to upload a sketch via USB triggers a reset of the atmega328?

< edit >
Looking over the sequence you posted, it appears to be the same as what I get when burning the bootloader to a genuine Arduino UNO.

Looks like a successful bootloader burn log; what makes you think that it failed?

Ehm... despite I knew the bootloader is only a small part of code, the process looked 'too fast'. The last time I burned a bootloader was many years ago. And I read somewhere that it could last like 15s..

This followed by a failed upload attempt, made me draw incorrect conclusions. I do know that next design will have a reset button. Those 2 cents...

I think that I screwed up by flashing a program via ICSP after burning the bootloader... it was late.. :sweat_smile:

I redid the entire process and now it seems to work. Glad that my design actually works. It is the first time that I made a board with USB circuitry. Now I hope that the voltage regulator also survive the comming trials.

Tnx for the assist,

Bas