Meranie uploadu programu pomocou bootloadera
Úloha
-
Zobrazte priebehy logických signálov ktoré sú využité pri uploade programu do mikrokontroléra
-
Zistite účel a funkciu jednotlivých signálov
-
Analyzujte prenášané data z PC z z MCU počas uploadu programu do MCU
-
Overte prenos času po sériovej linke pomocou osciloskopu.
Teoretický rozbor
Pamäte môžeme rozdeliť na dve veľké skupiny podľa toho čo sa stane s obsahom pamäte po odpojení napájania
-
Volatilné pamäte. Anglický výraz volatile označuje niečo čo je prchavé, miznúce.
Znamená to že po odpojení napájania sa obsah pamäte nezachová a zmizne. Pri opätovnom zapnutí je obsah pamäte
náhodný. Takéto pamäte sa dajú použiť len na dočasné uloženie dát. Teda počas ich spracovania.
Z dôvodu náhodného obsahu pamäte po zapnutí sa takáto pameäť nedá použiť na štart počítačového systému.
-
nevolatilné pamäte. non-volatile Takáto pamäť zachováva svoj obsah aj po vypnutí napájania.
S počiatku to boli ne-elektrické formy ukladania (papier, magnetické médium, optické médium).
Pre stúpajúce nároky na rýchlosť sa nakoniec vymysleli aj rôzne elektrické princípy takýchto pamätí.
Len bol tu jeden problém a to že takéto pamäte sa dali iba čítať.
V podstate každý počítač potrebuje mať k procesoru pripojenú nejakú non-volatilnú pamäť, ktorá pracuje
rovnako rýchle ako CPU. To preto aby procesor hneď od začiatku mohol začať vykonávať nejaký zmysluplný program.
Historicky sa program do mikroradičov (MCU) zapisoval týmito metódami
-
Pamäť ROM - Read Only Memory - pamäť ktorá sa dala uba čítať.
nedala sa programovať. Programovanie sa vykonávalo vo výrobe poslednou operáciou pred zapúzdrením
obvodu. Nevýhodou bola veľmi dlhá doba uvedenia programu do praxe. Trvala aj niekoľko týždňov ba už mesiacov.
Kedy výrobný závod musel pripraviť tzv. masku ktorá bola jednoúčelová pre danú funkciu.
Ak sme potrebovali aby program robil inú činnosť musel výrobný závod pozmeniť výrobný proces
obvodov. Takýto prístup sa dal ekonomicky využiť len vo veľkosériovej výrobe. Ako prvá z vecí
ktoré sa takto realizovali boli kalkulačky
Obrovským problémom bolo opravovanie chýb v programoch ak sa neskôr nejaká v kóde našla.
Oprava mohla byť k dispozícii až o niekoľko mesiacov. Preto sa na opravu chýb často používali
tzv. hack-y Kedy sa našiel postup ako nejakú chybu určitým špecializovaným postupom obísť.
Pre zaujímavosť tu je jeden ktorý zachránil Apollo 14
A k tomu vysvetlujúce video
-
Pamäť PROM Programable Read Only Memmory
- prvá a zo začiatku dosť drahá pamäť ktorá sa dala raz naprogramovať užívateľom. Programovanie sa vykonávalo
špeciálnym zariadením. Obvod bolo teda vybrať zo zariadenia, vložiť do programátora, naprogramovať,
opäť vložiť do zariadenia a modliť sa aby s naprogramovanom obvode nebola chyba. V prípade chyby
sa obvod mohol vyhodiť, kúpiť nový a ten zase raz naprogramovať. Takéto pamäte sa
volajú OTP One Time programming.
Tu je príklad programátora pamätí PROM
Principiálne sa v pamäti nachádzala matica spojov, ktoré boli v určitom mieste zúžené.
ak sme spojom na krátky čas pustili prúd vysokej hodnoty, tak sa spoj v zúženom mieste prepálil.
Preto sa takýmto pamäťovým bunkám hovorilo aj fuse/poistka pretože
to fungovalo ako drôtikové poistky. A procesu programovania sa tiež preto hovorilo pálenie alebo vypalovanie.
Samozrejme nečakajte žiadne dymové efekty. Vodiče mali šírku zopár mikrometrov a boli zaliate v plaste.
-
EPROM Erasable Programmable Read-Only Memory - konečne pamäť ktorá sa dá naprogramovať ale aj
zmazať. Pamäť sa opäť programuje špeciálnym zariadením ktorému hovoríme programátor. Pamäť sa dá ale aj vymazať.
Nejde to však urobiť elektrickou cestou. Pamäť má okienko z kremenného skla ktorým prechádzajú ultrafialové lúče,
ktoré dokážu obsah pamäte vymazať. Pamäť je teda potrebné vybrať zo zariadenia a 5 až 30minút (podľa výrobcu pamätí,
hlavne tie ruskej výroby sa ťažko mazali) ich nechať pod UV výbojkou. Pozor UV žiarenie nie je úplne neškodné
a preto takéto mazačky boli uzatvárateľné aby sa UV žiarenie nedostalo von.
Pamäť tak môžeme použiť aj viackrát, celé kolečko pri vývoji programu trvalo asi tak 30minút.
Kolečkom je myslené preklad programu, vybratie pamäte zo zariadenia, vloženie do mazačky a vymazanie,
vloženie do programátora. Naprogramovanie novým obsahom. Vloženie pamäte do vyvýjaného zariadenia.
-
EEPROM electrically erasable programmable read-only memory. Sláva konečne technológia
ktorá dokázala elektricky naprogramovať ale aj elektricky zmazať obsah pamäte. Spočiatku takéto pamäte mali
veľmi malú kapacitu. Napríklad iba 128 byte. Slúžili na ukladanie nejakých konfiguračných dát. Trebárs západné
autorádiá a TV si tam ukladali naladené stanice aby po výpadku napájania nemusel užívateľ znova ladiť stanice.
Z pohľadu použitia týchto pamätí v počítačoch nevýhodou nebola len žalostne malá kapacita, ale aj dlhá doba
programovania.
-
FLASH - je konečne to pravé orechové. Ako názov hoovorí tieto pamäte sa dajú programovať bleskovo.
(no v porovnaní s EEPROM), na ukladanie videa to spočiatku nebolo dosť rýchle.
Ako prvé sa začali používať práve v mikrokontroléroch, kde ich menšia kapacita a nejaká menšia rýchlosť
nie je na závadu. Obvod už nebolo treba ani vyberať z dosky a pomocou jednoduchého komunikačného rozhrania
sa dal programovať priamo v zariadení. Túto vlastnosť označujeme ako ISP/ in Side Programing.
A nakoniec sa odstránila aj potreba špeciálneho komunikačného obvodu. Časť pamäte sa vyhradila
na program ktorému sa začalo hovoriť Boot Loader. Tento sa na krátko
po zapnutí spustí a testuje či nie je potrebné vykonať aktualizáciu obsahu pamäte programu.
Dá sa k tomu využiť akékoľvek komunikačné rozhranie mikroradiča. Čo bolo zo začiatku sériové rozhranie.
Dnes to môže byť rozhranie USB, ale aj Ethernet, BlueTooth a pod.
Projekt Arduino je práve o tom že využili existujúce lego kocky ktoré boli v tom čase k dispozícii
a dali všetko do jedného integrovaného prostredia a urobili k tomu jednoduchú a lacnú dosku. Plus k tomu urobili
knižnice, tak aby čo najviac zjednodušili potrebné znalosti z IT, tak aby toto prostredie mohol
využívať aj človek ktorý napríklad choval akvarijé rybičky a chcel si urobiť riadenie akvária sám a nekupovať
predražené výrobky od profesionálov.
Bootloader Arduina na komunikáciu používa sériové rozhranie ktoré obsahuje dva signály TxD a RxD.
Pretože je bootloader aktívny iba pár sekund po resete tak je potrebný ešte signál RESET pomocou ktorého si
PC vynúti aby sa aktivoval bootloader. To znamená že okrem napájania musíte mať do dosky pripojené tieto tri signály
TxD, RxD a RESET.
Ďalšou podmienkou aby bootloader mohol fungovať je funkčný oscilačný obvod na presne daenej frevencii. Ak oscilačný obvod bude
z nejakého dôvodu nefunkčný tak nebeží nič teda ani bootloader.
Alebo ak bude kmitať na inej frekvencii ako je 16MHz tak sa cez sériovú linku nedostanú do MCU správne data a boot Loader
nebude vedeť čo sa od neho chce.
Programovanie MCU pomocou bootloadera teda prebieha takto:
- PC vygeneruje signál RESET, ktorý preručí činnosť MCU, nastaví MCU do východiskového stavu a odovzdá riadenie bootloaderu
- Bootloader čaká a sleduje prichádzajúce informácie na sériovej linke. Teda na pine RxD
-
PC musí v tomto čase poslať špeciálnu postupnosť dát, ktorú bootloader vyhodnotí ako žiadosť o nejakú činnosť.
To že žiadosť dostal a prozumel jej potvrdí tak že cez TxD odvysiela späť do PC svoju odpoveď.
-
Akonáhle PC dostane odpoveď od bootloadera, začne posielať príkazy ktoré hovoria čo a kam sa má uložiť do pamäte programu.
Každý balík dát bootloder potvrdí že ho prijal a vykonal uloženie do pamäte programu.
-
Nakoniec sa celá pamäť programu podobným postupom skontroľuje a bootloader sa požiada aby skončil svoju činnosť a
spustil program ktorý sa tam práve nahral. Celá operácia trvá pár sekund a ako vidíte obvod nie je potrebné vôbec vyberať
zo zariadenia.
-
Programovanie (prenos programu do MCU) už nemôže byť jednoduchšie ako to je. Bohužial je stále rovnako málo
ľudí ktorí dokážu programovať (vytvárať program) pre MCU.
Postup
-
Pripojte si hodiny k arduinu v ktorom je vybratý MCU. Treba pripojiť napájanie (GND, +5V) a signály TxD, RxD, RESET
-
Pripojte signály RxD TxD a RESET na logický analyzátor.
-
Nastavte spúšťanie od signálu RESET a to dobežnou hranou.
-
Nastavte úroveň spúšťania do stredu zakázaného pásma logických úrovní
-
Nastavte časovú základňu na rýchlosť akú asi očakávate pri komunikácii na sériovej linke.
-
Nastavte spúšť do režimu Single
-
Aktivujte upload programu v arduino IDE
-
Osciloloskop by sa mal spustiť a zobraziť zachytený priebeh signálov.
-
Ak ste zachytili iba malý kúsok komunikácie zmenšite rýchlosť časovej základne,
opäť aktuvujte spúšť do režimu single a opäť pošlite program z prostredia
Časovanie nastavte tak aby ste zachytili aspoň 1000 prenášaných bytov.
-
Pomocou funkcie Zoom si roztiahnite signál
a zistite aký prvý byte poslal PC do MCU
-
Dalej zistite aký prvý byte poslal v odpovedi MCU naspäť do PC
-
Zistite na akej rýchlosti komunikuje PC s bootloaderom
-
Nastavte si dekodér RS232 prenosu a sledujte aké údaje a kto prenáša
-
Urobte si printscreen zaujímavých zistení do dokumentácie
-
Otestujte aj funkčnosť vášho programu. Program by mal mal každú sekundu poslať
informáciu o čase cez TxD. Zmente preto spúšťanie na dobežnú hranu tohoto signálu.
Režim spúšťania nastavte na Normal.
V arduíno prostredí spostite Monitor sériového portu.
Sledujte či sa zobrazené data na PC a dekodované data na osciloskope zhodujú.
Záver
Otázky na zamyslenie
-