Программатор для нового семейства tinyAVR на базе дешевого китайского конвертера CH340

Unified Program and Debug Interface (UPDI) — это однопроводной интерфейс для программирования/отладки новых 8-битных микроконтроллеров Atmel, пришедший на смену двухпроводному интерфейсу PDI, использовавшемуся для программирования микроконтроллеров AVR XMEGA.

image

Итак, полку атмеловских протоколов прибыло — ISP, JTAG, debugWIRE, TPI, aWire, PDI, теперь вот UPDI. При этом ситуация с экосистемой у AVR по-прежнему весьма нерадужная, так что мы собирались совсем уже отказываться от их использования, но последняя тенденция нас слегка порадовала, поэтому и была написана данная статья.

Использовать протокол UPDI могут только счастливые обладатели программатора Atmel ICE, который не очень удобен в эксплуатации из-за довольно странного выбора разъема, да и стоит не так уж дешево, чтобы позволить себе закупать его в промышленных масштабах. К тому же он требует установки Atmel Studio, которая периодически отказывается с ним работать, так как согласно политике нашей фирмы, большинство компьютеров не имеют доступа к Интернету, а студия периодически туда лезет то за драйверами, то за какими-то библиотеками, в итоге были моменты, когда программатор был виден в системе, то есть, драйвера установились верно, но он в упор не замечался самой студией до тех пор, пока она не получила доступ к сети и не была обновлена принудительным образом.

Поэтому сразу же после того, как мы начали использовать в своих разработках новый и довольно удобный микроконтроллер ATTiny1616 (о его достоинствах позднее), возникла потребность в инструменте, который мы могли бы применять для записи в контроллер первичного загрузчика в производстве. Разумеется, без смс и регистрации доступа к Интернету.

После небольших поисков я обнаружил на Гитхабе проект pyupdi (https://github.com/mraardvark/pyupdi) — реализацию протокола UPDI на Питоне, причем основана эта реализация на обычном протоколе UART, разве что без преобразователей уровня, что, на самом деле, еще удобнее, потому что позволяет использовать стандартные микросхемы преобразователей от FTDI или их китайские аналоги CH340/341.

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

  • необходима инсталляция Питона и целой группы пакетов (напоминаю, речь идет о компьютерах без доступа к Инернету), пришлось скачать и вручную поставить почти десяток различных пакетов, которые зависимостями тянули друг друга. Да, в принципе, можно сделать из скрипта на Питоне исполняемый файл на другом компьютере, это как-то решало проблему, но на этом список проблем не заканчивался
  • в скрипте почти отсутствует проверка на ошибки, любая ошибка заканчивается прерыванием с указанием кучи ссылающихся друг на друга файлов, что для рядового персонала выглядит не очень понятно
  • невозможно прочитать содержимое памяти контроллера, что делает невозможным конечное тестирование процесса записи
  • нет возможности прочитать фьюзы
  • скорость работы скрипта оставляет желать лучшего, 16 кб пишутся почти минуту, связано это с отсутствием какой бы то ни было оптимизации в процессе передачи, все построено на жестких таймингах
  • отсутствие индикации процесса записи
  • проект не поддерживает целый ряд процессоров, которые мог бы поддерживать
  • проект находится в полумертвом состоянии и не реагирует на запросы

Проблемы какое-то время решались в рамках Питона, но после любого фикса приходилось пересобирать проект, тестировать, так что появилось желание переписать скрипт на чем-то более привычном и быстром, то есть, на Си. Мы же эмбеддеры, в конце концов!

Теперь кратко о достоинствах нового семейства tinyAVR 1-Series:

  • реальная унификация периферии и адресного пространства в рамках от 2 кб до 32 кб
  • удобная конфигурация загрузчика (в начале памяти!)
  • существенное упрощение алгоритма ISP (In-System-Programming)
  • переход к фон-неймановской архитектуре
  • до 32 кб флэш-памяти в мелком корпусе (3х3мм) с 24 выводами, из которых до 22(!) можно использовать как IO
  • наличие внутреннего осциллятора на 16/20 МГц
  • меньшая зависимость работоспособности от конфигурации фьюзов (вечная головная боль AVR)
  • отличная для мелкого контроллера аналоговая часть (ADC/DAC/компараторы с возможностью как внутренней, так и внешней коммутации входов/выходов)
  • однопроводные программирование и отладка
  • крайне низкая цена в рознице (от 0.6€ за 16 кб)

В качестве железной части программатора мы взяли уже имеющийся в наличии преобразователь USB-UART TTL на базе китайского чипа CH340, вот такой:

image

Для программирования достаточно соединить два его вывода RX и TX, так как они уже оснащены выходным резистором на 1.5k, если резистор в Вашей модели преобразователя отсутствует, то его нужно добавить. Объединенный вывод соединяется с ножкой UPDI на программируемом чипе, земля преобразователя должна быть также соединена с землей контроллера. При наличии внешнего питания, нужно обратить внимание лишь на то, соответствует ли оно питанию, которое использует преобразователь (3.3В или 5В). Если есть необходимость, то можно запитать схему с контроллером и от самого преобразователя, что может быть очень удобным для первичного программирования.

image

Внимание! Резистор является опциональным, его нужно допаивать только в случае, если Ваш преобразователь не имеет никаких защитных резисторов на выходе.

Единственная проблема, которая связана с чипом CH340 — он не заработал в моей Линукс-версии программы, так как в протоколе программирования используется бит паритета, а драйвер CH340 в моей версии ядра работает с этим битом неправильно. Возможно, проблема будет устранена в ближайшее время, пока что заниматься этим у меня не хватило терпения.

В результате работы и экспериментов в IDE Code::Blocks была написана и отлажена программа updiprog, исходные коды которой выложены на Гитхабе.

Что было реализовано в данной версии программы:

  • добавлена возможность считывания содержимого флэш-памяти контроллера в hex-файл
  • добавлена возможность считывания состояния всех фьюзов контроллера
  • по возможности добавлены обработки ошибок с соответствующими сообщениями
  • добавлена индикация процесса записи/считывания
  • значительно увеличена скорость работы (около 6 секунд для считывания 16 кб)
  • добавлена поддержка всех микроконтроллеров семейства 1-Series

Исходный размер программы составляет около 25 кб в сравнении с 5 с копейками Мб для скомпилированного исходного скрипта на Питоне.

Надеюсь, что проделанная работа будет кому-то полезна. Буду рад отзывам и предложениям.
Поделиться публикацией
Комментарии 48
    +5
    Политика фирмы… а на оставшихся машинах интернет по карточкам что ли? Даташиты на бумаге?))

    Что касается темы, то ничего выдающегося не увидел. Такие же простенькие микроконтроллеры есть и у ST, и у NXP и про MSP430 забывать не стоит, при этом экосистема значительно лучше и нет такой свистопляски с интерфейсами отладки. Загрузчик кстати тоже в начале везде расположен, вообще странный плюс, раз что это для атмела стало «инновацией»

      0
      Люди вон радуются, что фьюзами уже контроллер убить чуть сложнее, чем раньше (чего он там, научился сам сваливаться на внутренний генератор, если внешнего нет?).

      Ещё лет десять — и там, наверное, даже частоту ядра можно будет в рантайме менять.
        0
        А через 20 лет наверное можно даже будет не ставить атмел студио и работать из любой IDE!
          0
          15 лет назад я писал программку для ATMega (что-то типа курсовика) в блокноте. В те далёкие годы avr-gcc была совсем плохо прикручена к студии…
          0
          Кстати, в этом уже можно
            0
            Мне статья понравилась. Кстати, новый PICkit4 поддерживает UPDI. В microchipdirect он стоит ~48 долларов США. Сейчас ведь и AVR и PICи — все в MPLAB.
              0
              AVR — пока в бета-режиме, насколько я понял
                0
                Бета-режим — это имеет отношение только к IDE MPLAB. Главное, что PICkit4 интерфейс UPDI поддерживает; в спеках к нему заявлено: "...useful for debugging legacy AVR with MPLAB PICkit 4". Единственное, не знаю как у нового PICkit4 дела с подключением к Atmel Studio. Я PICkit4 вообще так-то планировал приобрести — вещь интересная, но мне он только для PICов нужен, да.
                0

                А можно вопрос? PicKit умеет только шить новые AVR или там есть ещё отладка?

                –1
                есть SNAP за 1000 рублей:)
                  0
                  SNAP — это скорее любительский вариант, в то время как автор статьи очевидно занимается коммерческой разработкой электроники. PicKit4 — это профессиональный инструмент разработки; Вы же рекомендуете SNAP, в котором, например, нет поддержки 12-и вольтового UPDI.
                    –1
                    Ну да, ну да… Спасибо, спасибо… UPDI там ест (для 12 вольт можно и транзистор прикрутить)

                    Минус то за что? Я же им не барыжу!?
              0
              xMega уже давно умеет менять частоту.
                +1
                Всё, что с Mega, давно уже сдало рынок кортексам.
                  +1
                  Согласен, меги трогать вообще смысла нет, ни цена, ни возможности не дотягивают до кортексов, а экосистема вообще никуда не годится, за почти два десятка лет так и не смогли написать нормальный компилятор. А вот с мелкими камнями варианты есть, потому и заинтересовался этим малышом.
                    0
                    А что в них интересного (вернее что вас в них привлекло) на фоне аналогичных по цене Cortex-M0/М0+? Мельком пролистал ДШ, очевидных плюсов не заметил, но возможно просто невнимательность моя.
                      0
                      Во-первых, цена. В таком ценовом диапазоне есть только Пики, 8051 от Силабса и Tiny, Кортексов я не могу найти, они начинаются где-то в районе 20% дороже.
                      Во-вторых, количество памяти и ног в отношении к размеру корпуса. Ну а по характеристикам — возможность использования внутреннего DAC в качестве опоры для ADC или компаратора, очень полезная фишка. И возможность вывода сигналов от компаратора на ноги контроллера, такое раньше видел только у некоторых Пиков. Ну и количество обвязки минимально, так что 3 на 3 мм — это реальное занимаемое место на плате. Для нас как раз важны размер и стоимость на партию.
                        +1
                        Во-первых, цена. В таком ценовом диапазоне есть только Пики, 8051 от Силабса и Tiny, Кортексов я не могу найти, они начинаются где-то в районе 20% дороже.

                        Digikey:
                        Attiny1616(QFN-20), 8-bit AVR, 16kB Flash, 2kB SRAM, 20MHz — 0.63$ от 6000 штук, 0.77$(SOIC-20) от 1500 штук.
                        STM32F030F4P6(TSSOP-20), 32-bit Cortex-M0, 16kB Flash, 4kB SRAM, 48MHz — 0.55$ от 2500 штук.
                        Поштучно может и да, Attiny может быть дешевле. Если покупать катушками — то тут уже надо сильно задуматься.
                          0
                          Digikey — очень плохой, негодный индикатор оптовых цен.

                          Во-первых, дорого, во-вторых, у нормальных дистрибьюторов и соотношение цен может быть другим.
                            0
                            Mouser?
                            Attiny1616, 6000 штук — 0.641$
                            STM32F030F4P6, 2500 штук — 0.552$. 0.532$ за 10000 штук.
                              +1
                              Компэл — STM32F030F4P6 от 1110 штук по $0,43 с НДС, доставка послезавтра. Attiny1616 на локальном складе нет, так что с ним сравнить не могу.

                              Производители электроники пользуются более другими, менее публичными дистрибьюторами. Более того, от 10-20 тыс. штук часто уже начинается поставка по контракту «под проект» — и как говорят в таких случаях производители, «наши цены не должны стоять на пути нашего сотрудничества».
                                0
                                Хм, жалко, что для тех, кто не зарегистрирован на Компэле, цены с недавних пор не отображаются :(
                                  +1
                                  Можно на Элитане смотреть, они зеркалят склад Компэла к себе с поставкой 1-2 дня и примерно теми же ценами.

                                  Более того, у них вообще от кого-то локального STM32F030F4P6 сейчас по $0,36 в опте есть.

                                  И при этом ещё есть дисты с локальными складами и вообще без цен в открытом доступе — МТ-Системс, например. Разработчики просто знают, что если тебе нужен, например, Simcom — то это к ним, дешевле всё равно вряд ли где-то будет.
                                    +1
                                    Зарегистрированным тоже не отображаются. Но можно написать своему менеджеру и он присылает КП с ценами и сроками.
                                      +1
                                      У правильно зарегистрированных есть sds.compel.ru
                                        0
                                        Это для снабженцев. Я — разработчик. Но за наводку спасибо! Попробую получить доступ.
                              0
                              А что с корпусом и аналоговой периферией? При всей моей любви к кортексам от того же ST, аналоговая часть у них — просто катастрофа, а уж в этом немаленьком корпусе TSSOP-20 из 20 ног 5 уходит в пустоту — на питание, аналоговое питание и тот самый BOOT0. При всех прочих кортексы от ST в плане размеров всегда проигрывают другим производителям.
                              0
                              RL78 еще есть; тоже иногда вполне себе вариант.
                                –1
                                RL78 сам в себе микроконтроллер, хотя и дешёвый.
                                Очень закрыт. Даже не смотря на документированный загрузчик, они нигде не дают документации на отладочный интерфейс (e-1 эмулятор встроенный по TOOL1, кажется). Только со своим или сеггеровским программатором за тучу денег. (Собственно, как и RX семейство).
                                Так же ХЗ кто там сочиняет для них GCC (лично для меня — это минус). Его даже на офф сайте, как у других производителей, нет. Сначала был у индусов KPIT, а потом у болгар (TOR студио, какая то, которая к встраиваемой технике никаким боком). И тут регистрацию просят.
                                В общем закрыт и проприетарен по самые помидоры. Мне так очень не понравилось.

                                (Хотя в последнее время renesas пытаются e2-studiuo под Linux запилить — может чего и поменяется.
                                  0
                                  Блин! Да что я не так сказал то? Моё мнение же! Никому ничего не навязываю, политического спора не развязываю…
                              +1
                              Специфическая периферия и мелкие корпуса.

                              То же самое, что и с MSP430, какой-нибудь MSP430AFE2xx — это готовый электросчётчик с тремя параллельно работающими АЦП, и заменить его условным кортексом не так-то просто.
                            0
                            ATTiny13 умеет менять частоту.
                            +2
                            Частоту ядра уже лет десять как можно менять в рантайме.
                            –1
                            Роскомикс поди, какой или что-то типа того. Хотя возникает вопрос — а что это товарищи сидят на богомерзком Atmel вместо православных 1887ВЕ4У?
                            –6
                            Краткое содержание статьи: как создать проблемы на ровном месте из-за паранойи и жлобства
                              +2
                              переход к фон-неймановской архитектуре
                              Архитектура осталась гарвардской, просто флэш и EEPROM отображаются в память данных.
                                0
                                Надеюсь, что проделанная работа будет кому-то полезна. Буду рад отзывам и предложениям.

                                Мое предложение: оформите код под Open source лицензией. Рекомендую BSD 2-х пунктов.
                                  +1
                                  Спасибо за предложение, добавил
                                  +3
                                  У Вас в схеме ограничительный резистор включен в цепь RX, а не TX. Это действительно так, а не ошибка? Как тогда осуществляется двунаправленный обмен без замыкания выходов передатчиков друг на друга?
                                    +1
                                    Да, действительно ошибка, сейчас исправлю, спасибо за внимательность!
                                    0
                                    del
                                      0
                                      Спасибо, отличная работа. Серия TinyXX16 действительно очень интресна для применения в компактных устройствах с низким и экстремально низким потреблением(очень экономный RTC и слипы чуть ли не с наноамперным потреблением), у ST ничего подобного нет.
                                      Нельзя ли где-то скачать уже откомпилированную экзешку?
                                        0
                                        Добавил в релиз на гитхабе собранный экзешник
                                          0
                                          Большое спасибо. Очень в жилу пришлось. Нужно шить 816й, а разводить бадягу с Перлом крайне не хотелось.
                                        0
                                        Смотрели ли вы github.com/PitterL/cupdi?
                                          0
                                          Обнаружил как раз перед публикацией проекта. В принципе, очень похожая работа, разве что использует сторонний код для работы с hex и парсинга командной строки.
                                          0
                                          Чуть-чуть не в тему, но поделюсь немножечко своей технологией. У меня есть маленькая демонстрационная платка с FPGA — ice40-hx8k breakout board. FPGA там не очень большая, 8К ячеек. На ней же стоит FTDI. Причем по одному каналу FPGA шьется, а другой разведен на её ноги, и может подключаться к проекту как uart. Т.е. можно не переключая кабеля и шить и общаться с прошивкой через виртуальный СОМ. Ещё одно достоинство — софт. Есть неофициальный проект www.clifford.at/icestorm. Занимает менее 100 мегабайт. Это не квартус и не вивадо не к ночи будь помянута, с их десятками гигов.

                                          Как я этим пользуюсь. Если мне надо разобраться с каким-то микроконтроллером, я курю мануалы по его программированию, после чего просто реализую протокол программирования на верилоге. Управляющую программу пишу на яве. Итого, при трудозатратах 1-3 дня имею совершенно бесплатно программатор. Плюс у той же FPGA остается куча свободных ног, позволяющих как угодно обвязать этот микроконтроллер, разобраться с его интерфейсами и т.п. И всё это на одном разъеме, по одному жгуту. Ни колодок перетыкать ни даже нажимать кнопок. Зашил микроконтроллер и сразу тестируй. Штука исключительная по удобству! Сейчас именно так делаю один проектец на pic18f4550. Возможно расскажу о нем на хабре.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое