eské vysoké u£ení technické v Praze Fakulta elektrotechnická Katedra po£íta£·
Bakalá°ská práce
Komunikace mikrokontroléru s PC
Filip Michl
Vedoucí práce:
Ing. Teplý Tomá²
Studijní program: Elektrotechnika a informatika, strukturovaný, Bakalá°ský
Obor: Výpo£etní technika
27. kv¥tna 2010
iv
v
Pod¥kování Na tomto míst¥ bych rád pod¥koval vedoucímu práce Ing. Tomá²i Teplému za podn¥tné p°ípomínky a paní Mgr. Lence Doleºalové za jazykovou korekturu.
vi
vii
Prohlá²ení Prohla²uji, ºe jsem práci vypracoval samostatn¥ a pouºil jsem pouze podklady uvedené v p°iloºeném seznamu. Nemám závaºný d·vod proti uºití tohoto ²kolního díla ve smyslu 60 Zákona £. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zm¥n¥ n¥kterých zákon· (autorský zákon).
V Praze dne 27. 5. 2010
.............................................................
viii
Abstract This bachelor thesis summarizes possibilities of microcontroller-PC communication using USB or Ethernet interface. The second goal of this work is design and implementation of fully functional bootloader for Microchip PIC family PIC18F MCU's. This bootloader should support programming, erasing, reading and verication of ash memory and EEPROM memory in connected device.
Abstrakt Tato práce si klade za cíl shrnout moºnosti komunikace mikrokontroléru Microchip PIC s PC pomocí rozhraní USB a Ethernet. Druhým cílem této práce je navrhnout a realizovat pln¥ funk£ní bootloader pro mikrokontroléry Microchip PIC rodiny PIC18F. Tento bootloader by m¥l podporovat programování, mazání, vy£tení a verikaci pam¥ti ash i pam¥ti EEPROM p°ipojeného za°ízení.
ix
x
Obsah 1 Úvod
1
2 Popis rozhraní USB
2.1 Fyzická vrstva USB . . . . . . . . . . . 2.2 Architektura USB . . . . . . . . . . . 2.3 Struktura rámce . . . . . . . . . . . . 2.3.1 Struktura paket· . . . . . . . . 2.3.1.1 Tokenový paket . . . 2.3.1.2 Datový paket . . . . . 2.3.1.3 Handshake paket . . . 2.3.1.4 Start of Frame paket . 2.4 Typy datových tok· . . . . . . . . . . 2.5 Deskriptory . . . . . . . . . . . . . . . 2.6 Enumerace . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
3
3 3 4 5 5 6 6 6 6 7 9
3 Popis rozhraní Ethernet
11
4 Komunikace prost°ednictvím USB
13
5 Komunikace prost°ednictvím Ethernetu
17
6 Analýza implementované aplikace
19
3.1 Fyzická vrstva rozhraní Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Adresování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3 Struktura rámce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.1 Popis USB modulu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.1 Mikrokontroléry Microchip PIC s podporou ethernetu . . . . . . . . . . . . . 17 5.2 Dodate£né obvody pro ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.3 Moduly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 6.1 6.2 6.3 6.4
Výb¥r aplikace a komunika£ního rozhraní Poºadavky na bootloader . . . . . . . . . Poºadavky na vývojovou desku . . . . . . Pouºité technologie a vývojová prost°edí . 6.4.1 Firmware . . . . . . . . . . . . . . 6.4.2 Vývojová deska . . . . . . . . . . . 6.4.3 Klient . . . . . . . . . . . . . . . . xi
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
19 20 20 20 20 21 22
xii
OBSAH
7 Návrh aplikace 7.1 7.2 7.3 7.4
Princip £innosti z pohledu uºivatele . . . . . . . Rozvrºení pam¥ti . . . . . . . . . . . . . . . . . Poºadavky na uºivatelskou aplikaci . . . . . . . Popis komunikace . . . . . . . . . . . . . . . . . 7.4.1 Struktura p°íkazu Info . . . . . . . . . . 7.4.2 Struktura odpov¥di Info . . . . . . . . . 7.4.3 Struktura p°íkazu Program Flash . . . . 7.4.4 Struktura odpov¥di Program Flash . . . 7.4.5 Struktura p°íkazu Program EEPROM . 7.4.6 Struktura odpov¥di Program EEPROM 7.4.7 Struktura p°íkazu Read Flash . . . . . . 7.4.8 Struktura odpov¥di Read Flash . . . . . 7.4.9 Struktura p°íkazu Read EEPROM . . . 7.4.10 Struktura odpov¥di Read EEPROM . . 7.4.11 Struktura p°íkazu Erase Flash . . . . . . 7.4.12 Struktura odpov¥di Erase Flash . . . . .
8 Realizace
8.1 Firmware . . . . . . . . . . . . . 8.1.1 soubor main.c . . . . . . . 8.1.2 soubor usb_descriptors.c 8.1.3 soubor HardwareProle.h 8.1.4 soubor pic18f4550.lkr . . . 8.2 Klient . . . . . . . . . . . . . . . 8.2.1 t°ída Memory . . . . . . . 8.2.2 t°ída Communication . . . 8.2.3 t°ída HIDInterface . . . . 8.2.4 t°ída QtClient . . . . . . . 8.2.5 t°ída Viewer . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
25
25 25 26 27 27 28 28 29 29 30 30 30 31 31 32 32
33
33 33 33 33 34 34 34 34 34 34 34
9 Záv¥r
35
Literatura
37
A Instala£ní p°íru£ka
41
A.1 Instalace rmwaru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 A.2 Instalace klienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
B Uºivatelská p°íru£ka B.1 B.2 B.3 B.4 B.5
Tla£ítko Naprogramovat za°ízení . Tla£ítko Vymazat za°ízení . . . . . Tla£ítko Vy£íst ash pam¥´ . . . . Tla£ítko Vy£íst EEPROM pam¥´ . Tla£ítko Vy£íst za°ízení do souboru
C Seznam pouºitých zkratek
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
43
44 44 44 45 45
47
OBSAH
D Obsah p°iloºeného CD
xiii
49
xiv
OBSAH
Seznam obrázk· 2.1 USB konektor typu A a typu B (P°evzato z [1]) . . . . . . . . . . . . . . . . . 2.2 Architektura USB (P°evzato z [1]) . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Hierarchie deskriptor· (P°evzato z [7]) . . . . . . . . . . . . . . . . . . . . . .
4 5 7
3.1 Nezapojený konektor 8P8C (P°evzato z [30]) . . . . . . . . . . . . . . . . . . 12 4.1 Schéma p°eru²ovací logiky USB modulu (P°evzato z [7] . . . . . . . . . . . . . 15 5.1 Modul SPINET (p°evzato z [25]) . . . . . . . . . . . . . . . . . . . . . . . . . 18 6.1 6.2 6.3 6.4
Vývojové prost°edí MPLAB IDE 8.40 . . . . . . . . . . . . . . . . . Osazení vývojové desky . . . . . . . . . . . . . . . . . . . . . . . . . Vývojové prost°edí Microsoft Visual Studio 2008 Professional Edition Nástroj Qt Designer . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
21 22 23 24
7.1 Rozvrºení ash pam¥ti u mikrokontroléru PIC18F4550 . . . . . . . . . . . . . 26 B.1 Hlavní okno aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 B.2 Prohlíºe£ pam¥ti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
xv
xvi
SEZNAM OBRÁZK
Seznam tabulek 2.1 2.2 2.3 2.4
Struktura tokenového paketu . . Struktura datového paketu . . . . Struktura handshake paketu . . . Struktura Start of Frame paketu
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
6 6 6 7
3.1 Struktura ethernetového rámce . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.1 8-mi bitové mikrokontroléry Microchip PIC s integrovanou podporou rozhraní ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12
Struktura p°íkazu Info . . . . . . . . . . Struktura odpov¥di Info . . . . . . . . . Struktura p°íkazu Program Flash . . . . Struktura odpov¥di Program Flash . . . Struktura p°íkazu Program EEPROM . Struktura odpov¥di Program EEPROM Struktura p°íkazu Read Flash . . . . . . Struktura odpov¥di Read Flash . . . . . Struktura p°íkazu Read EEPROM . . . Struktura odpov¥di Read EEPROM . . Struktura p°íkazu Erase Flash . . . . . . Struktura odpov¥di Erase Flash . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
27 28 28 29 29 30 30 31 31 31 32 32
A.1 Mikrokontroléry kompatibilní s tímto bootloaderem . . . . . . . . . . . . . . . 41
xvii
xviii
SEZNAM TABULEK
Kapitola 1
Úvod V dne²ní dob¥ se od jednoduchých a snadno implementovatelných komunika£ních rozhraní (nap°. RS232, Centronics) u osobních po£íta£· upou²tí. Jsou nahrazovány nov¥j²ími, rychlej²ími a sotiskovan¥j²ími rozhraními. Pokud tedy chceme mít moºnost p°ipojit za°ízení zaloºené na mikrokotroléru Microchip PIC k PC, musíme pouºít n¥které z moderních rozhraní. Tato práce si klade za cíl shrnout moºnosti p°ipojení a komunikace mikrokontroléru Microchip PIC s PC pomocí dvou nejvíce roz²í°ených rozhraní u PC, tedy USB a ethernet. V první £ásti této práce jsou popsány vlastnosti a principy jednotlivých rozhraní. Tyto znalosti jsou nezbytné pro pochopení principu £innosti daných rozhraní a pro jejich následné správné pouºití. Pro p°ipojení za°ízení k PC pomocí daného rozhraní nemáme pouze jednu moºnost. T¥chto moºností je více a jejich shrnutím a nastín¥ním jejich pouºítí se zaobírá druhá £ást tohoto dokumentu. Tato práce se dále zaobírá realizací USB bootloaderu pro mikrokontroléry Microchip PIC rodiny PIC18F a tomuto je v¥nována poslední £ást v tomto dokumentu. Je zde popsán výb¥r implementované aplikace, zd·vodn¥n výb¥r pouºitého rozhraní a vypsány jednotlivé poºadavky kladené na výslednou aplikaci. Následuje výpis pouºitých technologií a vývojových prost°edk· v£etn¥ popisu vývojové desky pouºité pro vývoj a testování této aplikace. Dále se v této £ásti nachází popis navrºené aplikace a základních princip·, na kterých celá aplikace funguje. V záv¥ru této £ásti je pak stru£ný popis samotné realizace jak u £ásti aplikace pro mikrokontrolér tak u £ásti pro PC.
1
2
KAPITOLA 1.
ÚVOD
Kapitola 2
Popis rozhraní USB USB (Universal Serial Bus) je univerzální sériová sb¥rnice, která vznikla v roce 1995 za spolupráce rem Compaq, Hewlett-Packard, Intel, Lucent, NEC, Microsoft a Philips. USB vzniklo za ú£elem nahrazení starého a jiº nevyhovujícího sériového rozhraní RS232. Tato sb¥rnice ov²em p°inesla n¥kolik d·leºitých novinek oproti zastaralé RS232, a to nap°. podporu Plug and Play, moºnost nápájení koncového za°ízení p°ímo z USB portu a v neposlední °ad¥ moºnost p°ipojení více za°ízení na jeden USB °adi£. V dne²ní dob¥ se toto rozhraní vyskytuje nejenom u PC, ale také u PDA, mobilních telefon·, televizor·, multimediálních p°ehráva£· a dal²ích za°ízení. První více roz²í°ená verze USB v 1.1 umoº¬ovala dv¥ rychlosti p°ipojení. Reºim LowSpeed s p°enosovou rychlostí 1,5Mb/s a reºim Full-Speed s p°enosovou rychlostí 12Mb/s. Tyto rychlosti v²ak nebyly konkurenceschopné ve srovnání s rozhraním FireWire [14]. Proto v roce 2000 p°i²la verze 2.0, která p°inesla reºim Hi-Speed s p°enosovou rychlostí 480Mb/s. V roce 2008 vy²la specikace zatím nejnov¥j²í verze USB 3.0, která by v reºimu Super-Speed m¥la umoºnit p°enosové rychlosti aº 5Gb/s.
2.1 Fyzická vrstva USB USB je symetrické poloduplexní rozhraní jehoº kabely se skládají ze £ty° vodi£·. Jedná se o vodi£ se stejnosm¥rným nap¥tím +5V, zemnící vodi£ a dva datové vodi£e pro symetrický p°enos dat. Délka jednoho kabelu m·ºe podle normy dosahovat aº p¥ti metr·. Kabel je zakon£en standartizovanými konektory, p°i£emº norma denuje dva základní konektory - typ A a typ B. Konektor typu A je ur£en pro p°ipojení do hostitelského za°ízení, tedy nej£ast¥ji PC. Konektor typu B je ur£en pro koncová za°ízení. Krom¥ t¥chto základních konektor· existují je²t¥ dal²í verze (nap°. miniusb, microusb), které jsou ur£ené p°edev²ím pro malá kompaktní za°ízení.
2.2 Architektura USB USB pouºívá víceúrov¬ovou stromovou strukturu, p°i£emº ko°enem tohoto stromu je ko°enový rozbo£ova£ na hostitelském za°ízení (nej£ast¥ji PC). USB za°ízení se pak d¥lí do dvou 3
4
KAPITOLA 2.
POPIS ROZHRANÍ USB
Obrázek 2.1: USB konektor typu A a typu B (P°evzato z [1])
skupin. Za°ízení je bu¤to rozbo£ova£, anebo koncové za°ízení, jeº je v USB terminologii nazýváno funkce. Podle konkrétního stromu zapojení m·ºeme rozd¥lit v²echna p°ipojená za°ízení do jednotlivých vrstev, p°i£emº za°ízení v jedné vrstv¥ se dají poznat podle toho, ºe jejich hloubka ve stromu je stejná. Jednotlivé rozbo£ova£e a funkce jsou pak mezi sebou propojeny, a to tak, ºe kaºdý rozbo£ova£ (krom¥ ko°enového) a kaºdá funkce je p°ipojena k nad°azenému rozbo£ova£i, který je o vrstvu vý²e neº dané za°ízení. Rozbo£ova£e jsou pak navíc p°ipojeny k jiným rozbo£ova£·m nebo funkcím z niº²ích vrstev. Specikace USB 2.0 umoº¬uje, aby t¥chto vrstev bylo aº 7, p°i£emº v poslední vrstv¥ jiº nesmí být ºádný rozbo£ova£, tudíº za sebou m·ºe být zapojeno maximáln¥ 5 rozbo£ova£·. Dal²í omezení USB sb¥rnice spo£ívá v moºnosti zapojit na jeden ko°enový rozbo£ova£ maximáln¥ 127 za°ízení. Kaºdé koncové za°ízení má nenulový po£et endpoint·, coº jsou v podstat¥ datové roury. Jedno za°ízení m·ºe obsahovat aº 16 endpoint·, jejichº prost°ednictvím dochází p°ímo k p°enosu dat.
2.3 Struktura rámce Ve²kerý provoz na sb¥rnici je °ízen ze strany hostitele (PC). V reºimech Low-Speed a FullSpeed se p°ená²ejí data pomocí rámc·, které trvají p°esn¥ 1 milisekundu. V reºimu Hi-Speed se data p°ená²í v tzv. mikrorámcích, které trvají 125 mikrosekund. Do (mikro)rámc· se pak za°azují pakety.
2.3.
STRUKTURA RÁMCE
5
Obrázek 2.2: Architektura USB (P°evzato z [1])
2.3.1 Struktura paket· V²echny typy paket· mají ur£itá datová pole stejná, a proto uvedu jejich vysv¥tlení uº zde. • Sync - slouºí k synchronizaci hodin vysílací a p°ijímací strany. Pro reºim Low-Speed
a Full-Speed má velikost 8 bit·, pro Hi-Speed má velikost 32 bit·. Poslední dva bity ur£ují, kde za£íná datové pole PID.
• PID (Packet ID) - osm bit· dlouhé datové pole ozna£ující typ paketu. • CRC (Cyclic Redundancy Check) - datové pole obsahující kontrolní sou£et. V token-
ových a Start of Frame paketech má toto pole délku 5 bit·, v datových paketech pak 16 bit·.
• EOP (End of Packet) - pole ozna£ující konec paketu.
2.3.1.1 Tokenový paket Je první paket, který v dané komunikaci vystupuje. Je vºdy vysílán od hostitele a obsahuje p°edev²ím informaci o sm¥ru p°enosu dat.
6
KAPITOLA 2.
POPIS ROZHRANÍ USB
Sync PID ADDR ENDP CRC EOP Tabulka 2.1: Struktura tokenového paketu • ADDR - 7 bit· dlouhé datové pole, které ur£uje adresu cílového za°ízení na sb¥rnici.
Délka 7 bit· umoº¬uje pouºít aº 128 r·zných adres, nultá adresa se v²ak nedá pouºít pro adresování koncového za°ízení, protoºe je vyhrazena pro adresaci za°ízení, jemuº je²t¥ nebyla p°i°azena vlastní adresa. Z tohoto plyne omezení 127 za°ízení na jednoho hostitele.
• ENDP -datové pole o délce 4 bity ozna£ující £íslo endpointu. Umoº¬uje adresovat vý²e
zmín¥ných 16 endpoint·.
2.3.1.2 Datový paket P°ená²í samotná data, a to aº 1024 byt· dat. Tento paket m·ºe být vysílán jak ve sm¥ru od hostitele, tak ve sm¥ru k hostiteli, a to v závislosti na p°edchozím tokenovém paketu.
Sync PID Data CRC EOP Tabulka 2.2: Struktura datového paketu
2.3.1.3 Handshake paket Je paket, který potvrzuje doru£ení dat. Tento paket je vºdy odesílán tou stranou, která p°ijímala data v datovém paketu. Pole PID m·ºe v handshake paketu nabývat r·zných hodnot podle toho, zda data byla £i nebyla doru£ena.
Sync PID EOP Tabulka 2.3: Struktura handshake paketu
2.3.1.4 Start of Frame paket Tento paket slouºí k ur£ení za£átku nového rámce. • íslo rámce - 11-ti bitová hodnota
2.4 Typy datových tok· Logické spojení mezi hostitelem a endpointem se nazývá roura, p°i£emº kaºdá roura m·ºe pouºívat jiný ze £ty° zp·sob· p°enos· dat (transfer·).
2.5.
7
DESKRIPTORY
Sync PID íslo rámce CRC EOP Tabulka 2.4: Struktura Start of Frame paketu • Control transfery - kontrolní p°enosy slouºí ke konguraci p°ipojených za°ízení a mohou
být pouºity i k dal²ím ú£el·m (nap°. °ízení dal²ích komunika£ních rour).
• Interrupt transfery - p°eru²ovací p°enosy slouºí k v£asnému a spolehlivému doru£ení
men²ího mnoºství dat, zpravidla po asynchronní události. Typickým zástupcem p°eru²ovacích p°enos· je stisk klávesy na klávesnici nebo pohyb my²i.
• Izochronní transfery - izochronní p°enosy jsou trvalé p°enosy, u nichº je p°edem dohod-
nutá ²í°ka pásma a zpoºd¥ní. Je nutné, aby p°i p°enosu t¥chto dat p°es rozbo£ova£e byla dodrºena frekvence p°enosu dat a také aby bylo co nejniº²í zpoºd¥ní. Typickým zástupcem izochronní p°enos· by byl nap°íklad p°enos zvuku z mikrofonu do PC p°i audiokonferencích.
• Bulk transfery - slouºí k p°enosu v¥t²ího mnoºství dat, p°i£emº jsou na n¥ kladeny
nejmen²í nároky na zpoºd¥ní a spolehlivost. Typicky se jedná o p°enos dat nap°. z PC do tiskárny, ze scanneru do PC atp.
2.5 Deskriptory Pro správnou komunikaci je pot°eba, aby existoval unikovaný systém poskytování informací o p°ipojeném za°ízení, jako je nap°. podporovaná p°enosová rychlost nebo zp·sob napájení. Za tímto ú£elem existují ve specikaci USB tzv. deskriptory, které jsou hierarchicky uspo°ádány.
Obrázek 2.3: Hierarchie deskriptor· (P°evzato z [7])
8
KAPITOLA 2.
POPIS ROZHRANÍ USB
V nejvy²²í vrstv¥ této hierarchie se nachází deskriptor za°ízení. Ten je pouze jeden a obsahuje datová pole platná pro celé za°ízení. Mezi nejd·leºit¥j²í datová pole v deskriptoru za°ízení pat°í: • Vendor ID - 2 bytové £íslo ozna£ující výrobce. Toto £íslo p°id¥luje výrobc·m USB-IF
[28].
• Product ID - ozna£ení produktu o velikosti 2 byty. Toto £íslo je p°id¥lováno výrobcem
a je stejné pro v²echny produkty jednoho typu (nap°. pro jeden konkrétní typ tiskáren).
• Podporovaná verze USB - 2 bytová hodnota ozna£ující nejvy²²í podporovanou speci-
kaci USB.
• T°ída, podt°ída a protokol za°ízení - hodnoty, podle nichº opera£ní systém hledá
ovlada£ k p°ipojenému za°ízení.
• Maximální velikost paketu - maximální moºná velikost paketu pro endpoint 0. • Verze za°ízení. • Po£et kongurací.
V dal²í vrstv¥ se nacházejí deskriptory kongurací. Jedno za°ízení m·ºe mít více kongurací, nap°. jednu konguraci pro napájení z USB a jinou pro napájení z externího zdroje. Dv¥ nejd·leºit¥j²í datová pole deskriptoru kongurace jsou: • Po£et rozhraní. • Maximální odb¥r - jednobytová poloºka ur£ující, jaký maximální proud si bude za°ízení
v dané konguraci ze sb¥rnice odebírat.
V dal²í vrstv¥ hierarchie se nacházejí deskriptory rozhraní. Jedno za°ízení m·ºe obsahovat více rozhraní, nap°. multifunk£ní za°ízení m·ºe mít jedno rozhraní pro tiskárnu a jiné pro scanner. Rozhraní si m·ºeme také p°edstavit jako skupinu endpoint·. Mezi d·leºitá datová pole deskriptoru rozhraní pat°í: • Po£et endpoint·. • íslo rozhraní - jednozna£né ozna£ení rozhraní, p°i£emº první rozhraní má £íslo 0. • T°ída, podt°ída a protokol - poloºky, které mohou být pouºity k ur£ení t°ídy za°ízení
(nap°. HID, mass storage), pro které m·ºe opera£ní systém pouºít univerzální ovlada£. Pokud za°ízení spadá do n¥jaké standartn¥ denované t°ídy, není pot°eba pro n¥j mít speciální ovlada£.
V poslední (nejniº²í) vrstv¥ se nacházejí deskriptory endpoint·. Ty jsou denovány pro v²echny endpointy krom¥ endpointu 0. Deskriptor endpointu obsahuje 4 d·leºité parametry: • Adresu endpointu - ur£uje £íslo popisovaného endpointu. • Atributy endpointu - ur£ují typ datového p°enosu pro daný endpoint.
2.6.
ENUMERACE
9
• Maximální velikost paketu - maximální moºná velikost paketu zpracovatelná daným
endpointem.
• Interval mezi p°enosy - interval mezi jednotlivými p°enosy vyjád°ený po£tem rámc·.
V²echny deskriptory pak je²t¥ mohou obsahovat lidsky £itelné °et¥zcové deskriptory. Ty v²ak nejsou povinné.
2.6 Enumerace Kdyº je za°ízení nov¥ p°ipojeno k USB sb¥rnici, hostitel zahájí proces enumerace. Cílem tohoto procesu je identikovat p°ipojené za°ízení, nebo-li získat informace obsaºené v jeho deskriptorech. P°esná podoba procesu enumarace závisí na hostiteli, ale typicky probíhá proces takto. 1. Reset USB za°ízení - za°ízení nemá v tuto chvíli vlastní, tudíº vystupuje pod adresou 0. 2. Získání £ásti deskriptoru za°ízení. 3. Reset USB za°ízení. 4. P°i°azení adresy - hostitel p°i°adí koncovému za°ízení unikátní adresu v rámci USB sb¥rnice. 5. Získání celého deskriptoru za°ízení. 6. Získání deskriptor· kongurací. 7. Získání ostatních deskriptor·. 8. Nastavení kongurace.
10
KAPITOLA 2.
POPIS ROZHRANÍ USB
Kapitola 3
Popis rozhraní Ethernet Ethernet, formáln¥ v²ak standart IEEE 802.3 CSMA/CD, je sí´ový protokol fungující na fyzické a spojové vrstv¥ ISO/OSI [17] modelu. Za£al být vyvíjen v roce 1973 ve vývojovém centru Xerox PARC. V roce 1980 jej p°evzala instituce IEEE [16] a vytvo°ila na základ¥ p·vodního Etherneru dnes pouºívaný protokol IEEE 802.3 CSMA/CD neformáln¥ nazývaný Ethernet.
3.1 Fyzická vrstva rozhraní Ethernet Ethernet je pouze protokol, který m·ºe být aplikován na r·zná p°enosová média. Ve spojení s PC a mikrokontroléry se v²ak nej£ast¥ji pouºívá ethernetová varianta 10/100Base-T. Ta jako p°enosové médium vyuºívá metalické vedení, konrétn¥ se jedná o £ty°i páry kroucené dvojlinky. Z t¥chto £ty° pár· jsou v²ak pro p°enos dat vyuºívány pouze dva. Jeden pár pro symetrické vysílání dat a jeden pár pro symetrické p°ijímání dat, p°enos je tedy pln¥ duplexní. V p°ípad¥ 10/100Base-T m·ºe mít kabel maximální délku 100 metr· a standartn¥ je zakon£en konektorem 8P8C, který je v²ak b¥ºn¥ ozna£ován jako RJ45. Podle normy jsou p°ípustná dv¥ r·zná zapojení tohoto konektoru - T568A a T568B. Zapojení se mezi sebou li²í prohozením vysílacího a p°ijímacího páru vodi£·. Podle kombinace zapojení konektor· rozd¥lujeme kabely na "k°íºené" a "p°ímé". K°íºený kabel má na svých koncích r·zná zapojení konektoru a slouºí k p°ímému propojení dvou koncových za°ízení (nap°. PC). P°ímý kabel má na obou koncích stejné zapojení konektoru a slouºí k p°ipojení koncového za°ízení do sloºit¥j²í sí´ové infrastruktury (nap°. p°ipojení PC k p°epína£i).
3.2 Adresování Jelikoº se jedná o sí´ový protokol vyuºívající sdílené médium, bylo pot°eba zavést ur£itý systém adresace. U protokolu Ethernet se bavíme o tzv. MAC adresách. Jedná se o 48 bit· dlouhý identikátor, který se b¥ºn¥ zapisuje jako ²estice byt· vyjád°ená v ²estnáctkové soustav¥ (nap°. 00-1B-77-06-2B-A6). Aby bylo moºné jednozna£n¥ ur£it koncové za°ízení, je pot°eba, aby se v síti nevyskytovala dv¥ za°ízení se stejnou MAC adresou. Toto zaji²´ují jiº 11
12
KAPITOLA 3.
POPIS ROZHRANÍ ETHERNET
Obrázek 3.1: Nezapojený konektor 8P8C (P°evzato z [30])
Preambule SFD Cílová MAC Zdrojová MAC Délka 7B
1B
6B
6B
2B
Data
46 - 1500 B
FCS 4B
Tabulka 3.1: Struktura ethernetového rámce výrobci sí´ových za°ízení a vyuºívá se zde toho, ºe MAC adresa se dá rozd¥lit na dv¥ £ásti po 3 bytech, p°i£emº první £ást identikuje výrobce a druhá £ást pak konkrétní kus. Krom¥ vý²e popsaných unicastových adres existuje je²t¥ broadcastová MAC adresa, jeº je v binárním zápisu tvo°ena samými jedni£kami (FF-FF-FF-FF-FF-FF). Pokud je rámec poslán na tuto adresu, zpracují jej v²echna za°ízení, ke kterým se rámec po síti dostane.
3.3 Struktura rámce Data jsou v Ethernetu p°ená²ena pomocí rámc·. To znamená, ºe data, jeº je pot°eba p°enést, jsou ve vy²²ích vrstvách ISO/OSI modelu rozd¥lena na £ásti o velikosti 46 - 1500 byt·, k t¥m jsou p°idány reºijní informace a jako jednotlivé rámce putují sítí k cílovému za°ízení, které z nich sestaví p·vodní p°ená²enou informaci. Ethernetový rámec je tvo°en n¥kolika £ástmi. První £ást je takzvaná preambule a tvo°í ji 7 byt· v nichº se st°ídají jedni£ky a nuly (10101010). Preambule slouºí k synchronizaci p°ijímací a vysílací strany. Druhou £ástí je jednobytový SFD (Start of Frame delimiter), který ozna£uje za£átek rámce. Dále následuje cílová MAC adresa, zdrojová MAC adresa a délka pole dat. Dále jsou pak v rámci p°ímo odesílaná data, jejichº velikost m·ºe být variabilní, a to v rozsahu 46-1500 byt·. Za datovým polem uº pak následuje jenom pole FCS (Frame Check Sequence), coº je 32-bitový kontrolní sou£et, podle n¥jº se dá vyhodnodnit chyba p°i p°enosu. Tento kontrolní sou£et se vypo£ítává ze v²ech polí rámce krom¥ preambule a FCS.
Kapitola 4
Komunikace prost°ednictvím USB Pro realizaci komunikace pomocí sb¥rnice USB máme k dispozici n¥kolik moºností. Na trhu se vyskytuje velké mnoºství obvod· od r·zných výrobc·, které umoº¬ují p°ipojení v podstat¥ libovolného mikrokontroléru a´ uº standartizovanou sb¥rnicí (nap°. SPI), nebo pomocí vlastního rozhraní. Tyto obvody pak obstarávají celou komunikaci p°es USB, o kterou se tudíº mikrokontrolér nemusí starat. Já se v²ak v této práci zam¥°ím na °e²ení, které nevyºaduje dal²í dodate£né obvody pro °ízení USB komunikace. Tímto °e²ením jsou mikrokontroléry Microchip PIC, které mají integrovanou podporu USB.
4.1 Popis USB modulu V této podkapitole bych rád nastínil, jak funguje podpora USB v mikrokontrolérech PIC. Jelikoº mám pro testování k dispozici mikrokontrolér Microchip PIC 18F4550, bude se popis hardwarového zapojení USB modulu vztahovat práv¥ na tento mikrokontrolér. Nicmén¥ v jiných modelech s podporou USB by zapojení m¥lo být principiáln¥ velice podobné. Základem USB modulu je USB Serial Interface Engine (SIE), který umoº¬uje komunikaci mezi hostitelským za°ízením a mikrokontrolérem. Celý modul je °ízen pomocí 22 kontrolních registr·. Jedná se o registry: • USB Control register (UCON) - °ídí modul v pr·b¥hu p°enosu. • USB Conguration register (UCFG) - v¥t²ina kongurace USB modulu. • USB Transfer Status register (USTAT) - stav prob¥hnuv²í transakce. • USB Device Address register (UADDR) - unikátní adresa získaná b¥hem enumerace. • Frame number registers (UFRMH:UFRML) - £íslo aktuálního rámce. • Endpoint Control registers 0-15 (UEP0 - UEP15) - kongurace jednotlivých endpoint·.
Nebudu zde dále popisovat obsah a funkci jednotlivých registr·, v p°ípad¥ pot°eby lze podrobný popis najít v [7]. 13
14
KAPITOLA 4.
KOMUNIKACE PROSTEDNICTVÍM USB
Pro p°enos dat mezi mikrokontrolérem a USB modulem se pouºívá pam¥t, zvaná USB RAM. Jedná se o speciální dvoubranovou pam¥t která je namapována do normálního adresního prostoru, a to do bank 4-7, tudíº na adresy 400h-7FFh. Její kapacita je tedy v p°ípad¥ na²eho mikrokontroléru 1kB. Banka 4 (400h-4FFh) je vyhrazena pro °ízení vyrovnávacích pam¥tí endpoint· (endpoint buer). Toto °ízení je realizováno pomocí struktury Buer Descriptor Table (BDT). BDT se skládá z jednotlivých Buer Deskriptor· (BD), které denují a °ídí jednotlivé buery. Za°ízení m·ºe implementovat aº 16 endpoint·, p°i£emº kaºdý endpoint m·ºe být obousm¥rný. P°i pouºití Ping-Pong bueringu1 jsou pak pot°eba dva buery pro jeden sm¥r jednoho endpointu. To nám dává celkem aº 64 endpoint buer·, a tudíº i 64 BD. Jeden BD se vºdy skládá ze £ty° byt·. • BDnSTAT: BD Status register - stav daného endpoint bueru. • BDnCNT: BD Byte Count register - velikost endpoint bueru. • BDnADRL: BD Address Low register - spodní byte adresy za£átku daného endpoint
bueru.
• BDnADRH: BD Address High register - vrchní byte adresy za£átku daného endpoint
bueru.
(P°i£emº n je £íslo daného endpoint bueru, tudíº 0-63.) Pokud budeme uvaºovat v²ech 64 BD, dostáváme 64*4=256 byt·, které budou obsazeny pouze BDT. Vzhledem k celkové kapacit¥ USB RAM 1024 byt· to znamená, ºe na samotné endpoint buery nám zbývá 768 byt·. Umíst¥ní endpoint buer· v této £ásti pam¥ti si musí vývojá° hlídat sám, protoºe zde není realizován ºádný hardwarový mechanismus, který by umíst¥ní zaji²´oval. V p°ístupu k danému endpoint bueru a BD se st°ídají mikrokontrolér a SIE, je proto tedy nutné zajistit mechanismus, který bude toto st°ídání °ídit. Tímto mechanismem je jednoduchý semafor tvo°ený bitem UOWN v registru BDnSTAT. Pokud je hodnota tohoto bitu 1, je daný buer a BD ve vlastnictví SIE a mikrokontrolér by k n¥mu nem¥l p°istupovat ani zápisem, tak ani £tením. Po dokon£ení p°enosu provede SIE p°epnutí UOWN bitu zp¥t na 0, a tudíº p°edání vlastnictví bueru a BD zp¥t mikrokontroléru. USB m·ºe b¥hem svého provozu generovat velké mnoºství r·zných p°eru²ení. K obslouºení v²ech t¥chto p°eru²ení modul obsahuje vlastní p°eru²ovací logiku. Schéma p°eru²ovací logiky m·ºete vid¥t na obrázku 4.1 p°evzatém z [7]. Jedná se o dvouúrov¬ovou logiku, p°i£emº sekundární p°eru²ení jsou logicky s£ítána do jednoho primárního p°eru²ení UERRIF(USB Error Interrupt Flag). Primární p°eru²ení jsou pak op¥t logicky s£ítána do jediného p°eru²ení mikrokontroléru USBIF (USB Interrupt Flag). Sekundární p°eru²ení se skládají z chybových stav· USB modulu (nap°. chybný CRC kontrolní sou£et). Kaºdé p°eru²ení m·ºe být samostatn¥ zapnuto, a to pomocí registru UEIE (USB Error Interrupt Enable Register). Náv¥²tí pro identikaci aktuálního p°eru²ení je pak umíst¥no v registru UEIR (USB Error Interrupt Status Register). Primární p°eru²ení jsou tvo°ena stavovými p°eru²eními USB (nap°. za£átek rámce, dokon£ení transakce). Stejn¥ jako sekundární p°eru²ení mohou V jednom bueru p°ipravuje mikrokontrolér data pro p°enos a s druhým pracuje SIE. Poté se buery prohodí, tím je zvý²ena rychlost p°enosu dat. 1
4.1.
POPIS USB MODULU
15
Obrázek 4.1: Schéma p°eru²ovací logiky USB modulu (P°evzato z [7]
být i ta primární jednotliv¥ aktivována, a to pomocí registru UIE (USB Interrupt Enable Register). Pro identikaci vyvolaného p°eru²ení je zde registr náv¥²tí UIR (USB Interrupt Status Register).
16
KAPITOLA 4.
KOMUNIKACE PROSTEDNICTVÍM USB
Kapitola 5
Komunikace prost°ednictvím Ethernetu Pokud pot°ebujeme p°ipojit mikrokontrolér k PC pomocí rozhraní ethernet máme k dispozici dv¥ moºnosti. První moºností je pouºití mikrokontroléru s integrovanou podporou rozhraní ethernet. Druhou moºností je pouºít dodate£ný integrovaný obvod, který bude zaji²´ovat samotnou ethernetovou komunikaci. Tyto obvody se k mikrokontroléru p°ipojují pomocí standartizovaných rozhraní, nej£ast¥ji pomocí rozhraní SPI (Serial Peripheral Interface).
5.1 Mikrokontroléry Microchip PIC s podporou ethernetu Firma Microchip v sou£asné dob¥ nabízí 9 mikrokontroléru rodiny PIC18F, které obsahují ethernetový modul, viz tabulka 5.1. V²echny tyto mikrokontroléry spadají do jediné produktové °ady a li²í se p°edev²ím velikostí integrované ash pam¥ti a po£tem pin·.
Velikost ash pam¥ti Model s 64 piny Model s 80 piny Model se 100 piny 64 kB 96 kB 128 kB
PIC18F66J60 PIC18F66J65 PIC18F67J60
PIC18F86J60 PIC18F86J65 PIC18F87J60
PIC18F96J60 PIC18F96J65 PIC18F97J60
Tabulka 5.1: 8-mi bitové mikrokontroléry Microchip PIC s integrovanou podporou rozhraní ethernet V²echny vý²e zmín¥né mikrokontroléry podporují jeden ethernetový port standartu 10BaseT. Tedy p°ipojení rychlostí aº 10 Mb/s pomocí kroucené dvojlinky. Mikrokontroléry obsahují 8 kB vyrovnávácí pam¥ti orgranizované do kruhové FIFO (First In, First Out) fronty s podporou DMA (Direct Memory Access) pro rychlý p°esun dat. Dále je zde realizován hardwarový výpo£et kontrolního sou£tu CRC (Cyclic Redundancy Check), automatické p°eposílání rámce p°i kolizi a dal²í podp·rné mechanismy. Kompletní popis v²ech vlastností t¥chto mikrokontroléru m·ºete najít v [8]. 17
18
KAPITOLA 5.
KOMUNIKACE PROSTEDNICTVÍM ETHERNETU
5.2 Dodate£né obvody pro ethernet Druhou moºností jak p°ipojit mikrokontrolér k PC pomocí rozhraní ethernet je pouºití dodate£ného integrovaného obvodu. Typickým zástupcem tohoto typu obvodu je Microchip ENC424J600. Tento obvod m·ºeme k mikrokontroléru p°ipojit pomocím rozhraní SPI, nebo pomocí paralelního rozhraní. Obvod disponuje vyrovnávací pam¥tí o velikosti 24 kB, podporou jednoho portu standartu 10/100Base-T, automatickým rozpoznáním p°ijímacího a vysílacího páru vodi£· a dal²ímy podp·rnými mechanismy, podobn¥ jako vý²e uvedené mikrokontroléry. Kompletní popis tohoto obvodu naleznete v [9].
5.3 Moduly Dodate£né obvody pro ethernet na provozování komunikace samy o sob¥ nesta£í. Je pot°eba k nim p°idat n¥kolik dal²ích sou£ástek, p°i£emº jejich seznam a schéma zapojení je k dispozici v dokumentaci k danému obvodu. Na trhu v²ak existují °e²ení, kde jsou tyto integrované obvody uº dopln¥ny o pot°ebné sou£ástky a jsou tedy prodávány jako kompletní modul, který uº opravdu sta£í pouze p°ipojit k mikrokontroléru.
Obrázek 5.1: Modul SPINET (p°evzato z [25]) Typickým zástupcem této kategorie m·ºe být nap°íklad modul SPINET [25] dodávaný spole£ností ASIX [12]. Tento modul je zaloºen na obvodu Microchip ENC28J60, který je jiº osazen v plo²ném spoji a dopln¥n v²emi pot°ebnými sou£ástkami. Modul se k mikrokontroléru p°ipojuje pomocí rozhraní SPI.
Kapitola 6
Analýza implementované aplikace 6.1 Výb¥r aplikace a komunika£ního rozhraní V sou£asné dob¥ se pro výuku p°edm¥tu X34MPC (Mikropo£íta£e) na kated°e mikroelektroniky FEL VUT pouºívají mikrokontroléry Microchip PIC °ady PIC18F ve vývojových deskách PVK40 [23] od rmy ASIX [12]. Pro programování t¥chto procesor· se pouºívá bootloader (zavad¥£) Tiny PIC bootloader [26], který ov²em pro komunikaci s PC pouºívá sériové rozhraní RS232. Toto rozhraní v²ak z moderních PC ustupuje, a tudíº zde vznikl poºadavek na nahrazení tohoto bootloaderu. Aplikací, kterou jsem se rozhodl realizovat v rámci této bakalá°ské práce, je bootloader pro procesory rodiny PIC18F. P°i rozhodování o pouºitém komunika£ním rozhraní jsem vycházel z následujících skute£ností. • Vývojová deska bude od PC uºivatele vzdálena maximáln¥ 3 metry, není tedy nutné
pouºít Ethernet kv·li v¥t²í p°ekonatelné vzdálenosti.
• PC uºivatele bude s nejv¥t²í pravd¥podobností obsahovat pouze jeden Ethernetový
port, který bude vyuºit pro p°ipojení do lokální po£íta£ové sít¥. Pro pouºití Ethernetu by tedy bylo nutné dokoupit dal²í hardware a to bu¤ v podob¥ sí´ové karty do kaºdého PC, nebo v podob¥ sí´ového p°epína£e s dostate£ným mnoºstvím port·.
• USB porty jsou sou£ástí kaºdého moderního PC a u ²kolního po£íta£e se nep°edpokládá
obsazení v²ech port· perifériemi jako jsou tiskárny nebo skenery.
• V sou£asné dob¥ nabízí rma Microchip 20 mikrokontrolér· °ady PIC18F s podporou
USB, zatímco pouze 9 mikrokontrolér· poskytuje integrovanou podporu Ethernetu.
• Za°ízení se srovnatelnými parametry jsou v p°ípad¥ podpory Ethernetu draº²í neº
za°ízení s podporou USB.
• Pro moºnost pouºití Ethernetu je k mikrokontroléru nutno p°idat v¥t²í mnoºství do-
date£ných sou£ástek neº v p°ípad¥ USB, z £ehoº plynou v¥t²í náklady.
Vzhledem k vý²e zmín¥nýn d·vod·m jsem pro komunikaci zvolil rozhraní USB, které se pro tyto ú£ely jeví jako ideální. 19
20
KAPITOLA 6.
ANALÝZA IMPLEMENTOVANÉ APLIKACE
6.2 Poºadavky na bootloader Pro mou aplikaci jsem si stanovil n¥kolik poºadavk·, které musí aplikace spl¬ovat. 1. Podporovaný opera£ní systém: Microsoft Windows - jelikoº rma Microchip pro programování svých mikrokontrolér· podporuje nativn¥ pouze Microsoft Windows, byl tento poºadavek z°ejmý. 2. Programování, verikace, mazání a vy£tení ash pam¥ti mikrokontroléru. 3. Programování, verikace, mazání a vy£tení EEPROM pam¥ti, pokud je jí mikrokontrolér vybaven. 4. Formát vstupních dat pro programování: HEX soubor [2], generovaný vývojovým prost°edím Microchip MPLAB IDE [21]. 5. Moºnost exportu vy£tených dat z mikrokontroléru do HEX souboru. 6. Automatické rozpoznání p°ipojeného mikrokontroléru a jeho základních parametr·. 7. Nezávislost PC £ásti aplikace - nebudou existovat r·zné verze aplikace pro r·zné mikrokontroléry. Pro v²echny mikrokontroléry vybavené tímto bootloaderem bude pln¥ fungovat jedna verze PC aplikace.
6.3 Poºadavky na vývojovou desku Pro moºnost pouºití bootloaderu musí vývojová deska spl¬ovat následující poºadavky: 1. Korektn¥ p°ipojené USB rozhraní k mikrokontroléru. 2. Jedno tla£ítko nebo p°epína£ slouºící k nastartování bootloaderu místo uºivatelské aplikace. 3. Jedna stavová LED dioda signalizující stav bootloaderu.
6.4 Pouºité technologie a vývojová prost°edí Pro snaz²í orientaci v textu bude dále £ást aplikace pro mikrokontrolér ozna£ována jako rmware a £ást aplikace pro PC jako klient.
6.4.1 Firmware Pro vývoj rmwaru jsem pouºil vývojové prost°edí od rmy Microchip MPLAB IDE ve verzi 8.40. Toto vývojové prost°edí je uzp·sobeno k vývoji a lad¥ní program· pro mikrokotroléry PIC a je voln¥ ²í°eno na webu rmy Microchip [20]. Pro usnadn¥ní práce s USB modulem jsem vyuºil USB framework [27] p°ímo od Microchipu. Ten je naprogramován jazyce C a pro jeho kompilaci ve vývojovém prost°edí
6.4.
POUITÉ TECHNOLOGIE A VÝVOJOVÁ PROSTEDÍ
21
Obrázek 6.1: Vývojové prost°edí MPLAB IDE 8.40 MPLAB IDE je pot°eba mít nainstalovaný a nastavený kompilátor MCC18 [19] (MPLAB C Compiler for PIC18 MCUs). Kompilátor je placený software prodávaný spole£ností Microchip, ale existuje voln¥ ²í°ená studentská verze, která se dá stáhnout z webu spole£nosti Microchip. Vzhledem k frameworku jsem v¥t²inu rmwaru naimplementoval v jazyce C. Pouze n¥které krátké sekvence programu jsou naimplementovány p°ímo v instrukcích assembleru, protoºe výsledný kód potom zabere mén¥ pam¥ti mikrokontroléru.
6.4.2 Vývojová deska Pro lad¥ní a testování rmwaru jsem pouºil vývojovou desku s mikrokontrolérem Microchip PIC 18F4550-I/P. K ní byl pomocí ICSP (In-Circuit Serial Programming) konektoru p°ipojený externí programátor kompatibilní s Microchip ICD2 [15]. Na obrázku 6.2 je schéma osazení pouºité vývojové desky, p°i£emº dále budou popsány sou£ásti, které byly v rámci této práce pouºívány. 1. Nápájecí konektor. 2. LED dioda indikující p°ipojení napájení. 3. Stabilizátor nap¥tí 5V. 4. 10-ti pinový konektor p°ipojený na PORT B mikrokontroléru. 5. 10-ti pinový konektor p°ipojený na PORT D mikrokontroléru.
22
KAPITOLA 6.
1
ANALÝZA IMPLEMENTOVANÉ APLIKACE
4
2
5
6
3 7 8 10
9 11
12
13
14
15
16
Obrázek 6.2: Osazení vývojové desky 6. USB konektor typu B. 7. Mikrokontrolér Microchip PIC 18F4550-I/P. 8. 6-ti pinový konektor ICSP. 9. Krystalový oscilátor s frekvencí 20 Mhz. 10. Tla£ítko pro libovolné vyuºití. 11. LED dioda p°ipojená na PORT E, bit 1. Ve rmwaru je pouºita pro signalizaci stavu bootloaderu. 12. Tla£ítko RESET p°ipojené na MCLR (Master Clear) pin mikrokontroléru. Stisknutí zp·sobí okamºitý reset mikrokontroléru. 13. 10-ti pinový konektor p°ipojený na PORT A mikrokontroléru. 14. 10-ti pinový konektor p°ipojený na PORT E mikrokontroléru. 15. 10-ti pinový konektor p°ipojený na PORT C mikrokontroléru. 16. Tla£ítko p°ipojené na PORT B, bit 2. Ve rmwaru slouºí k volb¥ startu bootloaderu, resp. uºivatelské aplikace.
6.4.3 Klient Pro implementaci klientské £ásti aplikace jsem zvolil programovací jazyk C++. Pro umoºn¥ní komunikace mezi klientskou aplikací a rmwarem jsem pouºil dynamicky linkovanou knihovnu MCHPHIDClass od spole£nosti Microchip. Ta je ²í°ena spolu s USB frameworkem a
6.4.
POUITÉ TECHNOLOGIE A VÝVOJOVÁ PROSTEDÍ
23
Obrázek 6.3: Vývojové prost°edí Microsoft Visual Studio 2008 Professional Edition je naimplementována v technologii .NET [13]. Proto jsem pro vývoj zvolil Microsoft Visual Studio 2008 Professional Edition [29], coº je vývojové prost°edí, které umoº¬uje realizovat aplikaci v C++ sou£asn¥ s podporou .NET. Toto vývojové prost°edí je placený software, já jsem v²ak pro tuto práci vyuºil verzi ²í°enou v rámci MSDNAA [22] (Microsoft Developer Network Academic Alliance) katedry po£íta£· FEL VUT. Pro implementaci GUI (Graphical user interface) jsem zvolil knihovnu Qt [24] vyvíjenou spole£ností Nokia. Knihovna Qt má krom¥ komer£ní verze i verzi voln¥ ²í°enou pod licencí GNU LGPL v2.1 [18] (GNU Lesser General Public License), coº je verze, která byla v této práci pouºita. Pro snaz²í vytvá°ení formulá°· uºivatelského rozhraní je spolu s knihovnou Qt ²í°en i nástroj Qt Designer, který pokytuje gracké rozhraní pro tvorbu formulá°· a dialog· uºivatelského rozhraní. Jelikoº vývojové prost°edí Microsoft Visual Studio 2008 ve své standartní instalaci nepodporuje pouºití gracké knihovny Qt, pouºil jsem navíc dopln¥k [11] pro vývojové prost°edí, který umoºní integraci gracké knihovny.
24
KAPITOLA 6.
ANALÝZA IMPLEMENTOVANÉ APLIKACE
Obrázek 6.4: Nástroj Qt Designer
Kapitola 7
Návrh aplikace 7.1 Princip £innosti z pohledu uºivatele Bootloader, neboli zavad¥£, je program, který startuje p°ed uºivatelským programem a p°idává systému ur£itou funkcionalitu, nezávislou na uºivatelské aplikaci. V p°ípad¥ mikrokontroléru se zpravidla jedná o moºnost p°eprogramování pam¥ti. Bootloader tedy umoº¬uje uºivateli nahrát do za°ízení jiný program bez nutnosti pouºití externího za°ízení (programátoru). Výhoda nepot°eby externího programátoru je ov²em vykoupena men²ím mnoºstvím vyuºitelné pam¥ti, jelikoº £ást pam¥ti zabere samotný bootloader. Uºivatel tedy musí pouºít externí programátor pouze p°i prvním pouºití daného mikrokontroléru, kdy do za°ízení naprogramuje samotný bootloader. Ve chvíli, kdy je v pam¥ti za°ízení bootloader, není jiº programátor pot°eba. Po resetu za°ízení nejprve nastartuje rozhodovací £ást bootloaderu, kde má uºivatel cca 2 s na stisknutí tla£ítka pro vstup do bootloaderu. Pokud uºivatel tla£ítko stiskne, dojde k nastartování bootloaderu a zapnutí USB modulu. V této chvíli sta£í na po£íta£i spustit obsluºný program a bootloader je p°ipraven provád¥t své £innosti (nap°. naprogramování ash pam¥ti, smazání ash pam¥ti). V p°ípad¥, ºe uºivatel tla£ítko v daném £asovém intervalu nestiskne, dojde k nastartování samotné uºivatelské aplikace.
7.2 Rozvrºení pam¥ti Firmware umíst¥ný v pam¥ti se snaºí být v·£i uºivateli co nejvíce transparentní. Uºivatel tudíº nemusí v¥d¥t, jak p°esn¥ bootloader funguje a kam se jeho program fyzicky do pam¥ti umístí. Na obrázku 7.1 je vid¥t rozvrºení ash pam¥ti s bootloaderem pro mikrokontrolér s 32 kB ash pam¥ti. U mikrokontrolér· rodiny PIC18F, pro kterou je tento bootloader ur£en, se na adrese 0x0000 nachází tzv. reset vector. Reset vector je místo v pam¥ti, které se za£ne provád¥t po resetu za°ízení. Z obrázku je vid¥t, ºe 8 byt· pam¥ti od adresy 0x0000 aº do adresy 0x0008 je obsazeno Reset vectorem bootloaderu. Zde je umíst¥na instrukce GOTO [7], která zp·sobí p°esko£ení uºivatelského programu a pokra£ování startu bootloaderu. Bootloader zabírá v pam¥ti 6912 byt·, p°i£emº dal²ích 64 byt· na konci pam¥ti je vyhrazeno pro uºivatelský reset vector. Bootloader tedy v p°ípad¥ 32 kB pam¥ti za£íná 25
26
KAPITOLA 7.
NÁVRH APLIKACE
0x0000 Bootloader reset vector 0x0008 Uživatelská obsluha přerušení 0x0018
Uživatelská aplikace
0x64C0
Bootloader
0x7FC0 0x7FFF
Uživatelský reset vector
Obrázek 7.1: Rozvrºení ash pam¥ti u mikrokontroléru PIC18F4550 na adrese 0x64C0 (pro v¥t²í pam¥´ je pot°eba jej adekvátn¥ posunout) a zde nejprve dojde k detekci stisknutí tla£ítka pro vstup do bootloaderu. Pokud je v £asovém intervalu tla£ítko stisknuto, program z·stane v oblasti bootloaderu a na provád¥ní uºivatelského kódu v·bec nedojde. V p°ípad¥, ºe tla£ítko stisknuto nebude, bude proveden skok (instrukce GOTO) na poslední 64 bytový blok pam¥ti, v tomto p°ípad¥ tedy na adresu 0x7FC0. Na této adrese se nachází prvních 8 byt· uºivatelského programu, tedy instrukce, které by za normálních okolností byly umíst¥ny na adrese 0x0000, neboli uºivatelský reset vector. Zbytek uºivatelského kódu je pak umíst¥n p°ímo do t¥ch míst pam¥ti, kam by byl umíst¥n p°i programování externím programátorem.
7.3 Poºadavky na uºivatelskou aplikaci Z vý²e uvedeného rozmíst¥ní v pam¥ti vychází poºadavky, které musí uºivatelská aplikace spl¬ovat, aby se dala pouºít spolu s bootloaderem. 1. Aplikace se musí vejít do volného místa v pam¥ti. - Velikost pouºitelné pam¥ti je zmen²ena o velikost bootloaderu. Uºivatelský kód tedy musí zabírat maximáln¥ velikost pam¥ti-6976 byt·. Tento poºadavek je kontrolován klientskou £ástí aplikace, která neumoºní naprogramování v¥t²í aplikace, tedy aplikace, která by zasahovala do instrukcí bootloaderu. 2. Aplikace musí v prvních 8 bytech obsahovat instrukci GOTO, která zp·sobí skok na provád¥ní zbytku kódu uºivatelské aplikace. - Vzhledem k p°emíst¥ní uºivatelského reset vectoru na konec pam¥ti je nutné, aby aplikace nespoléhala na fakt, ºe po provádení
7.4.
27
POPIS KOMUNIKACE
instrukce na adrese 0x0007 dojde k provád¥ní instrukce na adrese 0x0008, k tomu totiº kv·li p°emíst¥ní uºivatelského reset vectoru nedojde. Uºivatelský kód m·ºe za£ínat nap°íklad takto: org 0x00 ; reset vector GOTO START org 0x08 ; vektor preruseni vyssi priority GOTO Prerus1 org 0x18 ; vektor preruseni nizsi priority GOTO Prerus2 START
Toto samoz°ejm¥ není jediná moºná funk£ní varianta, ale pokud bude uºivatelský program za£ínat touto sekvencí p°íkaz·, bude pouºitelný soub¥ºn¥ s bootloaderem. Nespln¥ní této podmínky nemá vliv na rmware bootloaderu, a proto není klientem ani rmwarem kontrolována.
7.4 Popis komunikace P°i implementaci rmwaru jsem zvolil t°ídu USB za°ízení HID [10] (Human Interface Device). Tuto t°ídu za°ízení a z toho vyplývající zp·sob komunikace jsem zvolil hlavn¥ kv·li tomu, ºe pro za°ízení není pot°eba instalovat do po£íta£e ovlada£, nýbrº sta£í pouze ovlada£, který je jiº obsaºen ve standartní instalaci opera£ního systému Microsoft Windows. HID za°ízení komunikují pomocí tzv. Report·, coº je v podstat¥ ur£ité p°edem dohodnuté mnoºství byt·, které se posílají jako jeden celek. Standartní velikost HID reportu je 64 byt·. Celá komunikace je navrhnuta na modelu p°íkaz-odpov¥¤, neboli na kaºdý p°íkaz o£ekává klient odpov¥d od rmwaru. Struktura kaºdého reportu je trochu jiná. V £em se shodují je první byte, který obsahuje identikaci daného p°íkazu/odpov¥di. Pokud se n¥které datové pole skládá z více byt·, jsou zapsány zp·sobem big-endian, tudíº první byte zleva je MSB (Most Signicant Byte).
7.4.1 Struktura p°íkazu Info Prvním p°íkazem, který zde bude popsán, a zárove¬ prvním p°íkazem, který je po navázání komunikace volán, je p°íkaz Info. Slouºí ke zji²t¥ní informací o p°ipojeném za°ízení pot°ebných k dal²ímu fungování bootloaderu.
ID p°íkazu 0xFF 1B
63 B
Tabulka 7.1: Struktura p°íkazu Info Popis struktury p°íkazu Info z tabulky 7.1.
28
KAPITOLA 7.
NÁVRH APLIKACE
• ID p°íkazu - jeden byte specikující p°íkaz, v tomto p°ípad¥ má hodnotu 0x20.
Tento p°íkaz jiº nemá ºádná dal²í datová pole a komunika£ní knihovna jej tudíº dolpní 63 byty 0xFF aby byla dodrºena velikost reportu.
7.4.2 Struktura odpov¥di Info Tento report je odeslán jako odpov¥¤ na vý²e uvedený p°íkaz Info.
Velikost Velikost Adresa Adresa ID p°íkazu ash pam¥ti EEPROM pam¥ti bootloaderu EEPROM 0xFF 1B
3B
2B
3B
4B
51 B
Tabulka 7.2: Struktura odpov¥di Info Popis struktury odpov¥di Info z tabulky 7.2. • ID p°íkazu - v tomto p°ípad¥ 0x21. • Velikost ash pam¥ti - 3 bytová hodnota, ve které je odesílána velikost programové
pam¥ti ash v bytech.
• Velikost EEPROM pam¥ti - 2 bytová hodnota obsahující velikost EEPROM pam¥ti
v bytech.
• Adresa bootloaderu - 3 bytová hodnota s adresou, na které za£íná kód bootloaderu.
Slouºí ke kontrole velikosti uºivatelského kódu.
• Adresa EEPROM - 4 bytová hodnota s adresou, která má být povaºována za za£átek
EEPROM pam¥ti.
Report je dopln¥n 51 byty 0xFF pro dodrºení velikosti.
7.4.3 Struktura p°íkazu Program Flash Tento p°íkaz slouºí k naprogramování jednoho 32 B bloku dat do ash pam¥ti. V p°ípad¥ programování v¥t²í £ásti kódu je tento p°íkaz volán cyklicky.
ID p°íkazu Adresa Blok dat 0xFF 1B
4B
32 B
27 B
Tabulka 7.3: Struktura p°íkazu Program Flash Popis struktury p°íkazu Program Flash z tabulky 7.3. • ID p°íkazu - 0x10. • Adresa - 4 bytová hodnota ur£ující adresu, na kterou má být 32 B blok dat uloºen. • Blok dat - 32 byt· dat pro uloºení do ash pam¥ti.
P°íkaz je dopln¥n na poºadovanou velikost 27 byty 0xFF.
7.4.
29
POPIS KOMUNIKACE
7.4.4 Struktura odpov¥di Program Flash Tento report slouºí k ov¥°ení provedení zápisu dat na danou adresu, nikoliv v²ak pro kontrolu zapsaných dat.
ID p°íkazu Adresa 0xFF 1B
4B
59 B
Tabulka 7.4: Struktura odpov¥di Program Flash Popis struktury odpov¥di Program Flash z tabulky 7.4. • ID p°íkazu - 0x11. • Adresa - 4 bytová hodnota specikující adresu, na kterou byl p°ená²ený blok dat uloºen.
Report je dopln¥n 59 byty 0xFF pro dodrºení velikosti.
7.4.5 Struktura p°íkazu Program EEPROM Tento p°íkaz slouºí k naprogramování aº 60-ti byt· dat do pam¥ti EEPROM. Pokud je pot°eba naprogramovat v¥t²í mnoºství dat, je tento p°íkaz volán cyklicky.
ID p°íkazu Adresa Po£et dat 1B
2B
1B
Data 0xFF 1-60 B 59-0 B
Tabulka 7.5: Struktura p°íkazu Program EEPROM Popis struktury p°íkazu Program EEPROM z tabulky 7.5. • ID p°íkazu - 0x50. • Adresa - 2 bytová hodnota ur£ující adresu pro uloºení dat. Tato adresa je pouze v rámci
pam¥ti EEPROM, nemá na ni tudíº vliv hodnota Adresa EEPROM získaná pomocí p°íkazu Info (viz kapitola 7.4.2)
• Po£et dat - tato poloºka m·ºe nabývat hodnot od 1 do 60 a specikuje mnoºství dat
posílaných v daném p°íkazu.
• Data - 1-60 byt· dat ur£ených pro uloºení do pam¥ti EEPROM.
P°íkaz je na poºadovanou velikost dopln¥n 0 aº 59 byty 0xFF podle po£tu ukládaných dat.
30
KAPITOLA 7.
NÁVRH APLIKACE
ID p°íkazu Adresa 0xFF 1B
2B
61 B
Tabulka 7.6: Struktura odpov¥di Program EEPROM
7.4.6 Struktura odpov¥di Program EEPROM Tento report funguje podobn¥ jako opov¥¤ Program Flash (viz kapitola 7.4.4). Slouºí tedy pouze k ov¥°ení faktu, ºe programování pam¥ti EEPROM prob¥hlo. Popis struktury odpov¥di Program EEPROM z tabulky 7.6. • ID p°íkazu - 0x51. • Adresa - 2 bytová hodnota ur£ující adresu v rámci pam¥ti EEPROM, kam byla data
zapsána.
Report je dopln¥n 61 byty 0xFF pro dodrºení velikosti.
7.4.7 Struktura p°íkazu Read Flash P°íkaz read ash slouºí k vy£tení aº 59 byt· dat z ash pam¥ti za°ízení. P°íkaz se pouºívá p°i vy£ítání dat z mikrontroléru a p°i verikaci obsahu ash pam¥ti.
ID p°íkazu Adresa Po£et dat 0xFF 1B
4B
1B
58 B
Tabulka 7.7: Struktura p°íkazu Read Flash Popis struktury p°íkazu Read Flash z tabulky 7.7. • ID p°íkazu - 0x40. • Adresa - 4 bytová hodnota s adresou v rámci ash pam¥ti, od které se mají za£ít vy£ítat
data.
• Po£et dat - tato poloºka m·ºe nabývat hodnot od 1 do 59 a specikuje po£et byt· dat,
které mají být z ash pam¥ti vy£teny.
P°íkaz je na poºadovanou velikost dopln¥n 58 byty 0xFF.
7.4.8 Struktura odpov¥di Read Flash Tento report vrací 1 aº 59 byt· dat vy£tených z ash pam¥ti. Popis struktury odpov¥di Read Flash z tabulky 7.8. • ID p°íkazu - 0x41.
7.4.
31
POPIS KOMUNIKACE
ID p°íkazu Adresa 1B
4B
Data 0xFF 1-59 B 58-0 B
Tabulka 7.8: Struktura odpov¥di Read Flash • Adresa - 4 bytová hodnota specikující po£áte£ní adresu vy£tených dat v rámci ash
pam¥ti.
• Data - 1 aº 59 byt· dat vy£tených z ash pam¥ti v závislosti na p°íkazu Read Flash.
Report je kv·li dodrºení velikost dopln¥n 0 aº 58 byty 0xFF.
7.4.9 Struktura p°íkazu Read EEPROM Tento p°íkaz slouºí k vy£tení dat z pam¥ti EEPROM. V rámci jednoho p°íkazu m·ºe být vy£teno aº 61 byt· dat. Tento p°íkaz se pouºívá pro vy£ítání dat z pam¥ti EEPROM a pro verikaci jejího obsahu po programování.
ID p°íkazu Adresa Po£et dat 0xFF 1B
2B
1B
60 B
Tabulka 7.9: Struktura p°íkazu Read EEPROM Popis struktury p°íkazu Read EEPROM z tabulky 7.9. • ID p°íkazu - 0x60. • Adresa - 2 bytová hodnota, jeº ur£uje adresu pro vy£ítání dat pouze v rámci pam¥ti
EEPROM.
• Po£et dat - tato poloºka m·ºe nabývat hodnot od 1 do 61 a specikuje po£et byt· dat,
které mají být z EEPROM pam¥ti vy£teny.
P°íkaz je na poºadovanou velikost dopln¥n 60 byty 0xFF.
7.4.10 Struktura odpov¥di Read EEPROM Tento report vrací 1 aº 61 byt· dat vy£tených z EEPROM pam¥ti.
ID p°íkazu Adresa 1B
2B
Data
0xFF 1-61 B 60-0 B
Tabulka 7.10: Struktura odpov¥di Read EEPROM Popis struktury odpov¥di Read EEPROM z tabulky 7.10.
32
KAPITOLA 7.
NÁVRH APLIKACE
• ID p°íkazu - 0x61. • Adresa - 2 bytová hodnota specikující po£áte£ní adresu vy£ítaných dat. • Data - 1 aº 61 byt· dat vy£tených z EEPROM pam¥ti v závislosti na p°íkazu Read
EEPROM.
Report je kv·li dodrºení velikost dopln¥n 0 aº 60 byty 0xFF.
7.4.11 Struktura p°íkazu Erase Flash Tento p°íkaz slouºí ke smazání 64 B bloku dat z ash pam¥ti za°ízení.
ID p°íkazu Adresa 0xFF 1B
4B
59 B
Tabulka 7.11: Struktura p°íkazu Erase Flash Popis struktury p°íkazu Erase Flash z tabulky 7.11. • ID p°íkazu - 0x30. • Adresa - 4 bytová hodnota s adresou bloku, který má být smazán z ash pam¥ti. Mazat
lze pouze zarovnané bloky dat, pokud tedy adresa bude nabývat nap°. hodnoty 0x10, dojde ke smazání bloku 0x00-0x3F.
P°íkaz je na poºadovanou velikost dopln¥n 59 byty 0xFF.
7.4.12 Struktura odpov¥di Erase Flash Tento report pouze potrvzuje provedení p°íkazu na smazání bloku dat z ash pam¥ti.
ID p°íkazu Adresa 0xFF 1B
4B
59 B
Tabulka 7.12: Struktura odpov¥di Erase Flash Popis struktury odpov¥di Erase Flash z tabulky 7.12. • ID p°íkazu - 0x31. • Adresa - 4 bytová hodnota specikující adresu smazaného bloku dat.
Report je kv·li dodrºení velikost dopln¥n 59 byty 0xFF.
Kapitola 8
Realizace 8.1 Firmware Firmware vychází z ukázkového programu USB Device - HID - Simple Custom Demo od rmy Microchip. Tento ukázkový program je sou£ástí vý²e zmín¥ného USB frameworku. Projekt programu se skládá z více soubor·, ne v²echny v²ak bylo nutno upravit. Dále v textu budou uvedeny n¥které d·leºité soubory spolu se stru£ným popisem provedených úprav.
8.1.1 soubor main.c Tento soubor je hlavním souborem programu a je v n¥m obsaºena celá logika aplikace. V tomto souboru je cyklicky volána metoda ProcessIO(), která má na starosti obsluhování p°íchozích p°íkaz· a odesílání odpov¥dí na n¥. Dále se v tomto souboru nacházejí metody, které mají na starosti dal²í podp·rné £innosti. Nap°íklad metoda BlinkUSBStatus() obsluhuje blikání stavové LED diody, nebo metoda InitializeSystem() ve které se mimo jiné detekuje stisknutí tla£ítka pro vstup do bootloaderu.
8.1.2 soubor usb_descriptors.c Tento soubor je zde zmín¥n, p°estoºe v n¥m nebyly provedeny ºádné zm¥ny. Jedná se o specikaci deskriptor· (viz kapitola 2.5), v reálné aplikaci by se zde tedy zm¥ny provád¥ly. Vzhledem k charakteru této práce v²ak nem¥lo smysl deskriptory nijak m¥nit.
8.1.3 soubor HardwareProle.h Tento hlavi£kový soubor obsahuje denice pot°ebných konstant. Co se tý£e samotné aplikace, p°ibyly v tomto souboru t°i sekce. Sekce "LED" pro nastavení stavové LED diody. Sekce "SWITCH" pro nastavení tla£ítka slouºícího ke vstupu do bootloaderu. A sekce "Bootloader parameters" nastavující základní parametry mikrokontroléru pro práci bootloaderu. Tyto parametry jsou velikost ash pam¥ti, velikost EEPROM pam¥ti, adresa za£átku bootloaderu a adresa EEPROM pam¥ti. 33
34
KAPITOLA 8.
REALIZACE
8.1.4 soubor pic18f4550.lkr Posledním zde zmín¥ným souborem je linkovací soubor. Ten má na starosti umíst¥ní £ástí kódu na správné místo v pam¥ti. Co se tý£e bootloaderu, jsou v tomto souboru podstatné t°i °ádky specikující umíst¥ní uºivatelského programu, umíst¥ní bootloaderu a umíst¥ní uºivatelského reset vectoru. V ostatních souborech nebyla provedena ºádná zm¥na a jakoºto sou£ást USB frameworku zde nebudou dále rozebírány.
8.2 Klient Klientská aplikace je naprogramována objektov¥ v jazyce C++. Aplikace se skládá z objekt· vlastních t°íd, které zde budou dále podrobn¥ji popsány, a dále z objekt· t°íd knihovny Qt.
8.2.1 t°ída Memory Objekty této t°ídy slouºí k jakési simulaci ash pam¥ti a EEPROM pam¥ti za°ízení. Po navázání komunikace se vytvo°í objekt této t°ídy, který obsahuje pole byt· o stejné velikosti, jako je velikost ash pam¥ti za°ízení a také pole byt· velikosti EEPROM pam¥ti. Objekt této t°ídy pak umoº¬uje provád¥t operace s pam¥tí (nap°. na£íst HEX soubor, exportovat HEX soubor).
8.2.2 t°ída Communication Objekt této t°ídy zaji²´uje tvorbu komunika£ních report· a interpretaci p°ijatých odpov¥dí. Jako zdroj dat vyuºívá objekt t°ídy Memory a pro samotnou komunikaci vyuºívá t°ídu HIDInterface.
8.2.3 t°ída HIDInterface T°ída HIDInterface je ve své podstat¥ pouze rozhraním mezi t°ídou Communication a komunika£ní dynamicky linkovanou knihovnou MCHPHIDClass (viz kapitola 6.4.3). Tato t°ída je zde proto, aby usnadnila p°ípadnou zm¥nu komunika£ní knihovny. V tom p°ípad¥ totiº sta£í p°epsat tuto t°ídu a není nutné nic m¥nit v t°íd¥ Communication.
8.2.4 t°ída QtClient Objektem t°ídy QtClient je hlavní okno aplikace. T°ída tudíº specikuje GUI hlavního okna a reakce na jednotlivé události, které mohou nad hlavním oknem vzniknout.
8.2.5 t°ída Viewer Objektem této t°ídy je dialog zobrazující prohlíºe£ pam¥ti. Tento dialog je vyvolán jak pro vy£tení ash pam¥ti za°ízení, tak pro vy£tení EEPROM pam¥ti.
Kapitola 9
Záv¥r V této práci se mi poda°ilo splnit v²echny stanovené cíle. V teoretické £ásti práce jsem po nastudování popsal ob¥ komunika£ní rozhraní. Tento popis není zcela vy£erpávající, ale zde má £tená° získat pouze základní p°edstavu o principu fungování daného rozhraní a pro spln¥ní tohoto ú£elu je rozsah popisu podle mého názoru dosta£ující. Dále jsou zde popsány konkrétní moºnosti pouºití daných komunika£ních rozhraní. Tato £ást bude zajímavá zejména pro £tená°e, který hodlá do svého za°ízení jedno z t¥chto rozhraní implementovat. Dal²ím cílem této práce byla implementace USB bootloaderu pro mikrokontroléry Microchip PIC rodiny PIC18F. Poda°ilo se naimplementovat pln¥ funk£ní, rychlý a jednodu²e pouºitelný USB bootloader a to jak jeho £ást pro mikrokontrolér, tak £ást pro PC. Tento bootloader byl lad¥n a testován na mikrokontroléru Microchip PIC 18F4550-I/P a na PC s opera£ními systémy Microsoft Windows XP, Microsoft Windows Vista a Microsoft Windows 7. V²echny jím nabízené moºnosti byly p°i testování pln¥ funk£ní, tedy programování, mazání, vy£tení a verikace obsahu ash a EEPROM pam¥ti za°ízení. Co se tý£e moºných zlep²ení bootloaderu a tedy p°ípadn¥ pokra£ování v této práci je moºné p°idat následující funkcionality. • Podpora p°ímé editace obsahu pam¥ti v prost°edí klientské £ásti bootloaderu. • Podpora dal²ích mikrokontroléru Microchip PIC. • Moºnost programování kongura£ních bit· a ID za°ízení. • Zmen²ení celého rmwaru pomocí o°ezání nepot°ebných £ásti USB frameworku.
35
36
KAPITOLA 9.
ZÁV
R
Literatura [1] Compaq, Hewlett-Packard, Intel, Lucent, Microsoft, NEC, Philips. Universal Serial Bus Specication, Revision 2.0, 2000. http://www.usb.org/developers/docs/usb_20_050710.zip. [2] Intel Corporation. Hexadecimal Object File Format Specication, Revision A, 1988. http://microsym.com/editor/assets/intelhex.pdf. [3] J. MACH. Firmware pro USB zarízení s mikropo£íta£i PIC, 2006. Bakalá°ská práce. eské Vysoké U£ení Technické v Praze, Elektrotechnická Fakulta, Katedra Po£íta£·. https://dip.felk.cvut.cz/browse/pdfcache/machj1_2006bach.pdf, stav z 16. 5. 2010. [4] M. MALÝ. USB 2.0 - díl 1.
http://hw.cz/Rozhrani/ART1232-USB-2.0---dil-1.html, stav z 16. 5. 2010.
[5] M. MALÝ. USB 2.0 - díl 2.
http://hw.cz/Rozhrani/ART1244-USB-2.0---dil-2.html, stav z 16. 5. 2010.
[6] M. MALÝ. USB 2.0 - Typy a formáty p°enos·.
http://hw.cz/Rozhrani/ART1264-USB-2.0---Typy-a-formaty-prenosu.html, stav z
16. 5. 2010.
[7] Microchip Technology Inc. PIC18F2455/2550/4455/4550 Data Sheet, 2009. http://ww1.microchip.com/downloads/en/DeviceDoc/39632b.pdf. [8] Microchip Technology Inc. PIC18F97J60 Family Data Sheet, 2009.
http://ww1.microchip.com/downloads/en/DeviceDoc/39762e.pdf.
[9] Microchip Technology Inc. ENC424J600/624J600 Data Sheet, 2010.
http://ww1.microchip.com/downloads/en/DeviceDoc/39935c.pdf.
[10] USB Implementers' Forum. USB Device Class Denition for Human Interface Devices (HID), Version 1.11, 2001. http://www.usb.org/developers/devclass_docs/HID1_11.pdf. [11] Dopln¥k Qt pro Visual Studio.
http://qt.nokia.com/downloads/visual-studio-add-in, stav z 16. 5. 2010.
[12] Web spole£nosti ASIX.
http://www.asix.cz/ stav z 15. 5. 2010.
37
38
LITERATURA
[13] Microsoft .NET Framework.
http://www.microsoft.com/net/, stav z 16. 5. 2010.
[14] Wikipedia - FireWire.
http://en.wikipedia.org/wiki/IEEE_1394_interface, stav z 26. 5. 2010.
[15] Microchip ICD2.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE &nodeId=1406&dDocName=en010046, stav z 16. 5. 2010.
[16] Webová prezentace IEEE. http://www.ieee.org/, stav z 26. 5. 2010. [17] Wikipedia - ISO/OSI.
http://en.wikipedia.org/wiki/OSI_model, stav z 26. 5. 2010.
[18] GNU LGPL v2.1, 1999.
http://www.gnu.org/licenses/lgpl-2.1.html, stav z 16. 5. 2010.
[19] MCC18 - MPLAB C Compiler for PIC18 MCUs.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE &nodeId=1406&dDocName=en010014, stav z 16. 5. 2010.
[20] Web spole£nosti Microchip.
http://www.microchip.com/, stav z 16. 5. 2010.
[21] Microchip MPLAB IDE.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE &nodeId=1406&dDocName=en019469&part=SW007002, stav z 16. 5. 2010.
[22] MSDN Academic Alliance.
http://msdn.microsoft.com/en-us/academic/default.aspx, stav z 16. 5. 2010.
[23] Popis vývojové desky ASIX PVK40. http://www.asix.cz/a6pvk40.htm, stav z 15. 5. 2010. [24] Gracká knihovna Qt.
http://qt.nokia.com/, stav z 16. 5. 2010.
[25] Popis modulu SPINET.
http://www.asix.cz/a6_spinet.htm, stav z 15. 5. 2010.
[26] Tiny PIC bootloader.
http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm,
stav z 15. 5. 2010.
[27] Microchip USB Framework for PIC18, PIC24 & PIC32.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE &nodeId=2680&dDocName=en537044E, stav z 16. 5. 2010.
[28] Webová prezentace USB-IF.
http://www.usb.org/developers, stav z 26. 5. 2010.
LITERATURA
[29] Microsoft Visual Studio 2008.
http://www.microsoft.com/cze/msdn/produkty/vstudio/default.mspx,
stav z 16. 5. 2010.
[30] Wikipedia - konektor 8P8C.
http://en.wikipedia.org/wiki/8P8C, stav z 25. 5. 2010.
39
40
LITERATURA
P°íloha A
Instala£ní p°íru£ka A.1 Instalace rmwaru V první °ad¥ je nutné mít kompatibilní mikrokontrolér (viz tabulka A.1) umíst¥ný ve vývojové desce, resp. cílové aplikaci, která spl¬uje poºadavky bootloaderu na vývojovou desku (viz kapitola 6.3).
Rodina
Modely
PIC18F2455 PIC18F2455/2550/4455/4550 PIC18F2458 PIC18F2458/2553/4458/4553 Tabulka A.1: Mikrokontroléry kompatibilní s tímto bootloaderem Dále je pro instalaci nutné mít nainstalované vývojové prost°edí Microchip MPLAB IDE [21], p°eklada£ MCC18 [19], USB framework [27] a mít k dispozici externí programátor. Postup instalace: 1. Ve vývojovém prost°edí otev°ít projekt USB Bootloader PIC18F. 2. V okn¥ View->Project p°idat do sloºky "Linker Script" linkovací skript odpovídající zvolenému mikrokontroléru (nap°. pic18f4550.lkr pro PIC18F4550). 3. V nabídce Congure->Select Device vybrat zvolený typ mikrokontroléru. 4. Otev°ít soubor HardwareProle.h. 5. V tomto souboru najít sekci LED a v ní upravit funkce mInitLED() a mLED tak, aby zvolený port odpovídal p°ipojené stavové LED diod¥. 6. V sekci SWITCH upravit funkce mInitButton() a mButton() tak, aby zvolený port odpovídal p°ipojenému tla£ítku slouºícímu pro vstup do bootloaderu. Dále je nutno upravit denici mButtonPolarity na hodnotu 1 nebo 0, podle logické hodnoty daného portu p°i stisknutém tla£ítku. 41
42
PÍLOHA A.
INSTALANÍ PÍRUKA
7. V poslední sekci souboru je nutno nastavit velikost ash pam¥ti za°ízení a po£áte£ní adresu bootloaderu, která se musí rovnat Velikosti_pam¥ti−6976 byt·. Obdobným zp·sobem je nutné nastavit je²t¥ velikost EEPROM pam¥ti a po£áte£ní adresu, pod kterou bude EEPROM pam¥´ vystupovat. 8. Po uloºení zm¥n v souboru HardwareProle.h jiº sta£í pouze projekt zkompilovat a naprogramovat jej pomocí externího programátoru do pam¥ti za°ízení. 9. V této chvíli by m¥l být bootloader v za°ízení p°ipraven k pouºití.
A.2 Instalace klienta Klientská £ást aplikace pro svoji £innost vyºaduje opera£ní systém Microsoft Windows XP a vy²²í s nainstalovaným .NET frameworkem 2.0. Instalace samotného klienta spo£ívá pouze ve zkopírování sloºky s programem a dynamicky linkovanými knihovnami na pevný disk PC. Poté je jiº moºno program spustit a pouºívat.
P°íloha B
Uºivatelská p°íru£ka Vývojovou desku zapn¥te a pomocí USB p°ipojte k PC. Poté spus´te klientskou aplikaci. Na obrázku B.1 je vid¥t hlavní okno aplikace. V horní £ásti okna je textové pole pro výb¥r vstupního HEX souboru. Napravo od n¥j se nachází tla£ítko pro gracké procházení PC a tudíº snaz²í výb¥r vstupního souboru. V pravé £ásti okna vidíme okno s historií provedených operací v rámci tohoto spu²t¥ní aplikace. Nalevo je umíst¥n panel s hlavními ovládacími tla£ítky. Vespodu okna se nachází indikátor pr·b¥hu aktuální operace a stavový °ádek.
Obrázek B.1: Hlavní okno aplikace Aplikace automaticky detekuje p°ipojení za°ízení. Abychom p°epnuli za°ízení do reºimu bootloaderu musíme do cca 2 sekund po resetu za°ízení stisknout k tomu ur£ené tla£ítko na vývojové desce. Úsp¥²ný p°echod do reºimu bootloaderu je signalizován trvalým svícením 43
44
PÍLOHA B.
UIVATELSKÁ PÍRUKA
stavové LED diody. Po p°ipojení za°ízení v reºimu bootloaderu k PC za£ne opera£ní systém instalovat pot°ebné ovlada£e a provede enumeraci (viz kapitola 2.6) a p°ipojení za°ízení. Úspe²né p°ipojení za°ízení k opera£nímu systému je signalizováno pravidelným blikáním stavové LED diody. Pokud bliká stavová LED dioda, m¥lo by být za°ízení detekováno klientským softwarem. V tom p°ípad¥ se zaktivují ovládací tla£ítka a aplikace vypí²e základní zji²t¥né parametry za°ízení. Ovládací panel se skládá z p¥ti tla£ítek, p°i£emº £innost ºádného z nich neprovádí ºádné zm¥ny v té £ásti pam¥ti, ve které je nahrán bootloader.
B.1 Tla£ítko Naprogramovat za°ízení Stisknutím tohoto tla£ítka se provede naprogramování obsahu zvoleného HEX souboru do za°ízení. Po stisknutí se provedou následující operace. Na£tení vstupního HEX souboru, smazání, naprogramování a verikace ash pam¥ti. Pokud je za°ízení vybaveno pam¥tí EEPROM dojde je²t¥ ke smazání, naprogramování a verikaci EEPROM pam¥ti.
B.2 Tla£ítko Vymazat za°ízení Stisknutím tohoto tla£ítka se provede smazání uºivatelského obsahu ash pam¥ti a smazání obsahu EEPROM pam¥ti. Provedení smazání se nijak neverikuje.
B.3 Tla£ítko Vy£íst ash pam¥´
Obrázek B.2: Prohlíºe£ pam¥ti
B.4.
TLAÍTKO VYÍST EEPROM PAM
45
Po stisknutí tohoto tla£ítka dojde k vy£tení obsahu ash pam¥ti, který je následn¥ zobrazen v novém okn¥ aplikace. Toto okno je zobrazeno na obrázku B.2. Co bu¬ka tabulky, to jeden byte pam¥ti, p°i£emº v jedné °ádce tabulky je vºdy 16 bun¥k, tedy 16 po sob¥ jdoucích byt· pam¥ti. ed¥ podbarvené bu¬ky ozna£ují £ást pam¥ti pat°ící bootloaderu.
B.4 Tla£ítko Vy£íst EEPROM pam¥´ Stisknutí tohoto tla£ítka zp·sobí vy£tení EEPROM pam¥ti a její zobrazení v nov¥ otev°eném okn¥. Toto okno je aº na ²edé ozna£ení bu¬ek totoºné s oknem na obrázku B.2.
B.5 Tla£ítko Vy£íst za°ízení do souboru Po stisknutí tohoto tla£ítka budete dotázáni na název souboru, do kterého má být proveden export obsahu za°ízení. Po potvrzení výb¥ru souboru se provede vy£tení obsahu za°ízení a ten bude vyexportován do zvoleného souboru ve formátu HEX.
46
PÍLOHA B.
UIVATELSKÁ PÍRUKA
P°íloha C
Seznam pouºitých zkratek BD Buer Descriptor BDT Buer Descriptor Table CRC Cyclic Redundancy Check CSMA/CD Carrier Sense Multiple Access with Collision Detection DMA Direct Memory Access EOP End of Packet FCS Frame Check Sequence FIFO First In, First Out GUI Graphical User Interface HID Humam Interface Device ICSP In-Circuit Serial Programming IEEE Institute of Electrical and Electronics Engineers LED Light-Emitting Diode LGPL Lesser General Public License MAC Media Access Control MCLR Master Clear MSDNAA Microsoft Developer Network Academic Alliance PDA Personal Digital Assistant PID Packet ID RAM Random-Access Memory 47
48
SFD Start of Frame Delimiter SIE Serial Interface Engine SPI Serial Peripheral Interface USB Universal Serial Bus USB-IF USB Implementers Forum
PÍLOHA C.
SEZNAM POUITÝCH ZKRATEK
P°íloha D
Obsah p°iloºeného CD / |-|-| | |-|-| `--
Firmware Klient |-- bin `-- source Test-hex Text `-- source README.TXT
/Firmware/ Zdrojové kódy rmwaru aplikace. /Klient/bin/ Spustitelná klientská aplikace v£etn¥ pot°ebných dynamicky linkovaných knihoven.
/Klient/source/ Zdrojové kódy klientské aplikace. /Test-hex/ Hex soubory slouºící pro testování bootloaderu na mikrokontroléru PIC18F4550. /Text/ Sloºka obsahující pdf soubor s tímto textem. /Text/source/ Zdrojové kódy tohoto textu.
49