Levné debuggery pro AVR

english variant - reduced

Ve stručnosti

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.

Obsah

Motivace

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č:

TPI programátor z ATtiny104 Xplained Nano

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.

Odstraněním těchto odporů, odpojíte programátor od cílového čipu


Popisky vývodů napovídají že mEDBG může sloužit nejen jako programátor ale i jako USB/UART bridge a zdroj clocku

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.


Otevřeme si seznam Atmelovských nástrojů


Otevřeme si programovací dialog programátoru na našem kitu


Zde máme k dispozici pouze Attiny104 - to je potřeba napravit


Povolíme zobrazování "nepodporovaných" zařízení


A je hotovo, můžeme programovat dle libosti


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í.

Zablikáme si abychom ověřili že vše pracuje jak má


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
Malé srovnání čipů s TPI rozhraním

Debugger z Atmega328 Xplained Mini

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ě.

Pro možnost přepínání napětí 5V a 3.3V odpájejte propojku R300 a osaďte jumper J300


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ý.

Odpojujeme cílový čip. Místa řezu jsou naznačena červeně.


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ý.

Pro využití debuggeru jako převodníku USB-UART odpojte R108 a R107 a osaďte piny do J104.
16MHz nebo 8MHz clock lze získat z pinu EXT_CLK.


Při využití clocku z debuggeru je vhodné odpojit cílový čip řezem na zadní straně kitu.


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.

Test proběhl úspěšně, nutný clock z debuggeru je vyznačen


Při pokusech dávejte pozor na své křemíkové svěřence


Debugger z Attiny416 Xplained Nano

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.

Odstraňte dobře vyznačené a dokumentované propojky a debugger je na světě


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:

MCUDebuggováníProgramování / Fuses
Attiny212ANOANO
Attiny1614ANOANO
Attiny1616??ANO
Atmega4809NEANO
Attiny824NEANO
Attiny1626NEANO
AVR32DB28NENE

Zdá se tedy že tento improvizovaný debugger si neporadí s čipy AVRxx. Některé Attiny a Atmega zvládne pouze naprogramovat, ale už ne debugovat. A některé Attiny zvládá programovat i debugovat v plném rozsahu. Je to tedy takové polovičaté řešení, se kterým si ale někdo může na dlouho vystačit. Obdobně jde upravit větší "Curiosity" kit a ten zmíněnými problémy netrpí, ale o tom další kapitola.

Připojení debuggeru včetně UARTu


Debugger z Curiosity Nano

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.

Dodatek k ovládání debugu v Atmel studiu

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.

V Project - Properties - Tool vyberte rozhraní a debugger


Debugování zahájíte kliknutím na Debug - Start debugging and break


Není-li DebugWIRE zapnutý (např.první spuštění), zeptá se vás studio zda ho má zapnout


Pokud zapnutí DebugWIRE skončí úspěšně ...


Pokud potřebujete jen ukončit debug, Dejte Stop debugging
Pokud chcete vypnout DebugWIRE a zpřístupnit ISP, dejte Disable DebugWIRE and close


Odkazy

Home
V1.2 2018 (2024 upraven)
By Michal Dudka (m.dudka@seznam.cz)