Avantes notes

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Программатор из ftdifriend

Печать

При помощи не большого девайса за ~15$ получается не плохой последовательный программатор для AVR микроконтроллеров фирмы Atmel. FTDI Friend базируется на FT232RL чипе, который хорошо себя зарекомендовал, как аппаратный USB->COM.

ftdi

Изначально FTDIFriend покупался как дополнительный USART к Arduino  Duemilanove, со своей задачей он успешно справился. Но возникла необходимость в разработке устройства не на платформе Arduino, в основном из-за высокой стоимости и не очень маленьких размеров платы, а на чистом Atmel контроллере(я использовал переходную модель между mega и tiny: ATtiny2313). Само устройство было собрано, прошивка написана, осталось залить её в МК, тут и помог мне FTDIFriend.

Не забываем собрать ядро с поддержкой ftdi чипа, после чего подключаем FTDIFriend и проверяем:

View source
$ ls /dev/ttyUSB*
/dev/ttyUSB0

Устанавливаем avrdude, которым будем шить наш МК

View source
$ emerge -av avrdude

В конфиг avrdude добавляем наш программатор:

View source
$ sudo nano /etc/avrdude.conf
programmer
id = "ftdifriend";
desc = "design ftdi adatper, reset=dtr sck=tx mosi=rts miso=cts";
type = serbb;
reset = ~4;
sck = ~3;
mosi = ~7;
miso = ~8;

 

Подключение к МК:

FTDI Friend MK AVR
Ground Ground
VCC VCC
DTR Reset
TX SCK
RTS MOSI
CTS MISO

Проверяем все ли правильно настроено/подключено:

View source
$ avrdude -c ftdifriend -P /dev/ttyUSB0 -p t2313 
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.48s
avrdude: Device signature = 0x1e910a
avrdude: safemode: Fuses OK
avrdude done. Thank you.

Тут вроде все понятно, ключ -P указывает порт, -p модель мк(ATtiny 2313), -с программатор.

Прошивка МК, файлом mega.h

View source
$ avrdude -c ftdifriend -P /dev/ttyUSB0 -p t2313 -e -U flash:w:mega.hex
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.48s 
 
avrdude: Device signature = 0x1e910a
avrdude: erasing chip
avrdude: reading input file "mega.hex"
avrdude: input file mega.hex auto detected as Intel Hex
avrdude: writing flash (1764 bytes):
 
Writing | ################################################## | 100% 290.31s 
 
avrdude: 1764 bytes of flash written
avrdude: verifying flash memory against mega.hex:
avrdude: load data flash data from input file mega.hex:
avrdude: input file mega.hex auto detected as Intel Hex
avrdude: input file mega.hex contains 1764 bytes
avrdude: reading on-chip flash data:
 
Reading | ################################################## | 100%281.13s 
 
avrdude: verifying ...
avrdude: 1764 bytes of flash verified
avrdude: safemode: Fuses OK 
avrdude done. Thank you.

Прошивка и верификация прошла успешно, но есть одно НО, это bitbang програматор и скорость передачи данных очень низкая ~6byte в секунду, т.е. прошивка Tiny2313 заняла у меня около 10 минут

Считывание прошивки из МК в файл:

View source
$ avrdude -c ftdifriend -P /dev/ttyUSB0 -p t2313 -U flash:r:flash.bin:r
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.48s
avrdude: Device signature = 0x1e910a
avrdude: reading flash memory:
Reading | ################################################## | 100% 326.55s
avrdude: writing output file "flash.bin"
avrdude: safemode: Fuses OK
avrdude done. Thank you.

Backup готов!

Фьюзы устанавливаются при помощи прошивки секций МК hfuse и lfuse (8 бит каждая), пример установки lfuse в 0xE4:

View source
$ avrdude -c ftdifriend -P /dev/ttyUSB0 -p t2313 -U lfuse:w:0xE4:m 
avrdude: AVR device initialized and ready to accept instructions 
 
Reading | ################################################## | 100% 0.48s 
 
avrdude: Device signature = 0x1e910a
avrdude: reading input file "0xE4"
avrdude: writing lfuse (1 bytes):
 
Writing | ################################################## | 100% 0.48s 
 
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xE4:
avrdude: load data lfuse data from input file 0xE4:
avrdude: input file 0xE4 contains 1 bytes
avrdude: reading on-chip lfuse data:
 
Reading | ################################################## | 100% 0.16s 
 
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: safemode: Fuses OK 
avrdude done. Thank you.

 

Готово!