Предоставление пользовательских команд 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. Во второй спецификации есть возможность установить нужные мне фьюз-биты. Тем не менее, нет опции для битов блокировки. Варианты битов блокировки есть в первой спецификации, но нет вариантов для предохранителей.
Мои новые вопросы таковы:
- Должен ли я указывать биты блокировки в первой спецификации и предохранители во второй? Будет ли это работать? Я должен спросить, прежде чем пытаться сделать что-нибудь глупое. Будут ли вторые спецификации «наследовать» из первых спецификаций?
- Будут ли вставленные здесь параметры работать только для параметра
Загрузить с помощью программатора
? Я хочу, чтобы обычная загрузка (через загрузчик) работала нормально. - Что произойдет, если я откажусь от платформы Arduino и буду использовать автономный AVR? Если я использую тот же AVR, что и на платформе Pro Mini. Будут ли работать те же настройки?
@user1584421, 👍1
Обсуждение1 ответ
Лучший ответ:
Вы можете добавить параметры предохранителя в раздел "Загрузить с помощью программатора" шаблон команды 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
- avrdude ser_open() can't set com-state
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Какие есть другие IDE для Arduino?
- Не могу загрузить скетч в Arduino Nano
- Как просто закрыть вкладку в Arduino IDE?
- Могу ли я использовать Visual Studio вместо Arduino IDE?
- Где параметры avrdude определяются в Arduino IDE?
- Ошибка проверки Avrdude при прошивке кода Arduino Mega
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