Tento článek je průvodce po různých oficiálních i polofociálních metodách programování a debugování různých čipů rodiny AVR. Jak těch starých tak i těch nových. K jeho sepsání mě kdysi motivovala potřeba obstarat žákům a studentům debugger za přijatelnou cenu (nejlevnější Atmel-ICE tehdy i dnes stojí přes 2500kč). Text jsem po šesti letech revidoval a pokud se věnujete programování "moderních" AVR, doporučuji skočit rovnou do kapitoly Debugger z Curiosity Nano.
Kapitola o tom jak proměnit kit Atmega328 Xplained Mini na Programátor / debugger s SPI a DebugWIRE rozhraním je sice platná, ale vzhledem k nástupu moderních AVR morálně zastarává. Navíc má tolik omezení, že je na hraně použitelnosti. Kapitola o tom jak z kitu Attiny104 Xnano udělat TPI programátor je také platná ale už asi málokdo sáhne po čipech Attiny s TPI rozhraním, zvlášť když v podstatě za stejnou (velmi nízkou) cenu sežene "moderní" Attiny.
Programátory a debuggery od Atmelu jsou pro bastlíře relativně nákladnou záležitosti. Všehoschopný Atmel-ICE pořídíte okolo 2500kč (verzi bez krytu a kabelu, jen holou DPS). Pro studenta průmyslovky, který si škudlí na osciloskop nebo jiné základní vybavení je to nedosažitelná záležitost. Takže si většina amatérů vystačí s USBASPem, který je při své ceně jednoho nebo dvou dolarů naprosto geniální zařízení. Umožňuje programování všech Atmelu s ISP rozhraním. Neumožňuje žádný debug, není úplně jednoduché programovat "podtaktované" aplikace a chybí podpora UPDI rozhraní (pro moderní AVR). Do nedávna chyběla i podpora TPI rozhraní (pro ty nejmenší a nejlevnější Attiny). Ta je v novém firmwaru zabudovaná, ale ne každý si umí (a může) firmware v čínském klonu přepsat, takže valná většina uživatelů přístup k TPI nemá. Pro přehlednost shrnu základní pojmy o nichž tu bude řeč:
Než se vrhnu na úpravy, ve stručnosti se s kitem seznámíme. Jedna půlka kitu obsahuje cílový čip (Attiny104), druhá polovina tvoří programátor/USB bridge. Jeho cena se pohybuje od 250-300kč s DPH a nabízí ho minimálně Mouser, TME, Farnell. Samotný Attiny104 je rozumně vybavený (USART, 10bit ADC, 16bit timer, 9-11 I/O), ale jeho použití limituje RAM 32B. Což je ale prvek který sdílí se většinou Attiny o kterých bude teď řeč. Zajímavější je samotný programátor. Ten totiž funguje i jako USB-UART převodník a případný zdroj clocku. Příjemný je také fakt, že veškerou výrobní dokumentaci lze stáhnout.
Samotná úprava kitu je triviální. Mrkněme do schematu na rezistory R200,R202 a R204. Ty propojují TPI rozhraní mezi programátorem a cílovým čipem. Odpory R201 a R203 pak propojují UART. R100 potom propojuje napájení programátoru s cílovým čipem. Pokud cílový čip k ničemu nepotřebujete, doporučuji odstranit všechny tyto odpory. To bychom měli z krku hardwarové úpravy a teď přijde kouzlo (které jsem se dočetl na webu Jay Carlson). Připojte kit k Atmel studiu a klikněte View->Available Atmel Tools. Otevře se vám okno se seznamem připojených programátorů. Najdete v něm mEDBG, klikněte na něj pravým tlačítkem a dejte Device Programming. V roletce Device máte na výběr jen jedno zařízení - Attiny104. Zdálo by se tedy že programátor jiné čipy nepodporuje. Teď klikněte na symbol "ozubeného kola" (Options) a dostanete se k nastavení programátoru. Vyberte Tools->Tool Settings a položku Hide Unsupported devices změňte na False. Tím si odkryjete možnost výběru dalších čipů. Poté celé okno programátoru zavřete a otevřete znovu. Měli by jste teď mít na výběr další čipy.
Abych demonstroval, že programátor pracuje, sestavil jsem miniaturní prográmek pro blikání LEDkou s Attiny10. Programování proběhlo úspěšně. Upozorním jen na fakt, že programátor běží na 5V a obecně čipy Attiny4,5,9,10 lze legálně programovat pouze při napětí 5V (i když sami běží až do 1.8V a možná i níž...). Pro zajímavost uvádím malou srovnací tabulku Atmelů s TPI rozhraním, ať si můžete udělat představu zda se vám shánění a úprava kitu vyplatí.
Název | Cena | použitelných pinů / všech pinů |
časovače | ADC | Komparátor | Reference | Spotřeba 1MHz (5V/3.3V) [mA] |
Spotřeba 128kHz (5V/3.3V) [uA] |
Flash | RAM |
---|---|---|---|---|---|---|---|---|---|---|
Attiny4 | 10,- | 3/6 | 1x16bit | - | Ano | - | 0.6 / 0.32 | 85 / 45 | 0.5k | 32 |
Attiny5 | 9,- | 3/6 | 1x16bit | 8bit | Ano | Vcc | 0.6 / 0.32 | 85 / 45 | 0.5k | 32 |
Attiny9 | 12,- | 3/6 | 1x16bit | - | Ano | - | 0.6 / 0.32 | 85 / 45 | 1k | 32 |
Attiny10 | 9,- | 3/6 | 1x16bit | 8bit | Ano | Vcc | 0.6 / 0.32 | 85 / 45 | 1k | 32 |
Attiny20 | 11,- | 11/14 | 1x8bit, 1x16bit |
10bit | Ano | Vcc,1.1V | 0.68 / 0.36 | 85 / 45 | 2k | 128 |
Attiny102 | 16,- | 5/8 | 1x16bit | 10bit | Ano | Vcc, 1.1V, 2.2V, 4.3V |
0.7 / 0.38 | 90 / 49 | 1k | 32 |
Attiny104 | 19,- | 11/14 | 1x16bit | 10bit | Ano | Vcc, 1.1V, 2.2V, 4.3V |
0.7 / 0.38 | 90 / 49 | 1k | 32 |
Než začneme, upozorním vás, že použití Xplained kitu jako debuggeru má svá rizika a omezení, nechcete-li posílat své čipy do křemíkového nebe, věnujte pozornost červeně zvýrazněným frázím. Jako v předchozí kapitole se nejprve seznámíme s upravovaným kitem. Mrkneme se na schéma napájení, protože to vás při jeho použití jako debuggeru bude zajímat. Podívejte se v dokumentaci na obrázek Figure 4-2. Power Supply Block Diagram. Bez úprav deska přivádí na cílový čip 5V z USB. Programátor/Debugger (Atmega32U4) běží tedy také na 5V. Abychom mohli využít 3.3V regulátor na desce, musíme odstranit propojku R300 a osadit jumper J300 (viz foto). Jumperem je pak možné přepínat mezi 5V a 3.3V napájením. Pokud budete vyjmečně potřebovat jiná napětí, můžete odpájet R301 a osadit jumper J301 a vaše nestandardní napětí přivést na pin VIN. Nemám ale představu zda bude debugger například s 2.5V napájecím napětím pracovat správně.
Ve schematu kitu si můžeme prohlédnout že ISP rozhraní je přivedeno z programátoru na cílový čip a na ISP konektor v dolní části desky. Stačí tedy odpojit cílový čip (Atmega328P). Nejlepší by bylo jej odpájet horkovzdušnou pistolí, ta ale nebude v běžné výbavě bastlíře, takže čip odpojíme čtyřmi přesnými řezy. Prostor pro přetnutí linek MISO,MOSI a SCK je velmi malý a řez musí být proveden mezi čipem a prokovem (viz foto). Pokud by jste cestičku přetnuli až za prokovem (směrem od megy328), odřízli by jste si i ISP konektor (nebyla by to ale taková katastrofa, neboť MOSI, MISO a SCK jsou vyvedeny ještě na PB3,4,5 na boku desky). Přetnutí RESET linky (u ISP konektoru) je jednodušší. Celou operaci komplikuje modrý lak. Ten je nanesen v tlusté vrstvě, je hodně odolný a není přes něj dobře vidět kde se cestičky přesně nachází. Doporučuji vám tedy lak z okolí inkriminovaných míst odškrábat až na holou měď. Budete pak mít lepší kontrolu kde řežete a zda byl řez úspěšný.
Další potenciálně zajímavou úpravou může být odpájení propojek R107 a R108 (viz foto). Debugger, stejně jako na kitu v předchozí kapitole, má funkci USB-UART bridge, takže jej můžete využívat ke komunikaci s PC. Odpojením zmíněných propojek jej odpojíte od cílového čipu. K UARTu pak budete mít přístup skrze jumper J104, jehož oba vývody jsou označené popisky (RX a TX). Debugger generuje cílovému čipu clock (16MHz při 5V napájení a 8MHz při 3.3V) který je k debugování nutný bohužel nutný.
Po hardwarových úpravách je potřeba vysvětlit Atmel studiu, že debugger chceme používat k programování jiných čipů než jen Megy328. Jak na to jsem popsal v předchozí kapitole. Do teď všechno vypadalo slibně a nadějně. Teď rozeberu vcelku tvrdá omezení, které na vaši aplikaci improvizovaný debugger klade. Pokud budete kit používat výhradně jako programátor (tedy nepoužijete DebugWIRE), dávejte pozor při nastavování fuses. Kit má zamčené volby clocku jiné než "externí clock" a ostatní kombinace musíte zadat pomocí hexahodnot (zjištěných třeba z AVR engbedded fuse calculatoru). Mějte to na paměti, neboť je to snadné přelédnout. Pokud chcete kit používat jako debugger (od toho tu jste) tak vězte, že spuštění DebugWIRE je možné jen s clockem přivedeným z debuggeru. S externím clockem přivdeným odjinud to nejde. Jakýkoli pokus zapnout DebugWIRE vždy vyústí k přepnutí fuses na externí clock (lze řešit skriptem v Pythonu, který rekonfiguruje mEDBG). Jakmile je DebugWIRE zapnutý, můžeme už externí clock přivést odjinud a může být i nižší než clock z debuggeru. Taková varianta se nabízí v situaci kdy chceme debugovat aplikaci která ve finále poběží třeba na 1MHz. Scénáře v jakých lze debugger použít raději ještě stručně shrnu v několika bodech.
Tyto podmínky jsou hodně limitující ale náš "hack" bych kvůli tomu nezatracoval. Prakticky vzato musíte připojit jen jeden pin navíc (clock na XTAL1) a to není až tak veliká daň za možnost debugu. Díky tomu, že je clock možné připojit i do aplikací s krystalovým oscilátorem, můžete debugovat většinu arduino modulů. Jak na to si můžete prohlédnout v dalším tutoriálu.
Nejlevnější cesta jak získat použitelný debugger pro některé čipy řady AVRtiny 1-series a 0-series (prostě pro "moderní" Attiny) vede skrze kit Attiny416 Xplained Nano. K přeměně na debugger ho není potřeba nijak hackovat, stačí odpájet čtveřici dobře vyznačených propojek (technicky vzato stačí jen jednu) a v Atmel studiu přepnout Hide Unsupported devices (jak na to jsme rozebrali kapitole o TPI). Stejně jako všechny předchozí kity i tento zastane roli USB-UART převodníku. Triviální úpravu kitu si můžete prohlédnout na následující fotografii.
Připojení k cílovému čipu je třídrátové (VCC, UPDI, GND), rozmístění vývodů je v datasheetu ve Figure 1-1. Napájení můžete odebírat z debuggeru. Pokud přivedete vlastní 5V napájení odjinud, nepřipojujte jej k programátoru (pak stačí dvojdrátové připojení). Test spojení jsem provedl na triviálním příkladu kdy z Tiny1616 (v pouzdře SOP20) posílám UARTem "hello world" do PC. A debug i USB-UART převodník pracovaly správně a zároveň. Ilustrační foto níže. Zdrojový kód jen pro zajímavost: zdrojak.c
Takhle vytvořený debugger, ale neumí debugovat všechny AVRka s UPDI rozhraním. Udělal jsem krátký test které čipy zvládne debuggovat a které čipy zvládne "naprogramovat" (zapsat program do flash, spravovat fuses) a shrnul do následující tabulky:
MCU | Debuggování | Programování / Fuses |
Attiny212 | ANO | ANO |
Attiny1614 | ANO | ANO |
Attiny1616 | ?? | ANO |
Atmega4809 | NE | ANO |
Attiny824 | NE | ANO |
Attiny1626 | NE | ANO |
AVR32DB28 | NE | NE |
Vývojové kity Curiosity Nano jsou vybaveny plnohodnotným debuggerem a navrženy tak aby bylo možné debugger používat samostatně. Bohužel jsou trochu dražší než Xplained. Kus vyjde na necelých 700kč (rok 2023). Těm jsem věnoval samostaný článek.
Obecně o možnostech debugu se můžete dočíst ve dvou dílech turoiálu (1. a 2.). Pro potřeby toho článku uvedu obrázkový postup jak spouštět a vypínat debug a DebugWIRE.
Home
V1.2 2018 (2024 upraven)
By Michal Dudka (m.dudka@seznam.cz)