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 с копейками Мб для скомпилированного исходного скрипта на Питоне.

Надеюсь, что проделанная работа будет кому-то полезна. Буду рад отзывам и предложениям.

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


  1. NordicEnergy
    22.10.2018 18:39
    +2

    Политика фирмы… а на оставшихся машинах интернет по карточкам что ли? Даташиты на бумаге?))

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


    1. olartamonov
      22.10.2018 18:52

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

      Ещё лет десять — и там, наверное, даже частоту ядра можно будет в рантайме менять.


      1. NordicEnergy
        22.10.2018 18:54

        А через 20 лет наверное можно даже будет не ставить атмел студио и работать из любой IDE!


        1. esaulenka
          23.10.2018 17:17

          15 лет назад я писал программку для ATMega (что-то типа курсовика) в блокноте. В те далёкие годы avr-gcc была совсем плохо прикручена к студии…


      1. Polaris99 Автор
        22.10.2018 19:43

        Кстати, в этом уже можно


        1. StroboNights
          23.10.2018 10:40

          Мне статья понравилась. Кстати, новый PICkit4 поддерживает UPDI. В microchipdirect он стоит ~48 долларов США. Сейчас ведь и AVR и PICи — все в MPLAB.


          1. Polaris99 Автор
            23.10.2018 10:59

            AVR — пока в бета-режиме, насколько я понял


            1. StroboNights
              23.10.2018 11:16

              Бета-режим — это имеет отношение только к IDE MPLAB. Главное, что PICkit4 интерфейс UPDI поддерживает; в спеках к нему заявлено: "...useful for debugging legacy AVR with MPLAB PICkit 4". Единственное, не знаю как у нового PICkit4 дела с подключением к Atmel Studio. Я PICkit4 вообще так-то планировал приобрести — вещь интересная, но мне он только для PICов нужен, да.


          1. bugdesigner
            23.10.2018 14:36

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


            1. StroboNights
              23.10.2018 21:18

              Например, на сайте Microchip, PicKit4 заявлен в качестве отладчика для упоминаемого в данной статье ATTINY1616 (Development Environment->Emulators & Debuggers).


          1. xztau
            24.10.2018 11:29

            есть SNAP за 1000 рублей:)


            1. StroboNights
              24.10.2018 21:10

              SNAP — это скорее любительский вариант, в то время как автор статьи очевидно занимается коммерческой разработкой электроники. PicKit4 — это профессиональный инструмент разработки; Вы же рекомендуете SNAP, в котором, например, нет поддержки 12-и вольтового UPDI.


              1. xztau
                25.10.2018 07:36
                -1

                Ну да, ну да… Спасибо, спасибо… UPDI там ест (для 12 вольт можно и транзистор прикрутить)

                Минус то за что? Я же им не барыжу!?


      1. acin
        22.10.2018 19:52

        xMega уже давно умеет менять частоту.


        1. olartamonov
          22.10.2018 20:12

          Всё, что с Mega, давно уже сдало рынок кортексам.


        1. Polaris99 Автор
          22.10.2018 21:04

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


          1. NordicEnergy
            22.10.2018 21:09

            А что в них интересного (вернее что вас в них привлекло) на фоне аналогичных по цене Cortex-M0/М0+? Мельком пролистал ДШ, очевидных плюсов не заметил, но возможно просто невнимательность моя.


            1. Polaris99 Автор
              22.10.2018 21:19

              Во-первых, цена. В таком ценовом диапазоне есть только Пики, 8051 от Силабса и Tiny, Кортексов я не могу найти, они начинаются где-то в районе 20% дороже.
              Во-вторых, количество памяти и ног в отношении к размеру корпуса. Ну а по характеристикам — возможность использования внутреннего DAC в качестве опоры для ADC или компаратора, очень полезная фишка. И возможность вывода сигналов от компаратора на ноги контроллера, такое раньше видел только у некоторых Пиков. Ну и количество обвязки минимально, так что 3 на 3 мм — это реальное занимаемое место на плате. Для нас как раз важны размер и стоимость на партию.


              1. Misaka10032
                23.10.2018 09:15
                +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 может быть дешевле. Если покупать катушками — то тут уже надо сильно задуматься.


                1. olartamonov
                  23.10.2018 09:43

                  Digikey — очень плохой, негодный индикатор оптовых цен.

                  Во-первых, дорого, во-вторых, у нормальных дистрибьюторов и соотношение цен может быть другим.


                  1. Misaka10032
                    23.10.2018 09:48

                    Mouser?
                    Attiny1616, 6000 штук — 0.641$
                    STM32F030F4P6, 2500 штук — 0.552$. 0.532$ за 10000 штук.


                    1. olartamonov
                      23.10.2018 09:51
                      +1

                      Компэл — STM32F030F4P6 от 1110 штук по $0,43 с НДС, доставка послезавтра. Attiny1616 на локальном складе нет, так что с ним сравнить не могу.

                      Производители электроники пользуются более другими, менее публичными дистрибьюторами. Более того, от 10-20 тыс. штук часто уже начинается поставка по контракту «под проект» — и как говорят в таких случаях производители, «наши цены не должны стоять на пути нашего сотрудничества».


                      1. Misaka10032
                        23.10.2018 09:52

                        Хм, жалко, что для тех, кто не зарегистрирован на Компэле, цены с недавних пор не отображаются :(


                        1. olartamonov
                          23.10.2018 10:05
                          +1

                          Можно на Элитане смотреть, они зеркалят склад Компэла к себе с поставкой 1-2 дня и примерно теми же ценами.

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

                          И при этом ещё есть дисты с локальными складами и вообще без цен в открытом доступе — МТ-Системс, например. Разработчики просто знают, что если тебе нужен, например, Simcom — то это к ним, дешевле всё равно вряд ли где-то будет.


                        1. synka
                          23.10.2018 10:32
                          +1

                          Зарегистрированным тоже не отображаются. Но можно написать своему менеджеру и он присылает КП с ценами и сроками.


                          1. olartamonov
                            23.10.2018 10:41
                            +1

                            У правильно зарегистрированных есть sds.compel.ru


                            1. synka
                              23.10.2018 13:42

                              Это для снабженцев. Я — разработчик. Но за наводку спасибо! Попробую получить доступ.


                1. Polaris99 Автор
                  23.10.2018 10:17

                  А что с корпусом и аналоговой периферией? При всей моей любви к кортексам от того же ST, аналоговая часть у них — просто катастрофа, а уж в этом немаленьком корпусе TSSOP-20 из 20 ног 5 уходит в пустоту — на питание, аналоговое питание и тот самый BOOT0. При всех прочих кортексы от ST в плане размеров всегда проигрывают другим производителям.


              1. StroboNights
                23.10.2018 10:48

                RL78 еще есть; тоже иногда вполне себе вариант.


                1. xztau
                  24.10.2018 11:42

                  RL78 сам в себе микроконтроллер, хотя и дешёвый.
                  Очень закрыт. Даже не смотря на документированный загрузчик, они нигде не дают документации на отладочный интерфейс (e-1 эмулятор встроенный по TOOL1, кажется). Только со своим или сеггеровским программатором за тучу денег. (Собственно, как и RX семейство).
                  Так же ХЗ кто там сочиняет для них GCC (лично для меня — это минус). Его даже на офф сайте, как у других производителей, нет. Сначала был у индусов KPIT, а потом у болгар (TOR студио, какая то, которая к встраиваемой технике никаким боком). И тут регистрацию просят.
                  В общем закрыт и проприетарен по самые помидоры. Мне так очень не понравилось.

                  (Хотя в последнее время renesas пытаются e2-studiuo под Linux запилить — может чего и поменяется.


            1. olartamonov
              22.10.2018 23:35

              Специфическая периферия и мелкие корпуса.

              То же самое, что и с MSP430, какой-нибудь MSP430AFE2xx — это готовый электросчётчик с тремя параллельно работающими АЦП, и заменить его условным кортексом не так-то просто.


        1. andrey_ssh
          23.10.2018 12:21

          ATTiny13 умеет менять частоту.


      1. andrey_ssh
        23.10.2018 12:18
        +1

        Частоту ядра уже лет десять как можно менять в рантайме.


    1. roboqueer
      22.10.2018 23:37

      Роскомикс поди, какой или что-то типа того. Хотя возникает вопрос — а что это товарищи сидят на богомерзком Atmel вместо православных 1887ВЕ4У?


  1. igrushkin
    22.10.2018 19:10

    Краткое содержание статьи: как создать проблемы на ровном месте из-за паранойи и жлобства


  1. borisxm
    22.10.2018 20:54

    переход к фон-неймановской архитектуре
    Архитектура осталась гарвардской, просто флэш и EEPROM отображаются в память данных.


  1. Shamrel
    23.10.2018 05:53

    Надеюсь, что проделанная работа будет кому-то полезна. Буду рад отзывам и предложениям.

    Мое предложение: оформите код под Open source лицензией. Рекомендую BSD 2-х пунктов.


    1. Polaris99 Автор
      23.10.2018 10:08
      +1

      Спасибо за предложение, добавил


  1. Serge78rus
    23.10.2018 10:09
    +3

    У Вас в схеме ограничительный резистор включен в цепь RX, а не TX. Это действительно так, а не ошибка? Как тогда осуществляется двунаправленный обмен без замыкания выходов передатчиков друг на друга?


    1. Polaris99 Автор
      23.10.2018 10:52
      +1

      Да, действительно ошибка, сейчас исправлю, спасибо за внимательность!


  1. jok40
    23.10.2018 10:50

    del


  1. courser
    23.10.2018 23:36

    Спасибо, отличная работа. Серия TinyXX16 действительно очень интресна для применения в компактных устройствах с низким и экстремально низким потреблением(очень экономный RTC и слипы чуть ли не с наноамперным потреблением), у ST ничего подобного нет.
    Нельзя ли где-то скачать уже откомпилированную экзешку?


    1. Polaris99 Автор
      25.10.2018 00:42

      Добавил в релиз на гитхабе собранный экзешник


  1. Gordon01
    24.10.2018 09:26

    Смотрели ли вы github.com/PitterL/cupdi?


    1. Polaris99 Автор
      24.10.2018 11:00

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


  1. eugenk
    25.10.2018 06:44

    Чуть-чуть не в тему, но поделюсь немножечко своей технологией. У меня есть маленькая демонстрационная платка с FPGA — ice40-hx8k breakout board. FPGA там не очень большая, 8К ячеек. На ней же стоит FTDI. Причем по одному каналу FPGA шьется, а другой разведен на её ноги, и может подключаться к проекту как uart. Т.е. можно не переключая кабеля и шить и общаться с прошивкой через виртуальный СОМ. Ещё одно достоинство — софт. Есть неофициальный проект www.clifford.at/icestorm. Занимает менее 100 мегабайт. Это не квартус и не вивадо не к ночи будь помянута, с их десятками гигов.

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