Программирование atmega16 через JTAG в Linux
Материал из Xgu.ru
Содержание |
[править] Подключение
JTAG — интерфейс, созданный для отладки и перепрограммирования. Существуют контроллеры JTAGICE mkII, но для ATmega128, ATmega16, ATmega162, ATmega165, ATmega169, ATmega16A, ATmega32, ATmega323, ATmega32A, ATmega64, ATmega64A достаточно JTAG ICE [1].
Имеем: "AVR JTAG USB (полный аналог AVR JTAG ICE от ATMEL с возможностью работы от USB)", микроконтроллер Atmega16. На компьютере установлен Ubuntu linux 8.10. На других дистрибутивах Linux/BSD должно работать аналогично.
При подключении "AVR JTAG ICE" (кстати, на нём тоже установлен Atmega16) он определяется как переходник на com-порт:
usb 2-1: new full speed USB device using uhci_hcd and address 3 usb 2-1: configuration #1 chosen from 1 choice usbcore: registered new interface driver usbserial usbserial: USB Serial support registered for generic usbcore: registered new interface driver usbserial_generic usbserial: USB Serial Driver core usbserial: USB Serial support registered for FTDI USB Serial Device ftdi_sio 2-1:1.0: FTDI USB Serial Device converter detected ftdi_sio: Detected FT232RL usb 2-1: FTDI USB Serial Device converter now attached to ttyUSB0 usbcore: registered new interface driver ftdi_sio ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
Из текста видно, что устройство теперь видно как ttyUSB0, это мы будем использовать при прошивке.
Подключаем стандартно:
Номер разъёма программатора | Порт микроконтроллера ATmega16, корпус PDIP |
---|---|
1 | - |
2 (GND) | GND (общий, земля) |
3 | - |
4 (MOSI) | 27 (TDI) |
5 (Reset) | 9 (Reset) |
6 (MISO) | 26 (TDO) |
7 | - |
8 (PB1) | 25 (TMS) |
9 | - |
10 (SCK) | 24 (TCK) |
[править] Тестовая программа
Писать будем на чистом C. Оригинал взят с AVR GCC :: УПРАВЛЕНИЕ ПОРТАМИ МИКРОКОНТРОЛЛЕРА и немного переделан.
Программа будет в бесконечном цикле выдавать 0/1 на порты PB и PD5. Паузы делать с помощью цикла нехорошо, надо бы с помощью специальных задержек, но у меня они почему-то действуют как-то неравномерно, и я сделал циклами.
#define F_CPU 8000000UL // указываем частоту в герцах, для кварца 8 MHz #include <avr/io.h> //#include <util/delay.h> int main(void) { // начало основной программы unsigned int i; DDRB = 0xff; // все выводы порта B сконфигурировать как выходы DDRD = 0xff; // все выводы порта D сконфигурировать как выходы while(1) { // бесконечный цикл PORTD |= _BV(PD1); // установить "1" (высокий уровень) на выводе PD1, зажечь светодиод PORTB = 0xff; // установить "1" на всех выводах порта PB // _delay_ms(250); // ждем 0.25 сек. for (i = 0; i < 20000; i++); // Делаем паузу PORTD &= ~_BV(PD1); // установить "0" (низкий уровень) на выводе PD1, погасить светодиод PORTB = 0x00; // установить "0" на всех выводах порта PB // _delay_ms(250); // ждем 0.25 сек. for (i = 0; i < 20000; i++); // Делаем паузу }; } // закрывающая скобка основной программы
Сохраняем её как test_atmega16.c.
[править] Компиляция
Нам понадобятся: компилятор avr-gcc и библиотеки (avr-libc). Установим их:
sudo apt-get install avr-libc gcc-avr
Скомпилируем нашу программу:
avr-gcc -mmcu=atmega16 -o test_atmega16.o test_atmega16.c
Получим исполняемый файл test_atmega16.o, который можно прописать в микроконтроллер.
- P.S. Если хочется посмотреть результат в виде ассемблерного кода, запускаем
avr-gcc -mmcu=atmega16 -S test_atmega16.c
- Будет сгенерирован файл test_atmega16.s
[править] Тестовая программа на ассемблере
[править] Прошивка
Установим avarice для прошивки через JTAG:
sudo apt-get install avarice
В начале стираем содержимое микроконтроллера, потом записываем нашу программу:
avarice -j /dev/ttyUSB0 -B 125KHz --erase avarice -j /dev/ttyUSB0 -B 125KHz --file test_atmega16.o --program
Сразу после окончания записи программа должна сама запуститься на микроконтроллере.
[править] Ссылки
- http://kartikmohta.com/wiki/Tech/ATmega16Programmer — программирование ATmega16/32 через LPT (англ.)
- http://electronix.net16.net/?p=98 Настройка AVR ISPmkll под ОС Linux
[править] См. также
- Архитектура AVR в примерах/Простейшая программа в Викиверситете.
[править] Лицензия на текст
Текст доступен на условиях лицензии Creative Commons Attribution/Share-Alike версии 3.0 или более новой.