Optiboot не пишет скетч

Отказ от ответственности, я новичок во всей этой встроенной маларки.

Привет,

У меня есть изготовленная на заказ плата с ATmega328 U-TH на ней.

плата была загружена с версией optiboot и демонстрационным скетчем, который был загружен с помощью arduino IDE и serial over usb, так что в какой-то момент я знаю, что то, что я пытаюсь сделать, работает.

я использую avrdude и USB UART.

то, что кажется, происходит, это загрузка скетча "ОК", но не проходит проверку.

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -C"../etc/avrdude.conf" -v -patmega328p -carduino -PCOM5 -b38400 -D -Uflash:w:test.hex:i

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 "../etc/avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 38400
         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 : Arduino
         Description     : Arduino
         Hardware Version: 3
         Firmware Version: 8.0
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

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

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: reading input file "test.hex"
avrdude: writing flash (4 bytes):

Writing | ################################################## | 100% 0.04s

avrdude: 4 bytes of flash written
avrdude: verifying flash memory against test.hex:
avrdude: load data flash data from input file test.hex:
avrdude: input file test.hex contains 4 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.04s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x14 != 0x74
avrdude: verification error; content mismatch

avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.

я пробовал Arduino IDE и avrdude direct.

при осмотре с использованием -

avrdude -C"../etc/avrdude.conf" -v -patmega328p -carduino -PCOM5 -b38400 -D -Uflash:r:C:\.../uploaded.ino.hex:i

Я вижу, что память заполнена 1414 вплоть до загрузчика.

:20000000141414141414141414141414141414141414141414141414141414141414141460
:20002000141414141414141414141414141414141414141414141414141414141414141440
...
:207DC000141414141414141414141414141414141414141414141414141414141414141423
:207DE000141414141414141414141414141414141414141414141414141414141414141403
:207E000001C0CEC0112484B7882361F0982F9A70923041F081FF02C097EF94BF282E80E012
:207E2000AAD0EEC082E08093C00088E18093C10086E08093C20089E18093C40088E29BD057
:207E400093E0E92EDD24D39425E0C22E31E1B32E86D0813479F483D0182F93D0123811F484
:207E600080E004C088E0113809F083E071D080E16FD0EECF823419F484E18BD0F8CF853430
:207E800011F485E0FACF853541F469D0C82F67D0D82FCC0FDD1F75D0EACF863519F484E051
:207EA00078D0DECF843609F034C059D058D0F82E56D0A82E00E011E048018FEF881A980AD7
:207EC0004ED0F80180838401F810F6CF5AD0F5E4AF1201C0FFCFFE01E7BEE89507B600FC09
:207EE000FDCFFE01A0E0B1E0CD0102962D913C910901D7BEE89511243296DC01F812F4CFF2
:207F0000FE01C7BEE89507B600FCFDCFB7BEE895AECF843771F423D022D0F82E20D031D050
:207F20008E01F80185918F0113D0FA94F110F9CF9ECF853739F425D08EE10AD085E908D0FF
:207F40008FE094CF813509F0A6CF88E014D0A3CF9091C00095FFFCCF8093C60008958091A6
:207F6000C00087FFFCCF8091C00084FD01C0A8958091C6000895E0E6F0E098E19083808307
:207F80000895EDDF803219F088E0F5DFFFCF84E1DFCFCF93C82FE3DFC150E9F7CF91F1CF74
:207FA000FC010A0167BFE895112407B600FCFDCF667029F0452B19F481E187BFE89508952E
:207FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1
:207FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000897
:00000001FF

я могу подтвердить, что загрузчик байт за байтом совпадает с файлом, который был загружен с помощью ICSP парнем, который его построил, за исключением этого бита -

:0400000300007E007B

который, как я предполагаю, был перезаписан, когда ранее рабочий скетч был загружен.

это прилагаемая конфигурация платы

.upload.protocol=arduino
.upload.maximum_size=32256
.upload.speed=38400

.bootloader.low_fuses=0xE2
.bootloader.high_fuses=0xDE
.bootloader.extended_fuses=0xFF

.bootloader.file=atmega/optiboot_atmega328.hex
.bootloader.unlock_bits=0x3F
.bootloader.lock_bits=0x0F

.build.mcu=atmega328p
.build.f_cpu=8000000L
.build.core=arduino:arduino
.build.variant=arduino:standard

.bootloader.tool=arduino:avrdude
.upload.tool=arduino:avrdude

У меня нет программатора ICSP или другого Arduino для перезапуска загрузчика.

Может ли кто-нибудь предложить какие-либо пути расследования?

спасибо

, 👍0

Обсуждение

загрузчик пришел от парня, который построил плату, он настроил ее на 38400, потому что - "это самый быстрый uart, который может работать, сохраняя точное время с системными часами 8 МГц (из памяти)", @user2983931

Я мог бы придраться к этому, но не буду. Когда вы говорите "используя avrdude и UART USB", вы имеете в виду последовательный адаптер/кабель USB-логического уровня? И если да, то соответствует ли этот адаптер правильному логическому уровню вашей платы?, @timemage

Я полагаю, что да, идентично этому - https://www.makerfabs.com/usb-uart-convertor-cp2102.html , также поддержал ваш комментарий за то, что вы не сорвали вопрос с аргументами о том, может ли он идти быстрее :) ценю это., @user2983931

Что ж, это половина ответа. Я вижу, что это будет долгий, затяжной процесс. Итак, я просто оставлю вас с: проверьте проводку, уровни напряжения, биты блокировки, значения предохранителей и время работы внутреннего osc. (или производные последовательные биты)., @timemage

проверить проводку? - загрузчик, по-видимому, взаимодействует биты блокировки/биты предохранителя - приведенные значения кажутся правильными, и, похоже, в какой-то момент что-то было написано (1414) уровни напряжения - я полагаю, UART и время - я думаю, мне нужен какой-то логический анализатор. Вы предполагаете, что в этом может быть виноват дешевый UART?, @user2983931

Я видел, как люди получали в основном хорошую связь от последовательного, когда GND не был подключен, из-за емкостной связи и достаточно высокой скорости передачи данных. Я не собираюсь просматривать все диагностическое дерево в комментариях. Но да, за этими предложениями *стоят* причины. Вы можете найти меня на freenode, если хотите обсудить это в разговорной форме., @timemage