Предоставление пользовательских команд AVR dude через Arduino IDE

Помимо стандартной кнопки загрузки, которая записывает код с помощью FTDI, я хочу иметь возможность предоставлять пользовательские команды AVRDude для записи фьюзов, когда используется внешний программатор.

Можно ли это сделать из IDE? Может быть, если я смогу отредактировать некоторые файлы конфигурации?

Идея состоит в том, чтобы IDE предоставляла команду загрузки, когда выбран стандартный вариант загрузки, но когда выбран внешний программатор, я хочу иметь собственное поведение.

Я хочу, чтобы пользовательское поведение сохраняло EEPROM и устанавливало бит блокировки.

Эти два действия можно выполнить с помощью следующих команд AVRDude:

avrdude -c usbtiny -p m328p -U hfuse:w:0xd2:m
avrdude -c usbtiny -p m328p -U lock:w:0x00:m

Я использую внешний программатор Sparkfun "Pocket AVR Programmer" который является программатором SPI.

Может ли у меня быть собственное поведение (поддерживаемое AVRDude), когда я выбираю программу с помощью внешнего программатора?

ИЗМЕНИТЬ: Я открыл файл boards.txt и обнаружил следующие интересующие меня характеристики:

pro.name=Arduino Pro or Pro Mini

pro.upload.tool=avrdude
pro.upload.protocol=arduino

pro.bootloader.tool=avrdude
pro.bootloader.unlock_bits=0x3F
pro.bootloader.lock_bits=0x0F

pro.build.board=AVR_PRO
pro.build.core=arduino
pro.build.variant=eightanaloginputs

и

## Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328P
## ---------------------------------------------------
pro.menu.cpu.8MHzatmega328=ATmega328P (3.3V, 8 MHz)

pro.menu.cpu.8MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.8MHzatmega328.upload.speed=57600

pro.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.8MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFD
pro.menu.cpu.8MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex

pro.menu.cpu.8MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.8MHzatmega328.build.f_cpu=8000000L

Я использую Arduino Pro Mini. Во второй спецификации есть возможность установить нужные мне фьюз-биты. Тем не менее, нет опции для битов блокировки. Варианты битов блокировки есть в первой спецификации, но нет вариантов для предохранителей.

Мои новые вопросы таковы:

  1. Должен ли я указывать биты блокировки в первой спецификации и предохранители во второй? Будет ли это работать? Я должен спросить, прежде чем пытаться сделать что-нибудь глупое. Будут ли вторые спецификации «наследовать» из первых спецификаций?
  2. Будут ли вставленные здесь параметры работать только для параметра Загрузить с помощью программатора? Я хочу, чтобы обычная загрузка (через загрузчик) работала нормально.
  3. Что произойдет, если я откажусь от платформы Arduino и буду использовать автономный AVR? Если я использую тот же AVR, что и на платформе Pro Mini. Будут ли работать те же настройки?

, 👍1

Обсуждение

https://arduino.github.io/arduino-cli/0.27/platform-specification/#burn-bootloader или https://arduino.github.io/arduino-cli/0.27/platform-specification/#upload-using- внешний программист?, @Juraj

Ну, что я хотел бы сделать, так это: сохранить данные EEPROM, загрузить программу, а затем записать байт блокировки. Для выполнения этих действий есть три различные команды AVRDude. Мне было интересно, могу ли я изменить IDE, чтобы каждый раз, когда вы нажимаете кнопку загрузки, она также сохраняла данные EEPROM и устанавливала байт блокировки., @user1584421

В INSTRUCTABLES есть статья «Как поменять биты Fuse Bits в AVR Atmega328p — 8-битном микроконтроллере с помощью Arduino». Они показывают, как это сделать из командной строки CMD. Видео также включено. [ссылка] (https://www.instructables.com/How-to-change-fuse-bits-of-AVR-Atmega328p-8bit-mic/) [ссылка] Если это то, что вы ищете, дайте мне знать, чтобы я мог изменить этот комментарий на ответ., @GrooverFromHolland

Я не могу проверить это сейчас, но вы можете добавить параметры предохранителя в tools.avrdude.program.pattern в файле platform.txt. Скопируйте их из tools.avrdude.erase.pattern. примечание: значения предохранителей находятся в файле boards.txt, @Juraj

Итак, «tools.avrdude.program.pattern» — это то, что произойдет, когда я запрограммирую Arduino? И каково содержимое tools.avrdude.erase.pattern? Какое поведение будет после того, как я их скопирую? Я хочу три отдельных шага (сохранить EEPROM, загрузить, установить бит блокировки). Я обновил вопрос с помощью команд AVRDude о том, чего я пытаюсь достичь., @user1584421

@Juraj Я думаю, что приближаюсь. Я отредактировал вопрос. Не могли бы вы взглянуть на это? У меня есть три подвопроса, на которые очень быстро даю ответы. Большое спасибо!, @user1584421

это не две спецификации в платах txt. применяются все значения ключей pro.*, но некоторые зависят от выбора в параметрах ЦП в меню «Инструменты» (например, предохранители), а некоторые действительны для всех параметров ЦП (биты блокировки), @Juraj

@Juraj Итак, если я использую Arduino Pro Mini, это означает, что я должен изменить первый набор для битов блокировки, а второй набор для значений предохранителей? Будет ли это работать? Кроме того, это работает ТОЛЬКО для опции «внешний программатор»?, @user1584421

вам нужно изменить tools.avrdude.program.pattern в файле platform.txt, чтобы добавить параметр, который вы хотите применить для «Загрузить с помощью программиста». tools.avrdude.program.pattern предназначен только для "Загрузить с помощью программатора"., @Juraj

ХОРОШО. Вот его содержимое: tools.avrdude.program.pattern="{cmd.path}" "-C{config.path}" {program.verbose} {program.verify} -p{build.mcu} -c{ протокол} {program.extra_params} "-Uflash:w:{build.path}/{build.project_name}.hex:i". Где и как именно указать там бит блокировки и предохранители? Я не могу найти ссылку в Интернете, и синтаксис не очевиден., @user1584421

как это не очевидно? {cmd.path} — это путь к avrdude, а это параметры для avrdude, просто ключи не заменяются значениями. для pro mini это оценивается как avrdude -Cavrdude.conf -v -patmega328p -cusbtiny -Uflash:w:Blink.ino.hex:i, @Juraj

Спасибо! Некоторые детали до сих пор не очевидны. Например, как добавить разделитель во флаг -U? Я также хочу передать hfuse:w:0xd2:m и lock:w:0x00:m. Наконец, я должен сохранить копию исходной строки на тот случай, если я захочу вернуться к нормальной работе. Я имею в виду, что это глобальные настройки, верно?, @user1584421

как я уже писал, параметры фьюзов можно посмотреть в tools.avrdude.erase.pattern. можешь скопировать оттуда, @Juraj

Я знаю параметры предохранителя, они у меня тоже есть в вопросе. Я просто не знаю, как поместить их в одну строку в tools.avrdude.program.pattern. Есть три параметра, предохранители, бит блокировки и шестнадцатеричный файл. Как мне их разделить? Какой должна быть правильная команда?, @user1584421

и я говорю в третий раз: см. Erase.pattern в platform.txt для параметров предохранителя tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} - p{build.mcu} -c{протокол} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader. high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m, @Juraj

Ты сказал: вы должны изменить tools.avrdude.program.pattern в файле platform.txt, чтобы добавить параметр, который вы хотите применить для "Загрузить с помощью программиста". Параметры, которые я хочу применить, -U hfuse:w:0xd2:m -U замок:w:0x00:m Параметры стирания - это то, что вы только что опубликовали. Вы говорите, что эта строка должна идти в tools.avrdude.pattern. Например, я искал bootloader.high_fuses. Они находятся в boards.txt. Значения, которые я нашел, были не тем, что я хотел. Я хочу hfuse:w:0xd2. Где установить это значение? Это то, о чем я спрашиваю., @user1584421

поэтому для теста измените boards.txt. чего я не знаю, так это применит ли avrdude эти параметры предохранителей, @Juraj

Только что сделал тест. В boards.txt в разделе Pro Mini я изменил pro.bootloader.lock_bits=0x0F на pro.bootloader.lock_bits=0x00, но, к сожалению, это не сработало, так как я смог прочитать Вспышка. Я думаю, что это невозможно сделать изнутри IDE., @user1584421

сработало https://forum.arduino.cc/t/arduino-cannot-set-lock-bits-and-fuses-from-ide/1034159, @Juraj


1 ответ


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

2

Вы можете добавить параметры предохранителя в раздел "Загрузить с помощью программатора" шаблон команды tools.avrdude.program.pattern в файле platform.txt. Скопируйте их из tools.avrdude.erase.pattern. (Значения предохранителей взяты из boards.txt)

модифицированный шаблон команды загрузки:

tools.avrdude.program.pattern="{cmd.path}" "-C{config.path}" {program.verbose} {program.verify} -p{build.mcu} -c{протокол} {program.extra_params} "-Uflash:w:{build.path}/{build.project_name}.hex:i" -Ulock:w:{bootloader.lock_bits}:m

,

Есть ли способ заставить IDE перезагрузить этот файл? Я редактирую его, и кажется, что мне нужно закрыть и снова открыть IDE, чтобы изменения вступили в силу..., @ldoogy

@ldoogy, да, требуется перезапустить IDE, @Juraj