Atmega328p — переход на низкое энергопотребление 1,8 В с использованием генератора 4 МГц — прошивка загрузчика
Я хотел бы использовать микроконтроллер Atmega328p с генератором 4 МГц, чтобы добиться низкого энергопотребления. Я использую плату Arduino для прошивки загрузчика в Atmega.
ИЗМЕНИТЬ
Чтобы скомпилировать загрузчик optiboot, мне пришлось установить пакет avr-libc и клонировать репозиторий
sudo apt-get install avr-libc
git clone https://github.com/Optiboot/optiboot.git
и отредактировал Makefile в /optiboot/bootloaders/optiboot/Makefile
, добавив новую запись с именем atmega328_4
HELPTEXT += "target atmega328 - ATmega328p 4Mhz\n"
atmega328_4: TARGET = atmega328
atmega328_4: MCU_TARGET = atmega328p
atmega328_4: CFLAGS += $(COMMON_OPTIONS)
atmega328_4: AVR_FREQ ?= 4000000L
ifndef BIGBOOT
atmega328_4: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
else
# bigboot version is 1k long; starts earlier
atmega328_4: LDSECTIONS = -Wl,--section-start=.text=0x7c00 -Wl,--section-start=.version=0x7ffe
endif
atmega328_4: $(PROGRAM)_atmega328_4.hex
atmega328_4: $(PROGRAM)_atmega328_4.lst
atmega328_4_isp: atmega328
atmega328_4_isp: TARGET = atmega328
atmega328_4_isp: MCU_TARGET = atmega328p
ifndef BIGBOOT
# 512 byte boot, SPIEN
atmega328_4_isp: HFUSE ?= D9
else
# 1k byte boot, SPIEN
atmega328_4_isp: HFUSE ?= D9
endif
# Low power xtal 46MHz) 16KCK/14CK+65ms
atmega328_4_isp: LFUSE ?= 7D
# 2.7V brownout
atmega328_4_isp: EFUSE ?= FE
atmega328_4_isp: isp
Я сохранил файл, запустил команду make и получил следующую ошибку:
userk@norepinephrine:~/development/git/optiboot/optiboot/bootloaders/optiboot$ make atmega328_4
avr-gcc (GCC) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
BAUD RATE CHECK: Desired: 115200, Real: 125000, UBRRL = 3, Difference=8.5%
avr-gcc -g -Wall -Os -fno-split-wide-types -mrelax -mmcu=atmega328p -DF_CPU=4000000L -DBAUD_RATE=115200 -DLED_START_FLASHES=3 -c -o optiboot.o optiboot.c
optiboot.c:348:6: error: #error BAUD_RATE off by greater than 5%
#error BAUD_RATE off by greater than 5%
^
optiboot.c:359:2: error: #error Unachievable baud rate (too fast) BAUD_RATE
#error Unachievable baud rate (too fast) BAUD_RATE
^
<builtin>: recipe for target 'optiboot.o' failed
make: *** [optiboot.o] Error 1
Поэтому я изменил параметр -DBAUD_RATE на 19200 и повторно запустил команду make
BAUD_RATE_CMD = -DBAUD_RATE=19200
Затем были созданы 2 новых файла: optiboot_atmega328_4.elf и optiboot_atmega328_4.hex
Затем я скопировал эти файлы в папку конфигурации Arduino, расположенную
по адресу: /home/userk/.arduino15/packages/arduino/hardware/avr/1.6.21/bootloaders/optiboot
ТИД
Я использую пользовательский файл конфигурации платы board.txt
##############################################################
nz.name=Arduino Noize
nz.vid.0=0x2341
nz.pid.0=0x0043
nz.vid.1=0x2341
nz.pid.1=0x0001
nz.vid.2=0x2A03
nz.pid.2=0x0043
nz.vid.3=0x2341
nz.pid.3=0x0243
nz.upload.tool=avrdude
nz.upload.protocol=arduino
nz.upload.maximum_size=32256
nz.upload.maximum_data_size=2048
nz.upload.speed=19200
nz.bootloader.tool=avrdude
nz.bootloader.low_fuses=0x7D
nz.bootloader.high_fuses=0xD9
nz.bootloader.extended_fuses=0xFE
nz.bootloader.unlock_bits=0x3F
nz.bootloader.lock_bits=0x0F
nz.bootloader.file=optiboot/optiboot_atmega328_4.hex
nz.build.mcu=atmega328p
nz.build.f_cpu=4000000L
nz.build.board=AVR_UNO
nz.build.core=arduino
nz.build.variant=standard
Прошивка загрузчика Я выполнил следующие действия:
Загрузил эскиз ArduinoISP на плату Arduino UNO.
Подключили плату Arduino и микроконтроллер, как показано на схеме ниже.
Выберите «Arduino Noize» в меню «Инструменты» > «Доска».
Выберите «Arduino как ISP» в меню «Инструменты» > «Программист». Запустите «Инструменты» > «Записать загрузчик»
На этом этапе я получил сообщение об успехе от IDE. Значит загрузчик правильно прошит в Atmega328p
Проблема
Когда я пытаюсь загрузить образец эскиза (мигает), используя приведенную ниже схему, я получаю таймаут от IDE.
Я дважды проверил соединения, но эскиз не загружается. У вас есть какие-нибудь советы?
@UserK, 👍3
Обсуждение3 ответа
Как отмечает Гербен в комментариях, загрузчик должен знать, насколько быстро работает плата. Он использует это для определения настроек скорости передачи данных для последовательной связи.
Если вы сами не скомпилировали загрузчик с правильными настройками тактовой частоты, вы, вероятно, обнаружите, что он работает на четверти той скорости, на которой вы ожидаете. Разделение скорости передачи данных на четыре в настройках вашей платы может помочь, но вам действительно следует скомпилировать загрузчик так, чтобы он правильно соответствовал плате.
Спасибо, я отредактировал вопрос, добавив информацию, касающуюся компиляции загрузчика optiboot., @UserK
Как упоминалось ранее, вам необходимо скомпилировать загрузчик Optiboot с правильной тактовой частотой. Вот руководство, в котором показано, как это сделать, а также добавлена опция в меню Arduino IDE для выбора правильной тактовой частоты без необходимости добавления собственного определения платы.
Optiboot — ATmega328P на произвольной частоте
Хороший урок, я пытаюсь следовать предоставленным шагам, но пример для 12Mhz clock. Пожалуйста, посмотрите мои правки, @UserK
Принцип тот же самый для тактовых частот, отличных от 12 МГц. Я думаю, что вы выбрали неправильную скорость передачи данных для загрузки. Либо измените nc.upload.speed
в файле платы на 115200 бод, либо перекомпилируйте загрузчик со скоростью 19200 бод., @tttapa
nz.bootloader.low_fuses=0x7D
nz.bootloader.high_fuses=0xD9
nz.bootloader.extended_fuses=0xFE
Расширенный байт предохранителя. биты 2,1,0 определяют уровень затемнения (биты 7-3 не используются) 110 = от 1,7 до 2,0 В, типично 1,8
Младшие байты предохранителя 3,2,1 определяют источник синхронизации 110 = кварцевый генератор малой мощности в диапазоне 3–8 МГц.
Значит, с этими настройками все в порядке.
- Автономный ATMega328 — нужно ли прожигать загрузчик?
- Не удается снова загрузиться после смены платы
- Путаница с ATmega328P и 3,3 В/8 МГц
- Что означает avrdude: Device signature = 0x000000? Неисправная проводка? Проблема с программным обеспечением? Неправильная инструкция?
- Заменить предохранители Arduino Uno (может ли Arduino Uno заменить свои собственные предохранители?)
- Переход к загрузчику из кода приложения в atmega328p
- Arduino Uno считывние предохранителей
- Ardutester Millenium I2c Lcd ничего не показывает!
Как вы скомпилировали загрузчик optiboot? Вам нужно указать загрузчику, на какой скорости он работает., @Gerben
Спасибо, я обновлю пост с помощью Makefile от optiboot, @UserK
Итак, вы скомпилировали optiboot со скоростью передачи данных 19200, но указали 9600 в файле boards.txt., @Gerben
Извините, я не обновил вопрос после добавления конфигурации optiboot. Теперь он обновлен. У меня все еще та же проблема с тайм-аутом., @UserK