Работа с RLN Electro в AVR Studio без программатора

Дисклеймер: Не факт что я открою что-то новое в этой статье, но этот метод в русскоязычных интернетах мне не попадался, хотя я в них я особо и не ищу :)

Все-таки, полезная штука этот AVR Studio 5. И код написать позволит, и подсветку сделает, и дополнительные тулзы подключит. Собственно о том, как я обычно работаю с отладочной платой RLN Electro (да и не только с ней) речь и пойдет.

Задача такая — есть устройство с USB-подключением к компьютеру и надо наладить загрузку прошивки через последовательный порт.

«В чем проблема?»,- Спросите вы? Берем бутлоадер, зашиваем его в камень, берем avrdude, пишем команду в консоли, или используем некую графическую оболочку, да и дело с концом. Ну да, только AVR studio предлагает все это слегка автоматизировать.


Большую часть времени работы с платой, да и с камнями AVR вообще, я провожу в AVR Studio. Чего мне не хватало в ней — так это загрузки прошивки одной кнопкой без использования программатора, как в Arduino. Когда появилась моя плата, я начал искать способы это сделать. А они лежат на поверхности.

Для того, чтобы получить заветную кнопочку «Загрузить», необходимо воспользоваться пунктом меню «Tools-External tools». Этот пункт позволяет создать пункт меню, запускающий некую программу с некой командой — этим как раз удобно воспользоваться, непосредственно повесив avrdude на пункт меню.

По нажатию пункта External tools откроется незамысловатое окно:


Так уж сложилось, что avrdude у меня лежит в arduino. Поэтому в строке Command ссылаемся на него и в следующей строке указываем его параметры:

-CC:/arduino/arduino-0022/hardware/tools/avr/etc/avrdude.conf -v  -pm1280 -cstk500v1 -P\\.\COM17 -b57600 -D -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i


Полный список параметров и камней доступен по ссылке: AVRDUDE 2.1 Option Descriptions

Указываем:

  • Наш камень (m1280)
  • Тип зашитого в него бутлоадера (да, ардуино использует вроде как не модифицированный stk500)
  • Наш порт \\.\COM17 (кто сможет объяснить, зачем тут столько слешей?)
  • Скорость передачи данных (для всех версий плат arduino ее, как и описание всех фьюзов, можно найти в файле /hardware/arduino/boards.txt)
  • Куда шить будем и что шить будем
  • Намекаем галочкой «use output window» чтобы программатор комментировал свои действия в чистое белое окно вывода, а не открывающуюся консоль и сохраняем.

Интересен факт, что параметр (ItemFileName) определяется текущим активным файлом в редакторе. Соответственно при нажатии на кнопку загрузки активным должен быть файл соответствующий по имени hex-файлу проекта. Впрочем, ругнуться avrdude всегда успеет.

В результате, в менюшке, появляется кнопочка с нашим названием (у меня их там пока два штуки в зависимости от подключаемых плат), компилируем проект, и, пунктом меню «COM17», пытаемся зашить проект в плату.

AVRdude тут же радостно рапортует в консоль о том что ему это удалось (или не удалось):

avrdude.exe: Version 5.4-arduino, compiled on Oct 11 2007 at 19:12:32
avrdude.exe: Version 5.4-arduino, compiled on Oct 11 2007 at 19:12:32
             Copyright © 2000-2005 Brian Dean, https://www.bdmicro.com/

             System wide configuration file is "C:/arduino/arduino-0022/hardware/tools/avr/etc/avrdude.conf"

             Using Port            : \\.\COM16
             Using Programmer      : stk500v1
             Overriding Baud Rate  : 57600
             AVR Part              : ATMEGA1280
             Chip Erase delay      : 9000 us
             PAGEL                 : PD7
             BS2                   : PA0
             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    10     8    0 no       4096    8      0  9000  9000 0x00 0x00
               flash         65    10   256    0 yes    131072  256    512  4500  4500 0x00 0x00
               lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
               lock           0     0     0    0 no          1    0      0  9000  9000 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 : STK500
             Description     : Atmel STK500 Version 1.x firmware
             Hardware Version: 2
             Firmware Version: 1.16
             Vtarget         : 0.0 V
             Varef           : 0.0 V
             Oscillator      : Off
             SCK period      : 0.1 us

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude.exe: Device signature = 0x1e9703
avrdude.exe: safemode: lfuse reads as 0
avrdude.exe: safemode: hfuse reads as 0
avrdude.exe: safemode: efuse reads as 0
avrdude.exe: reading input file "E:\MyDocs\drive_module\drive_module\drive_module\Debug\drive_module.hex"
avrdude.exe: writing flash (1120 bytes):

Writing | ################################################## | 100% 0.37s

avrdude.exe: 1120 bytes of flash written
avrdude.exe: verifying flash memory against E:\MyDocs\drive_module\drive_module\drive_module\Debug\drive_module.hex:
avrdude.exe: load data flash data from input file E:\MyDocs\drive_module\drive_module\drive_module\Debug\drive_module.hex:
avrdude.exe: input file E:\MyDocs\drive_module\drive_module\drive_module\Debug\drive_module.hex contains 1120 bytes
avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 0.35s

avrdude.exe: verifying ...
avrdude.exe: 1120 bytes of flash verified

avrdude.exe: safemode: lfuse reads as 0
avrdude.exe: safemode: hfuse reads as 0
avrdude.exe: safemode: efuse reads as 0
avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.


Красота! Никаких программаторов и никаких отдельных окон не нужно. Все тут, в одном месте. Ну а я, как проснусь и встану, расскажу вам о кусочке старого кода, написанного в свое время для менюОС, но там не особо пригодившегося. Речь пойдет об указателях на функции. Веселая и полезная штука кстати, особенно на гарвардской архитектуре.

1 комментарий

avatar
\\.\ — это именованные пайпы. Фактически, \\.\COM17 — это виртуальный файл, с которым можно работать обычными функциями WinApi, но при записи данных туда, они будут переданы в com-порт.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.