Jenom rychlý příspěvek o tom, jak programovat mikrokontroléry přes rozhraní UPDI.

Nevíte co je UPDI? Jde o nový standard, Unified Program and Debug Interface, který před pár lety představil Atmel. Používá se k programování některých novějších ATMega a ATtiny mikrokontrolerů. Jako člověku, který se programovacími rozhraními moc do hloubky nezabývá a “jen je používá”, mi to přijde trochu jako příklad xkcd 927.

Vzhledem k tomu, že jde o poměrně novou záležitost, je informací o používání řádově méně než třeba o ISP. Existuje několik možností, jak přes UPDI nahrávat. Některé jsou zastaralé, některé se nedají moc dobře použít, ale ucelený souhrn jsem nikde nenašel. Tak jenom v rychlosti:

  • jtag2updi
    • Projekt se už několik let nevyvíjí. Teoreticky jde o decentní nápad, udělat programátor z Arduina ve stylu ArduinoISP. Používá k tomu emulaci JTAG rozhraní, aby šlo využít už existující procesy v avrdude.
    • Bohužel není kompatibilní jednak s novými verzemi avrdude, druhak s těmi nejpopulárnějšími Arduiny. Původní verze totiž nefunguje na ATMega32U4, který používá mj. Leonardo a známé Pro Micro klony. Fork, který přidává podporu pro tenhle kontroler, je ještě mrtvější a pozadu za původní verzí.
    • Nic s 328P nebo jiným kompatibilním čipem momentálně nemám, takže původní verzi jsem nemohl otestovat. S forkem se mi komunikaci přes UPDI zprovoznit nepodařilo.
    • Další fork, údajně o něco vylepšený a podporující 32U4, už jsem nezkoušel. Narazil jsem na něj až potom, co jsem objevil pymcuprog, a navíc je už taky mrtvý.
    • Pokud byste z nějakého důvodu jtag2updi chtěli použít, budete potřebovat jednak 4,7 kΩ rezistor na datové lince mezi programátorem a cílem, druhak musíte zabránit resetování Arduina. Většinou je na to potřeba 120 Ω rezistor nebo 10 μF kondenzátor mezi 5 V linkou a zemí, detaily viz dokumentace projektu a Arduino.
  • pyupdi
    • Zastaralý projekt, sloučený do pymcuprog. Pokud už ho nepoužíváte, tak s ním nezačínejte.
  • pymcuprog
    • Náhrada pyupdi. Umožňuje použití některých oficiálních programátorů, ale hlavně má stejně jako předchozí pyupdi možnost SerialUPDI. To znamená, že můžete pro UPDI použít libovolný sériový port, klidně i z USB převodníku.
    • K základnímu propojení většinou stačí 1 kΩ rezistor na TX pinu, za kterým spojíte TX a RX.

Pokud byste si chtěli počíst více detailů k UPDI a propojování přes sériový adaptér, Spence Konde (autor megaTinyCore a dalších projektů) se hezky rozepsal tady.

Tak hodně štěstí s programováním!