USBasp и программирование по TPI

AVR
Недавно, мне пришлось использовать ATtiny10 в одном из проектов. Поскольку, я не обнаружил, в сообществе, статьи о программировании этих контролеров, то решил поделиться своим опытом.


В большинство 8-битных AVR'ов код заливается по интерфейсу ISP, который является вариантом, всем хорошо знакомого SPI. В нем 4 линии (не забываем про SS) и RESET, итого 5 выводов, а ещё земля и питание, значит нужно, ни как не меньше 7ми ножек. Поэтому, в шестиногих ATtiny4/5/9/10 применён Tiny Programming Interface (TPI). Ему нужно всего 2 линии, не считая RESET, а именно TPICLK для тактирования, и TPIDATA – двунаправленная линия данных. Описывать его работу я не стану, в соответствующем аппноте всё разжевано.

Поскольку, при работе с мелкими проектами, я обычно использую USBasp, было решено заставить его шить эти контроллеры.
Покопавшись в исходнике (напомню, что микропрограмма USBasp от 28 мая 2011 года уже имеет поддержку TPI), я пришёл к выводу, что выводы программатора надо подключить следующим образом: SCK -> TPICLK, MOSI -> TPIDATA. MISO болтается в воздухе. Для проверки, ATtiny10 был установлен на макетку.

Запустив SinaProg (v2.1), я обнаружил, что tiny10 нет в списке. За то он есть в конфиге дудки. Добавим tiny10 в список, для этого откроем Device.txt (в том же каталоге, что и SinaProg) и допишем новую строку, структура такая:
<Имя девайса>    <Идентификатор из avrdude.conf>    <Сигнатура девайса>

Внимание, никаких пробелов, только табуляция!
Сигнатура нужна, чтобы SinaProg признал контроллер. Найти её можно, например, здесь, или в даташите. Итого получилось:
ATtiny10    t10    1e9003

Выбираем ATtiny10, нажимаем Search, и получаем:
Правильно, дудка не знает, что USBasp поддерживает TPI. Можно пересобрать avrdude, исправив эту ошибку. А можно взять уже исправленную версию. В любом случае, копируем каталог SinaProg и работаем с копией. Заменим avrdude.exe и avrdude.conf на исправленные (можно взять в конце статьи). Снова пробуем найти микроконтроллер и… снова фейл! Почему? Потому, что я запитал контролер 3 вольтами, а TPI работает, только при 5 вольтовом питании!
Вот, теперь всё в порядке:

Можно лить код, однако калькулятор фьюзов всё ещё не работает. Это можно исправить!
Структура файлов Calc_??.cal одинакова:
<Имя из Device.txt>    <Вес НЕ программированого бита>    <Вес программированого бита >    <Описание>

Объясню. Например, вот таблица Lock Bits.

В норме, 2 последних бита, равны 1. Значит, байт принимает вид 0b00000011=0x03, если надо запрограммировать 0 бит, то байт примет вид 0b00000010=0x02. Что с этим сделает SinaProg? Вычтет из первого второе и вычтет результат из 0xff, тем самым, сформировав нужное значение.
В Calc_LB.cal (Lock Bits) пишем:
ATtiny10	0x03	0x03	Mode 1: No memory lock features enabled
ATtiny10	0x03	0x02	Mode 2: Further programming disabled
ATtiny10	0x03	0x00	Mode 3: Further programming and verification disabled

Остальные файлы править бессмысленно, так как фьюзов всего 3, и они находятся в нестандартной области памяти: WDTON и RSTDISBL в представлении не нуждаются, CKOUT — на PB2 появиться импульсы с тактовой частотой, около 1 МГц.

Обладателям разномастных FT2XX-based программаторов, немного сложнее, дудка версии 5.11.1 позволяет шить по TPI. Однако, надо спаять кабель, и подобрать инверсию выводов в avrdude.conf. Как, например, написано вот здесь (), но с FT4232 оно не работает, печально.

Каждый раз втыкать провода в макетку лениво. Поэтому, была сделана чудовищная платка. На которой разместился стандартный разъём AVR ISP. Вот так оно выглядит:

…и устанавливается в макетку.

Зачем, в схеме, нужен диод Шоттки? Он предотвращает проникновение 5 вольт по цепи питания, и повреждение низковольтной периферии, подключенной к контроллеру.

avrdude_USBasp_TPI.zip: исправленный avrdude.

P.S. Главное — не победа, а участие
Файлы в топике: avrdude_USBasp_TPI.zip

Комментарии (32)

RSS свернуть / развернуть
для программирования Attiny еще можно использовать "AVRISP mkII clone", который дружит с Avr Studio v5/v6 :)
0
Более того, у него аппаратный USB и он работает много стабильней.
0
Ни на одной из трех машин, на которых я работаю, проблем не было.
0
Вероятно, ты не пользуешься семеркой — на ней LS bulk device просто не запускается.
Кроме того, варианты V-USB с согласованием уровней стабилитронами часто конфликтуют на физическом уровне. С некоторыми хостами/хабами просто не определяются (причем это еще и от самих стабилитронов зависит, и еще от каких-то факторов). Лучше использовать 3.3В питание.
0
Семёрка? Из принципа ей не пользуюсь, не нравится. А на XP всё нормально, по крайней мере на относительно старом железе. Про 3вольтовое питание, спасибо, учту.
0
Дело вкуса. И XP все равно однажды устареет до невозможности использования, как устарела, скажем, 98-я. Кроме того, не работает оно неспроста — спецификация запрещает делать низкоскоростные bulk-устройства, просто XP этот запрет игнорирует. В линуксе они, AFAIK, тоже не работают — по той же причине.
0
Испытал. Под Семёркой всё замечательно работает. Драйвера нужны на базе libUSB начиная с 1.2.4. Не думаю, что XP выйдет из употребления в ближайшие 5 лет. А Мелкософт, быть может, склепает нечто приемлемое.
0
Ну, можно и так.
0
Кварц на 12МГц шикарен! =) У самого целый пакетик таких лежит.
0
Извените, а где вы там увидели кварц на 12 МГц?
0
На адаптере, вероятно. Немного странный кварц, похож на обычный, только в стеклянном корпусе. И светодиоды его подсвечивают.
0
Дизайн, же! Тёплый ламповый USBasp:)
0
Дай фото самого кварца, не на плате.
0

В программатор пошёл, что с надписью 57.
0
Недавно, мне пришлось использовать ATtiny10 в одном из проектов.
Прямо таки «пришлось»? А почему?
В нем 4 линии (не забываем про SS) и RESET, итого 5 выводов
RESET и есть SS для режима программирования. Так что по ножкам оно как раз впритык. Собственно, и на твоем программаторе 6 пинов, причем два из них — те самые GND и VCC. И новый ненамного лучше, всего на одну линию меньше. Или RESET для TPI необязателен?
<Имя из Device.txt> <Вес НЕ программированого бита> <Вес программированого бита > <Описание>
Больше похоже на <Имя> <Маска> <Значение> <Описание>. «Маска» определяет биты, который относятся к этой опции, а «Значение» — значение этих бит. Формула применения: Fuse = (Fuse & ~Mask) or (Value & Mask), т.е. из Value берутся биты по маске и помещаются в байт фьюзов.
0
  • avatar
  • Vga
  • 13 октября 2012, 22:50
Пришлось, tiny13 было слишком дофига, да и стоит tiny10 в два раза меньше, и занимает меньше места. О проекте, может быть, потом расскажу.
0
Есть и другие альтернативы. PIC10F2xx, например, тоже в SOT23-6.
0
Скажите, а где закупаетесь t10?
0
Напрашиваются ассоциации с i2c. Не он, случайно, скрывается под этим «TPI»? :-)
0
  • avatar
  • Alfa
  • 14 октября 2012, 20:42
Вообще, в даташите должно быть описано, но обычно такие интерфейсы — это two-wire/three-wire SPI.
0
Напрашиваются ассоциации с i2c. Не он, случайно, скрывается под этим «TPI»? :-)
Нет, TPI это по сути uart с двунаправленной линией и внешним тактированием.
0
Это больше на SPI похоже, в варианте с объединенными линиями передачи (двух/трехпроводной SPI).
0
Что то пропускал мимо глаз сею мелочь, обязательно заюзаю при изготовлении разных очень мелких мелочей:)
0
Если найдёте где их можно приобрести в розницу — отпишитесь пожалуйста.
0
Я всё вожу с фарнела, когда заказ для организации делаю, то добавляю что нужно для себя, и плачу только за комплектуху, без доставки.
0
Я брал в Элитане, какое-то время назад. А можно и образцы у Atmel'а заказать, пришлют 5 штук.
0
В нем 4 линии (не забываем про SS) и RESET, итого 5 выводов, а ещё земля и питание, значит нужно, ни как не меньше 7ми ножек.
При программировании RESET выполняет роль SS, поэтому только 6 линий, а в данном контроллере используется на одну линию меньше.
0
Посмотрел по внимательнее, очень обидно что у этой гадости нет своего внутреннего источника опорного напряжения, да и опорное он берёт из питания… А тоб получился классный драйвер для литиевого аккумулятора. А так, очень мелкая ного-дрыгалка, или шимогенерилка:)
0
На чем пишите для tiny 10 и другой мелочи, avrStudio4 не поддерживает.
0
Студия 5 или 6.
0
Можно. Только, надо уровни согласовать. Можно почитать вот здесь.
0
Разные. Мало того, PDI позволяет ещё и проводить отладку, через соответствующий программатор.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.