Запись загрузчика завершается словами "avrdude done. Thank you.". но загрузчик на самом деле не прошивался

Я собрал урезанную версию Arduino Nano, в которой удалены некоторые периферийные устройства и три разъема для аналоговых датчиков, которые я хочу использовать. Я пытаюсь записать загрузчик Arduino Nano на эту специальную плату с помощью программатора SparkFun AVR Pocket Programmer, и из консоли Arduino IDE, кажется, говорится, что он был успешно записан. Но когда я снова подключаю плату к компьютеру, она все равно отображается как COM-порт, а не как устройство Arduino. Это вывод, который я получаю в консоли после того, как нажимаю «Записать загрузчик» с «USBtinyISP», выбранным в качестве программатора, и Arduino Nano в качестве платы.


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:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : usb
         Using Programmer              : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
         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 : USBtiny
         Description     : USBtiny simple USB programmer, https://learn.adafruit.com/usbtinyisp
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

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

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: Using SCK period of 10 usec
avrdude: reading input file "C:\Program Files (x86)\Arduino\hardware\arduino\avr/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:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: load data flash data from input file C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: input file C:\Program Files (x86)\Arduino\hardware\arduino\avr/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.01s

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.00s

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

Запись практически мгновенно завершается, и вы можете видеть, что чтение и запись занимают 0,00 с, это должно быть ближе к минуте, а не мгновенно. Это быстрее, чем загружать простой скетч в Arduino. Когда я отключаю программатор и снова подключаю устройство через USB, он просто отображается как COM-порт вместо «Arduino Nano», что не позволяет мне программировать его через Arduino IDE.

Что для меня очень странно, так это то, что я могу запрограммировать устройство через командную строку. Если я следую инструкциям AVR Pock Programmer "Использование AVRDUDE через командную строку" и используйте шестнадцатеричный файл, сгенерированный из Arduino IDE, код загружается и работает нормально. Я написал скетч, который выводит значения АЦП через командную строку, и после прошивки через командную строку он работает, как и ожидалось.

Я пытался загрузить загрузчик Arduino через командную строку, как показано в это руководство в разделе "Загрузка кода - Сложный способ", и на этот раз для записи во флэш-память требуется более 43 секунд, а для чтения из флэш-памяти - 30 секунд, поэтому я подумал, что это сработало. Однако, когда я снова подключаю его, он ВСЕ ЕЩЕ появляется на моем компьютере и в Arduino IDE как COM9.

Вот что я получаю при попытке прошить загрузчик через командную строку:


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:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : usb
         Using Programmer              : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
         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 : USBtiny
         Description     : USBtiny simple USB programmer, https://learn.adafruit.com/usbtinyisp
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

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

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: Using SCK period of 10 usec
avrdude: reading input file "C:\Program Files (x86)\Arduino\hardware\arduino\avr/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:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: load data flash data from input file C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: input file C:\Program Files (x86)\Arduino\hardware\arduino\avr/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.01s

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.00s

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

Я просматривал свою схему несколько раз, сравнивая ее с настоящим Nano. схематично, но я не вижу ничего, что могло бы привести к сбою - это почти идентично! Я построил две такие платы, и они ведут себя одинаково. Схема показана ниже.

, 👍0

Обсуждение

ваш пост не имеет смысла ... вы используете чип FTDI, который представляет собой последовательный порт, @jsotola

Но FR32RL — это тот же чип, который использует Arduino Nano, и Nano отображается как устройство Arduino, когда оно подключено. Вы можете запрограммировать его напрямую с помощью Arduino IDE., @VanGo

Нужно ли мне это делать, чтобы использовать Arduino IDE для перепрошивки?, @VanGo

Я не совсем понимаю, что это значит - не могли бы вы объяснить немного больше?, @VanGo

старые ПК имели параллельный порт DB25, используемый для принтеров ... также называемый портом Centronics ... он имел 8 двунаправленных контактов данных и несколько контактов подтверждения ... LPT1 обычно называется параллельным портом, а не последовательным. порт COM1, @jsotola

Почему он находит устройство и считывает/записывает во флэш-память, если порт неправильный?, @VanGo

Я не знаю ... просто lpt1 выскочило, когда я посмотрел на распечатку, @jsotola

Короткое время прошивки имеет смысл, если учесть размер загрузчика. Он не должен занимать все 32 КБ! Обычно он намного меньше, чем типичный скетч. Если avrdude говорит вам, что прошито 32 КБ, то большая часть содержимого должна быть 0xFF — пожалуйста, проверьте это. Поскольку 0xFF — это стертое значение байта флэш-памяти, для этих байтов ничего не нужно делать, что приводит к очень короткому времени флэш-памяти., @the busybee

попробуйте ручной сброс, пока avrdude пытается загрузить, @Juraj


1 ответ


Лучший ответ:

1

«Устройство» Arduino идентифицируется по коду USB-устройства последовательного порта USB-TTL на Arduino или по коду ядра в случае MCU с родным USB. Идентификаторы USB записываются в чип USB на заводе или являются частью прошивки/ядра, и они перечислены в файле boards.txt, чтобы IDE знала, какой Arduino подключен. Если вы используете обычный FTDI, у него нет кодов Arduino vid и pid, которые идентифицируют устройство как Arduino.

Примечание: я думаю, что вы задали другой вопрос, чем ваша настоящая проблема, потому что вы предположили, что имя порта, не отображающее Arduino, является причиной того, что загрузка не работает. Это так называемая проблема X->Y. У вас есть проблема X, но вы спросили о проблеме Y. Я ответил на заданный вопрос.

,

Я понимаю. Означает ли это, что эту плату нельзя будет прошить через Arduino IDE? Мне просто нужно продолжать мигать через командную строку?, @VanGo

@VanGo, если у вас есть правильный COM-порт в меню «Инструменты», вы можете загрузить. не обязательно говорить «Arduino», @Juraj

Я пробовал это, но в итоге получаю кучу этих сообщений «avrdude: stk500_getsync(), попытка 10 из 10: не синхронизировано: resp=0x00», а затем происходит сбой. Я пробовал нажимать сброс во время загрузки, но безрезультатно..., @VanGo

Существуют разные загрузчики, реализующие разные протоколы. Возможно, вам потребуется выбрать другой протокол/загрузчик., @the busybee

@VanGo, это другой вопрос, @Juraj

@Juraj спасибо за подсказки. Это была действительно другая проблема - я подключил Arduino Tx / Rx к другому устройству. Когда я попытался загрузить код через Arduino IDE с выводами Rx/Tx, отключенными от другого устройства, это позволило мне успешно загрузить, хотя устройство по-прежнему просто отображается как COM-порт. Спасибо !, @VanGo