Jump to content

    

Работа с AVR в Linux

Доброго времени.

Поставил несколько IDE для работы с avr, все используют avr-gcc, опыта программирования МК не имею, так что вместо зубрения даташитов предпочел поиск готовых либ для работы со всякой всячиной. В итоге был неприятно удивлен, что ни одна либа из опробованных не подошла. Вот собственно и вопрос: Что avr-gcc такой урезанный или чего у меня нет, и вообще, где искать либы для него? Так к примеру надо работать с HD44780 но при подключении всевозможных lcd44780.c lcd44780.h lcd.h hd44780lib.c LCD.HD4478.Driver.h разных версий получаю ошибки типа отсутствия заголовочных файлов, неправильных типов, ошибки синтаксиса. В итоге уже начал писать код с даташита.

Я верю, что это хороший компилятор, неужели он так сильно уступает многим другим.

Имелось в виду, что большинство готовых библиотек на сях написано для других компиляторов, следовательно, для gcc-avr этот код надо еще портировать, многих заголовочных файлов у меня не нашлось.

Datasheets + Карниган и Ричи Вам помогут

 

PS. по gcc под avr есть отдельная ветка форума

Edited by kaf

Share this post


Link to post
Share on other sites

На Linux'е торчу уже давно :) Но попробовать работать с AVRками под Linux нашел время только сейчас. Имеется atmega16 и 32 + avr-jtag-usb. Столкнулся с такой проблемой: тут говорят что можно воспользоваться DDD для удобства отладки по JTAG: http://www.oshec.org/articles/otladka-avr-...-avr-pod-linuh/ (хотя конечно удобнее прикрутить CodeBlocks для этой цели, но это потом :) ). Этот ddd не видит где лежит исходник и не понимает на каком языке написана программа. В последствии я выяснил что и просто avr-gdb не видит где исходник и какой язык использовался (Си или асм), в самом ELF файле я нашел какие-то левые пути и файлы с расширением .s ... Как правильно компилировать, чтобы в .efl помещалась правильная инфа об исходных файлах программы и их именах? :help:

ЗЫ

Сама заливка программы и начало отладки происходит без каких-либо ошибок и даже можно брейкпоинты ставить и прочее делать. Просто хочется производить отладку видя исходник, иначе очень трудно...

 

Добавил:

Сам разобрался. Надо компилировать с опцией -g и тогда оно засунет в .elf правильные пути ко всем исходникам :)

Share this post


Link to post
Share on other sites
Присоединил файл , правда от Prottosa там только само железо, а прошивка сделана из проекта MyDoper (не мой) который присоединен в ветке http://electronix.ru/forum/index.php?showtopic=18676, для работы в Линукс этот проект пришлось поправить как я описывал выше, чтобы включить поддержку HID. После прошивки программатор становится stk500v2, что и нужно установить в ключе -P для AVRDUDE, ключ -p(ort) установить порт avrdoper. т.е. Строка запуска будет выглядеть примерно так..
avrdude -P stk500v2 -p avrdoper и далее по тексту.

 

 

Спасибо за прошивку. Давно искал чем можно завести программатор из под avrdude под Debian Lenny (Linux) и иногда под Vista (Windows).

 

Однако остаётся небольшая непонятка, может конечно я что-то делаю не так, но ситуация такова, что читать Flash & EEPROM могу без проблем, а вот записать получается только в EEPROM.

При попытке записи в терминальном режиме (опция -t) выдаётся следующая ошибка:

 

lenny:/home/mobidev/PCB/# avrdude -c stk500v2 -P avrdoper -p ATMEGA168 -t

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.20s

avrdude: Device signature = 0x1e9406
avrdude>
avrdude> write flash 0xc00 0x00 0x01 0x02 0x03
>>> write flash 0xc00 0x00 0x01 0x02 0x03
avrdude (write): error writing 0x00 at 0x00c00 cell=0xff
avrdude (write): error writing 0x01 at 0x00c01 cell=0xff
avrdude (write): error writing 0x02 at 0x00c02 cell=0xff
avrdude (write): error writing 0x03 at 0x00c03 cell=0xff

avrdude> dump flash 0xc00 32
>>> dump flash 0xc00 32
0c00  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0c10  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude>

avrdude> dump eeprom 0x00 32
>>> dump eeprom 0x00 32
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude> write eeprom 0x00 0x00 0x01 0x02 0x03
>>> write eeprom 0x00 0x00 0x01 0x02 0x03

avrdude> dump eeprom 0x00 32
>>> dump eeprom 0x00 32
0000  00 01 02 03 ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude> quit
>>> quit

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

lenny:/home/mobidev/PCB/#

Edited by mobidev

Share this post


Link to post
Share on other sites
При попытке записи в терминальном режиме (опция -t) выдаётся следующая ошибка:

 

lenny:/home/mobidev/PCB/# avrdude -c stk500v2 -P avrdoper -p ATMEGA168 -t

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.20s

avrdude: Device signature = 0x1e9406
avrdude>
avrdude> write flash 0xc00 0x00 0x01 0x02 0x03
>>> write flash 0xc00 0x00 0x01 0x02 0x03
avrdude (write): error writing 0x00 at 0x00c00 cell=0xff
avrdude (write): error writing 0x01 at 0x00c01 cell=0xff

 

Было подобное. Решил опцией -B 10, это уменьшение скорости передачи данных при программировании. Правда у меня JTAG ICE MKII.

Share this post


Link to post
Share on other sites

Программирование должно происходить на скорости в 4 раза меньшей чем частота тактирования кристалла, которая на новом МК составляет 1МГц. На самом деле если у вас стоит внешний кварц или реальное устройство должно работать на более высокой частоте, то можно сперва прошить фьюзы чтобы изменить источник тактового сигнала, а потом прошивать собственно программу, но всегда частота клока программатора должна быть как минимум в 4 раза меньше частоты тактирования кристалла.

Share this post


Link to post
Share on other sites

Спасибо за советы, попробую!

 

to GDI: Кстати, подскажите пожалуйста, а в Вашей прошивке, которая делает устройство как stk500v2 over avrdoper, оба светодиода должны работать (RD + WR), как и в оригинальной прошивке Prottoss или только один, а то почему-то наблюдаю у себя работу только одного LED, может я где-то чего то упустил.

Share this post


Link to post
Share on other sites

Интересно что никто не упомянул Mentor который есть и под линух. Как я понимаю должнобыть круче всего остального с большим отрывом. Ну разумеется кроме того что не фри и темболее не опенсорс ;-)

Share this post


Link to post
Share on other sites
to GDI: Кстати, подскажите пожалуйста, а в Вашей прошивке, которая делает устройство как stk500v2 over avrdoper, оба светодиода должны работать (RD + WR), как и в оригинальной прошивке Prottoss или только один, а то почему-то наблюдаю у себя работу только одного LED, может я где-то чего то упустил.
Прошивка не моя, я там просто подправил дефайн чтобы устройство стало работать как HID. А светодиод там только один работает и клок наружу не выдается, это все можно поправить в исходниках при наличии желания.

Share this post


Link to post
Share on other sites
Прошивка не моя, я там просто подправил дефайн чтобы устройство стало работать как HID. А светодиод там только один работает и клок наружу не выдается, это все можно поправить в исходниках при наличии желания.

 

То есть тогда опция "-B 10", указанная выше в моём случае не будет иметь эффекта?

Share this post


Link to post
Share on other sites

Опция "-В 10" влияет на скорость передачи данных, т.е. на клок SPI, а я имел в виду клок 1МГц для внешнего тактирования МК который выведен наружу и у prottossa и в оригинальном doper-е. Т.е. в вашем случает опция "-В 10" должна подействовать, хотя я на память не помню ее параметров "10" - это 10кГц?

Share this post


Link to post
Share on other sites

Всем здравствуйте! Вот решил поделиться своим опытом.

На линукс в качестве основной ОС я перешел уже очень давно, более 5 лет не пользуюсь никакими поделками микрософта.

Вот заусило программировать микроконтроллеры в линуксе, собрал для начала STK200, заработал сразу и работает по сей день. Для программирования с бука в полевых условиях понадобился USB программатор, собрал по этой схеме

http://www.hardlock.org.ua/mc/other/avr910/ автор чрезмерно упростил схему в части перемычки "modify", а вообще этот программатор заработал сразу с родной прошивкой от протоса. но при самосборном ядре он прошивал в режиме CDC. Со стандартным ядром как уже тут говорилось CDC режим неработает, зато отлично работает HID.

29729.jpg

Печатка разведена в KiCAD, на фото автомобильный 1wire термометр с дисплеем от нокиа3310 (точнее что от него осталось после летнего теста в машине). Для программирования использую avr-gcc + avrdude(через Makfile) (или ponyprog2000).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this