GPIO arduino avr

Программируем Arduino с помощью Raspberry Pi

Статья о том,как при помощи GPIO прошить Arduino или совместимый с Arduino AVR.

Внимание!Все действия вы производите на свой страх и риск.Автор ответственности не несет.

Это руководство ориентировано на людях знакомых с ISP программированием или имеющим опыт работы с Arduino .Если вы не уверены в своих силах,то лучше использовать Arduino IDE.

Вам понадобится:

  • Raspberry Pi ,но учтите , что вам нужно 4 свободных GPIO порта для каждого AVR
  • AVR чип или платы Arduino , который с гребенкой ICSP (например Arduino Uno).
  • Макетная плата и провода для соединения выводов ICSP на AVR / Arduino и GPIO контактов на Raspberry Pi

Шаг 0.Добавим репозиторий из которого будем загружать ПО.

sudo nano /etc/apt/sources.list

И добавим в открывшийся файл строку

deb http://apt.adafruit.com/raspbian/ jessie main

Теперь в файле должно быть прописано два репозитория

1)Репозиторий Raspbian

2)Репозиторий Adafruit который мы сейчас добавили

Сохраняем файл и ставим avrdude

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install avrdude

Для того,чтобы удостовериться,что все установилось

avrdude -v

Шаг 1.Подключаемся.

Соединим контакты GPIO и ICSP контакты AVR/Arduino по схеме

  • Arduino ICSP VCC к Raspberry Pi 5V pin.
  • Arduino ICSP GND к Raspberry Pi GND pin.
  • Arduino ICSP RESET к Raspberry Pi GPIO #12.
  • Arduino ICSP SCK к Raspberry Pi GPIO #24.
  • Arduino ICSP MOSI к Raspberry Pi GPIO #23.
  • Arduino ICSP MISO к Raspberry Pi GPIO #18.

Шаг 2.Настроим AVRDUDE

Откроем файл

sudo nano /etc/avrdude.conf

И в конец файла добавим

# Linux GPIO configuration for avrdude.
# Change the lines below to the GPIO pins connected to the AVR.
programmer
  id    = "pi_1";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
  reset = 12;
  sck   = 24;
  mosi  = 23;
  miso  = 18;
;

Сохраняем файл.

Шаг 3.Программирование

Для начала нам нужно получить .hex файл скетча

Одним из способов его получения это скомпилировать скетч через ARDUINO IDE и посмотреть на наличие строки,которая укажет путь к .hex файлу

Удобнее всего это делать с ПК.

Пример строки:

/home/Сanabalt/Programs/arduino-1.6.4/hardware/tools/avr/bin/avr-objcopy -O ihex -R .eeprom /tmp/build6154610255332504576.tmp/Blink.cpp.elf /tmp/build6154610255332504576.tmp/Blink.cpp.hex 

Также .hex файл можно получить через AVR GCC

Проверим доступность Arduino/AVR

sudo avrdude -p atmega328p -C /etc/avrdude_gpio.conf -c pi_1 -v

Вывод должен быть примерно таким

avrdude: Version 6.1, compiled on May 28 2015 at 18:41:48
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch
 
         System wide configuration file is "/home/pi/avrdude_gpio.conf"
         User configuration file is "/root/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping
 
         Using Port                    : unknown
         Using Programmer              : pi_1
         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 : linuxgpio
         Description     : Use the Linux sysfs interface to bitbang GPIO lines
         Pin assignment  : /sys/class/gpio/gpio{n}
           RESET   =  12
           SCK     =  24
           MOSI    =  23
           MISO    =  18
 
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.00s
 
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
 
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK (E:05, H:D6, L:FF)
 
avrdude done.  Thank you.

Если все удачно,то мы готовы к прошивке

sudo avrdude -p atmega328p -C /etc/avrdude_gpio.conf -c pi_1 -v -U flash:w:Blink.cpp.hex:i

Где atmega328p модель контроллера,который прошиваем

Где Blink.cpp.hex необходимо указать путь и название .hex файла для прошивки

В моем случае вывод был таким

avrdude: Version 6.1, compiled on May 28 2015 at 18:41:48
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch
 
         System wide configuration file is "/home/pi/avrdude_gpio.conf"
         User configuration file is "/root/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping
 
         Using Port                    : unknown
         Using Programmer              : pi_1
         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 : linuxgpio
         Description     : Use the Linux sysfs interface to bitbang GPIO lines
         Pin assignment  : /sys/class/gpio/gpio{n}
           RESET   =  12
           SCK     =  24
           MOSI    =  23
           MISO    =  18
 
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.00s
 
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
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: reading input file "Blink.cpp.hex"
avrdude: writing flash (1030 bytes):
 
Writing | ################################################## | 100% 0.89s
 
avrdude: 1030 bytes of flash written
avrdude: verifying flash memory against Blink.cpp.hex:
avrdude: load data flash data from input file Blink.cpp.hex:
avrdude: input file Blink.cpp.hex contains 1030 bytes
avrdude: reading on-chip flash data:
 
Reading | ################################################## | 100% 0.87s
 
avrdude: verifying ...
avrdude: 1030 bytes of flash verified
 
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK (E:05, H:D6, L:FF)
 
avrdude done.  Thank you.

Такой вывод обозначает,что все прошито удачно.

Теперь удалим репозиторий

sudo nano /etc/apt/sources.list

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

Удачи вам во всех ваших начинаниях!

Все вопросы в комментарии под постом.

Тэги:

 

Автор:

Комментариев: 9

  • m
    02.06.2016 в 12:03 ответ

    А зачем убирать репозиторий?

  • m
    04.07.2016 в 09:13 ответ

    Для Raspberry Pi есть адаптированная версия Arduino IDE Вы пробовали через неё прошивать ардуину?

    • alfo
      18.06.2017 в 02:36 ответ

      а как вы будете прошивать с помощью IDE когда прошивка изначально идет в HEX?

      • alfacom
        18.06.2017 в 18:54 ответ

        Сначала прошивка в виде текстового файла хранится, а уже потом компилируется в hex.

        • alfo
          19.06.2017 в 16:11 ответ

          очень часто бывают ситуации когда прошивка идет сразу в hex расскажите как с ide быть?)

        • alfo
          19.06.2017 в 17:54 ответ

          я все это к томучто автор просто показал как прошить hex файлналичие ide конечно круто и да когда есть код можно и прошитьно когда у вас будет сразу в hex формате ide вам не поможет по этому и я не понимаю к чему этот комментарий про Arduino IDE

          • alfacom
            23.06.2017 в 00:37 ответ

            Да все так же с этим IDE. Все те же самые утилиты использует IDE, чтобы превратить код в хекс, а затем залить в ардуину. И лежат они в hardware\tools\avr\bin\  А с комментарием так тем более все правильно, т.к. у автора статьи был скетч, а не хекс. Посмотрите начало третьего шага.

            • alfo
              12.07.2017 в 23:29 ответ

              Ржу не могу Расскажите как открыть hex  в ардуино идеАвтор статье рассматривает все возможности мне как раз нужно было прошить чип прошивкой которая была в hex Был бы это скетч мне бы и raspberry не понадобился, я бы в винде все сделал Не нужно думать на столько узко и рассматривать частный случай когда у вас есть скетч. Или вы предлагаете написать еще отдельную статью про прошивку когда у вас есть только hex?)))

  • avrClone
    25.07.2022 в 04:18 ответ

    Я вот так прошил через orangepi: sudo apt-get install avrdude sudo avrdude -c arduino -p atmega2560 -cwiring -P /dev/ttyUSB0 -b115200 -D -Uflash:w:"/home/a/production/File_MPLAB.X.production.hex" Подробнее тут https://github.com/AndreiCherniaev/FreeRTOS_ATmega2560_MPLAB

Ваш комментарий

Авторизуйтесь для отправки комментария

© Сообщество пользователей RaspberryPi 2021