Работа с 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 комментарий