Перейти к содержанию

    

Работа с 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 есть отдельная ветка форума

Изменено пользователем kaf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На 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 правильные пути ко всем исходникам :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Присоединил файл , правда от 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/#

Изменено пользователем mobidev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
При попытке записи в терминальном режиме (опция -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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


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

Поделиться сообщением


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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

На линукс в качестве основной ОС я перешел уже очень давно, более 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).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация