1. Úvod Controller Area Network (CAN) je sériová sběrnice vyvinutá firmou Bosch pro použití v automobilech. Je zvláště vhodná pro propojení „inteligentních“ zařízení jakož i senzorů a ovládacích členů v systému nebo podsystému. První obvody umožňující realizaci spojení používající CAN protokol na linkové vrstvě ISO/OSI referenčního modelu byly na trhu k dispozici již v roce 1989. Vzhledem k relativní jednoduchosti, malým nákladům a vlastnostem podporujících řízení v reálném čase se CAN rozšířila i do mnoha dalších aplikací automatizace a řízení a v dnešní době je již k dispozici cca 50 řadičů CAN od více než 15 výrobců. S rozšířením této sběrnice vyvstala pro potřeby vývoje, řízení a diagnostiky také potřeba jejího připojení k osobním počítačům. Ne všechny počítače však disponují možností rozšíření o řadič CAN, zejména přenosné počítače. Většina dnešních počítačů je však vybavena jinou sériovou sběrnicí, USB. Cílem této práce je návrh technických a programových prostředků k realizaci připojení sběrnice CAN k osobním počítačům přes USB.
2. Standard CAN 2.1. Základní koncept Vlastnosti CAN: ● ● ● ● ● ● ● ● ● ●
Přenosová rychlost až 1 Mbit/s Prioritizace zpráv Zaručené zpoždění Flexibilita konfigurace Příjem multicast zpráv s časovou synchronizací Konzistence dat v systému Multimaster Detekce a korekce chyb Automatické opakované vyslání poškozené zprávy při uvolnění sběrnice Rozlišení mezi přechodnými chybami a trvalým selháním stanic a jejich automatické odpojení
1
Zprávy Informace je po sběrnici posílána v pevném formátu zpráv různé, ale omezené délky. Kdykoli je sběrnice volná, kterákoli připojená stanice může začít vysílat novou zprávu. V CAN systémech CAN stanice nepoužívají žádných informací o konfiguraci systému (adresy stanic). To má několik důležitých důsledků: ●
●
●
●
Flexibilita systému – stanice mohou být do systému přidány bez jakékoli změny v hardware nebo software kterékoli stanice nebo aplikace. Směrování zpráv – obsah zprávy je pojmenován IDENTIFIKÁTORem, který neurčuje cíl zprávy, ale popisuje význam dat, takže všechny stanice v síti se mohou na základě filtrování zpráv rozhodnout, zda zprávu přijmou či nikoli. Multicast – v důsledku konceptu filtrování zpráv může jakýkoli počet stanic přijmout a současně reagovat na tu samou zprávu. Konzistence dat – v CAN je zaručeno, že zpráva je přijata současně buď všemi nebo žádnou ze stanic, tudíž konzistence dat v systému je dosažena koncepty multicastu a ošetření chyb.
Přenosová rychlost Rychlost sběrnice může být v různých systémech různá, avšak v daném systému je rychlost jednotná a pevná. Priority IDENTIFIKÁTOR definuje statickou prioritu zprávy během přístupu na sběrnici. Vyžádání dat Zasláním REMOTE FRAME může stanice vyžadující data požádat jinou stanici o zaslání DATA FRAME. DATA FRAME a REMOTE FRAME jsou pojmenovány stejným IDENTIFIKÁTORem. Multimaster Pokud je sběrnice volná, jakákoli stanice může začít vysílat zprávu. Stanice se zprávou nejvyšší priority získá přístup ke sběrnici.
2
Arbitráž Kdykoli je sběrnice volná, může kterákoli stanice začít vysílat zprávu. Jestliže 2 nebo více stanic začne vysílat ve stejnou dobu, konflikt při přístupu ke sběrnici je vyřešen bitově orientovanou arbitráží pomocí IDENTIFIKÁTORu. Mechanismus arbitráže zaručuje, že žádná informace ani časový úsek nejsou ztraceny. Jestliže je současně vysílán REMOTE FRAME a DATA FRAME se stejným IDENTIFIKÁTORem, zvítězí DATA FRAME. Během arbitráže každý vysílač porovnává úroveň vysílaného bitu s úrovní detekovanou na sběrnici. Pokud jsou obě úrovně shodné, může stanice pokračovat ve vysílání. Jestliže je vysílána „recesivní“ úroveň a detekována na sběrnici je úroveň „dominantní“, musí stanice okamžitě přestat vysílat. Bezpečnost Z důvodu dosažení maximální bezpečnosti při přenosu je do každé CAN stanice implementována silná detekce, signalizace a samočinná kontrola chyb. Detekce chyb ●
● ● ●
Monitorování (vysílače porovnávají úroveň vysílaného bitu s detekovanou úrovní na sběrnici). CRC Vkládání bitů Kontrola rámce zprávy
Spolehlivost detekce chyb Vlastnosti mechanismu detekce chyb: ● ● ● ● ●
Jsou detekovány všechny globální chyby Jsou detekovány všechny lokální chyby ve vysílačích Je detekováno až 5 náhodně rozprostřených chyb ve zprávě Ve zprávě jsou detekovány shluky chyb až do délky 15 Ve zprávě jsou detekovány chyby jakéhokoli lichého počtu
3
Signalizace chyb a doba zotavení Poškozené zprávy jsou označeny kteroukoli stanicí detekující chybu. Takové zprávy jsou zrušeny a budou automaticky poslány znovu. Doba zotavení od detekce chyby do začátku vysílání další zprávy je nejvýše 31 bitů, pokud nedošlo k dalším chybám. Omezení selhání CAN stanice jsou schopny rozlišit mezi krátkým rušením a trvalým selháním. Vadné stanice jsou odpojeny. Spojení Sériová komunikační linka CAN je sběrnice, ke které může být připojeno množství stanic. Toto množství nemá teoretický limit. Prakticky bude počet stanic omezen zpožděním a elektrickým zatížením linky. Úrovně sběrnice Sběrnice může nabývat dvou komplementárních logických hodnot: „dominantní“ a „recesivní“. Během současného přenosu „dominantního“ a „recesivního“ bitu převládne „dominantní“ bit. Například v případě implementace funkce AND na přenosovém médiu bude „dominantní“ úroveň reprezentována logickou „0“ a „recesivní“ úroveň logickou „1“. Potvrzování Všechny vysílače kontrolují konzistenci přijaté zprávy a buď potvrzují v pořádku přijaté zprávy nebo označí vadné. Režim spánku/probuzení Aby se snížila spotřeba systému, může být CAN stanice přepnuta do režimu spánku (bez jakýchkoli vnitřních aktivit a s odpojenými budiči sběrnice). Režim spánku může být ukončen detekovanou aktivitou na sběrnici nebo vnitřními podmínkami stanice. Při probuzení jsou vnitřní aktivity stanice restartovány, MAC vrstva stanice čeká na stabilizaci oscilátoru a poté se synchronizuje se sběrnicí. Po dokončení synchronizace jsou připojeny budiče sběrnice. 4
Tolerance oscilátoru Tolerance oscilátoru je omezena 1,58%, tedy pro rychlosti do 125 Kb/s je možno využít keramické rezonátory, pro vyšší frekvence je nutné použít krystal.
2.2. Zprávy Formáty rámců Existují dva formáty rámců, lišící se délkou pole IDENTIFIKÁTOR. Rámce s 11bitovým IDENTIFIKÁTORem jsou Standardní rámce, rámce s 29bitovým IDENTIFIKÁTORem jsou Rozšířené rámce. Typy rámců Přenos zpráv je zajištěn a řízen čtyřmi typy rámců: ● ●
● ●
DATA FRAME přenáší data od vysílače k přijímači. REMOTE FRAME je vyslán stanicí, požadující přenos DATA FRAME se stejným IDENTIFIKÁTORem. ERROR FRAME je vyslán jakoukoli stanicí detekující chybu na sběrnici. OVERLOAD FRAME je používán k poskytnutí zvláštní prodlevy mezi předchozím a následujícím DATA FRAME nebo REMOTE FRAME.
DATA FRAME a REMOTE FRAME mohou být použity v obou formátech (standardní, rozšířený) a jsou navzájem odděleny Mezirámcovým prostorem. DATA FRAME DATA FRAME sestává ze sedmi bitových polí: začátku rámce, arbitrážního pole, řídícího pole, datového pole, kontrolního pole, potvrzovacího pole, a konce rámce. Datové pole může mít nulovou délku. Začátek rámce Začátek rámce (SOF) označuje počátek DATA FRAME a REMOTE FRAME. Sestává z jednoho „dominantního“ bitu. Stanici je povoleno začít vysílat pouze když je sběrnice v klidu. Všechny uzly se musí synchronizovat s touto náběžnou hranou SOF.
5
Arbitrážní pole Formát arbitrážního pole závisí na typu rámce. V standardním rámci má arbitrážní pole 11 bitů IDENTIFIKÁTORu a 1 RTR bit. Bity IDENTIFIKÁTORu se označují ID28…ID18. V rozšířeném rámci má arbitrážní pole 29 bitů IDENTIFIKÁTORu, SRR bit, IDE bit a RTR bit. Bity IDENTIFIKÁTORu se označují ID28…ID0. Z důvodu rozlišení mezi standardním a rozšířeným rámcem dostal rezervovaný bit „r1“ funkci IDE bitu.
Obrázek 2.2.1. Datový rámec IDENTIFIKÁTOR IDENTIFIKÁTOR má ve standardním formátu délku 11 bitů a odpovídá tzv. BASE ID v rozšířeném formátu. Tyto bity jsou vysílány v pořadí od ID28 k ID18. Nejméně významným bitem je ID18. Ze sedmi nejvýznamnějších bitů (ID28 – ID22) musí být alespoň jeden bit „dominantní“. V rozšířeném formátu je IDENTIFIKÁTOR rozšířen o dalších 18 bitů (EXTENDED ID). Jsou vysílány v pořadí od ID17 k ID0.
6
V standardním rámci je IDENTIFIKÁTOR následován RTR (Remote Transmission Request) bitem. DATA FRAME má tento bit „dominantní“, REMOTE FRAME „recesivní“. SRR bit SRR (Substitute Remote Request) bit v rozšířeném rámci nahrazuje RTR bit standardního rámce. Jde o „recesivní“ bit, tudíž je v případě kolize standardního rámce a rozšířeného rámce se stejným ID upřednostněn standardní rámec.
Obrázek 2.2.2. Detail datového rámce IDE bit IDE (IDentifier Extension) bit leží ve standardním rámci v řídícím poli, v rozšířeném rámci v arbitrážním poli. Ve standardním rámci je vysílán „dominantní“, v rozšířeném „recesivní“.
7
Řídící pole Řídící pole sestává z šesti bitů, ve standardním formátu to jsou 4 bity délky dat (DLC), „dominantní“ IDE bit a rezervovaný bit „r0“. V rozšířeném formátu jsou to 4 bity DLC a rezervované bity „r0“ a „r1“. Tyto bity musí být vysílány dominantní, ale přijímače akceptují obě úrovně. DLC 4 bity udávající délku datového pole v bajtech mají povoleny hodnoty <0..8>. Hodnota 0 je kódována „dominantními“ bity. Datové pole Datové pole může mít délku 0 – 8 bajtů po 8 bitech vysílaných nejvýznamnějším bitem jako prvním. Kontrolní (CRC) pole Obsahuje 15bitový kontrolní součet (CRC) všech předcházejících bitů vč. SOF. Následuje jeden „recesivní“ bit jako oddělovač. Potvrzovací pole Obsahuje 2 „recesivní“ bity. Příjemce, který obdrží zprávu v pořádku, nastaví první z těchto bitů na „dominantní“ úroveň. Konec rámce Každý DATA FRAME a REMOTE FRAME je oddělen sérií sedmi „recesivních“ bitů. REMOTE FRAME Přijímací uzel si může zažádat o zaslání dat vysláním REMOTE FRAME. Od DATA FRAME se liší tím, že nemá datové pole a RTR bit má „recesivní“ úroveň. Jeho čtyřbitové pole DLC určuje délku <0..8> datového pole očekávaného DATA FRAME. Chybový rámec, rámec přetížení a mezirámcový prostor Mimo rámce uvedené dříve ještě existují chybové rámce, kterými stanice signalizují detekovaný chybový stav na sběrnici, rámce přetížení, kterými může přijímací stanice pozdržet vyslání dalšího DATA FRAME nebo REMOTE FRAME (maximálně ale 2x po sobě) a mezirámcový prostor, ve kterém stanice detekují klidový stav sběrnice (a tedy možnost zahájení vlastního vysílání). Detaily nejsou pro tuto 8
práci podstatné, zájemce odkazuji na specifikaci.
2.3. Filtrování zpráv Filtrování zpráv je zcela založeno na IDENTIFIKÁTORu. Volitelné registry masek dovolují mapovat určité skupiny IDENTIFIKÁTORů na vyrovnávací paměti přijímače. Délka registru masky může zahrnovat celý IDENTIFIKÁTOR nebo jen jeho část.
2.4. Platnost zpráv Okamžik, kdy je zpráva uznána platnou, se u příjemce a vysílače liší. Pro vysílač je tímto okamžikem konec pole, označujícího konec rámce. Pokud je zpráva poškozena, je automaticky poslána znovu s ohledem na její prioritu. Arbitráž o nový přístup ke sběrnici začíná ihned poté, kdy je detekován klidový stav na sběrnici. Pro příjemce je tímto okamžikem předposlední bit pole, označujícího konec rámce.
2.5. Kódování Bitový tok polí začátek rámce (SOF), arbitrážní pole, řídící pole, datové pole a kontrolní (CRC) pole je kódován metodou NRZ (NoReturntoZero). Ostatní pole mají pevnou formu a nejsou metodou NRZ upravována.
2.6. Fyzická vrstva Fyzická vrstva může být v podstatě realizována jakýmkoli médiem, schopným reprezentovat „recesivní“ a „dominantní“ úroveň. Elektrická a optická média jsou tudíž samozřejmostí. Je možné i vysílání bezdrátové a vysílání po napájecím vedení. Pro optická média standard neexistuje, pro elektrická média jich je na výběr několik: ●
ISO 118982 (vysokorychlostní) je nejpoužívanějším standardem v CAN. Rychlost až 1 Mb/s s teoretickou délkou sběrnice 40 m při 1 Mb/s. Jde o diferenciální dvouvodičovou sběrnici s napěťovými úrovněmi –2 V a +7 V, se zakončovací rezistancí 120 Ohmů. Pro automobilový průmysl byla vydána specifikace SAE J2284, pro ostatní aplikace je možno použít doporučení CiA 102.
9
●
●
●
ISO 118983 (odolná vůči chybám) umožňuje přenos dat asymetricky po jednom vodiči v případě výpadku druhého. Definuje rychlosti do 125 Kb/s s 32 uzly a napěťovými úrovněmi –2 V a +7 V. Napájecí napětí je stanoveno na 5 V. Předpokládá malou rozlohu sítě a možnost použití nezakončené sběrnice. SAE J2411 (jeden vodič) – rychlost do 33,3 Kb/s (83,3 Kb/s pro diagnostiku), do 32 uzlů, standard zahrnuje selektivní režim spánku. ISO 11992 (bodbod) – sériové zapojení uzlů, rychlost 125 Kb/s, délka sběrnice 40 m, jako médium je definována nestíněná kroucená dvoulinka, napájecí napětí 12 V nebo 24 V.
2.7. Omezení selhání S ohledem na omezení selhání sítě jsou pro každou stanici definovány 3 možné stavy: ● ● ●
„error active“ „error passive“ „bus off“
Každá stanice obsahuje 2 čítače chyb: čítač chyb při příjmu a čítač chyb při vysílání. S ohledem na závažnost chyby při příjmu/vysílání jsou tyto čítače zvyšovány o jistou hodnotu, při příjmu/vyslání rámce bez chyby jsou čítače snižovány o 1. Při běžném provozu na sběrnici se stanice nacházejí ve stavu „error active“, kdy se aktivně podílejí na komunikaci a při detekci chyby vysílají příznak chyby ACTIVE ERROR FLAG. Při překročení hodnoty 127 v některém z čítačů se stanice přepne do stavu „error passive“ , ve kterém je jí dovolena komunikace po sběrnici, ale při detekci chyby vysílá pouze příznak PASSIVE ERROR FLAG a po vysílání musí jistou dobu čekat, než smí zahájit další vysílání (jsou upřednostněny „zdravé“ uzly). Pokud některý z čítačů přesáhne hodnotu 255, stanice odpojí své budiče sběrnice a přestane se podílet na komunikaci na sběrnici. Stanici je dovoleno přejít zpět do stavu „error active“ poté, co jsou oba její čítače vynulovány po 128 detekcích 11 „recesivních“ bitů na sběrnici. (Poznámka: Hodnota 96 a vyšší je již známkou silně rušené sběrnice.)
10
3. USB Standard USB je vzhledem ke svému rozšíření již dobře znám a proto se zde omezím jen na některé skutečnosti, které jsem při návrhu převodníku bral v úvahu. Zájemce o detaily standardu USB odkazuji na specifikaci protokolu na internetu. NAPÁJENÍ USB zařízení smí v režimu obecného zařízení (stav před registrací zařízení u hostitele, tzv. enumerací) odebírat maximálně 100 mA. Taktéž zařízení s vlastním napájením smí odebírat maximálně 100 mA. Z toho důvodu je nutné zařízení napájené z USB navrhnout tak, aby v počáteční fázi nepřekročila jeho spotřeba tuto hranici. Během identifikace zařízení hostitelem v procesu enumerace je možné si pro zařízení napájené pouze z USB vyjednat až 500 mA (v takovém případě je nutné, aby USB zařízení nesdílelo tzv. „Root port“ s dalšími zařízeními napájenými z USB). REŽIMY PŘENOSU Vzhledem k různým požadavkům zařízení na přenos dat standard USB definuje tyto režimy přenosu: ●
●
●
„BULK“ určený pro přenos velkého množství dat bez nároku na přenosovou kapacitu a zpoždění (přístup ke sběrnici je přidělován systémem besteffort „co zbude“). Maximální velikost dat je 64 B pro rychlá zařízení (12 Mb/s – tzv. FULLSPEED), 8 B pro pomalá (1,5 Mb/s). Je zaručeno doručení dat (automatické opakování vysílání dat v případě chyby při přenosu). Je dostupný pouze FULLSPEED zařízením. „INTERRUPT“ určený pro občasný přenos malého množství dat a zařízení při něm má zaručenu periodu přístupu ke sběrnici mezi dvěma po sobě jdoucími přenosy (1 ms až 255 ms pro rychlá zařízení a 10 ms až 255 ms pro pomalá zařízení). Maximální velikost dat je 64 B pro rychlá zařízení, 8 B pro pomalá. Při chybě při přenosu jsou data automaticky vyslána znovu v příští periodě (garantované doručení dat). ISOCHRONNÍ (IN, OUT, IN/OUT) – určený pro přenos konstantního množství dat v pravidelných intervalech (je ohraničeno zpoždění). Maximální velikost dat je 1023 B. USB řadiče při něm nezajišťují opětovný přenos při chybách při přenosu. Je dostupný pouze FULLSPEED zařízením. 11
●
ŘÍDÍCÍ – určený především pro přenos příkazů, konfiguračních dat a stavu zařízení. Maximální velikost dat je 64 B pro rychlá zařízení, 8 B pro pomalá. Chyby při přenosu jsou napravovány opětovným vysláním dat. V tomto řežimu přenosu si není možno nárokovat konkrétní části přenosové kapacity, je přidělována systémem „co zbude“.
U režimů přenosu, kde je jistá vlastnost garantována, je její splnění zaručeno během celé doby aktivní funkce zařízení, neboť schopnost dodržet vyjednané parametry hostitelský USB řadič předem zjišťuje (při procesu enumerace) na základě vyjednaných parametrů s ostatními zařízeními, které se registrovaly dříve. Pokud je hostitelský USB řadič schopen svým závazkům dostát, je zařízení přijato, jinak je enumerace neúspěšná. Následující tabulka uvádí mezní hodnoty pro přenosovou kapacitu a počet přenosů v rámci jednoho přiděleného přístupu na sběrnici pro různé režimy přenosu a velikosti přenášených dat (paketů) pro FULLSPEED zařízení: Režim
Velikost dat
přenosu
Maximá lní
Maximá lní
přenosová
počet přenosů
Užitečn á data
kapacita (B/s) „Bulk“
1
107000
107
107
„Interrupt“
1
107000
107
107
Isochronní
1
150000
150
150
Řídící
1
32000
32
32
„Bulk“
64
1216000
19
1216
„Interrupt“
64
1216000
19
1216
Isochronní
1023
1023000
1
1023
Řídící
64
832000
13
832
Maximální počet přenosů znamená maximální MOŽNÝ počet přenosů, nikoli počet zaručený. Např. v případě „Interrupt“ režimu při vyjednání 1 ms intervalu je zaručena pouze možnost poslat jeden USB „paket“ o délce 64 B každou milisekundu, nikoli všech možných 19 paketů za milisekundu (to závisí na zatížení sběrnice).
12
S ohledem na výše uvedené skutečnosti se mi jeví pro převodník jako nejvýhodnější režim přenosu režim „Interrupt“ a to z těchto důvodů: ●
●
●
Poskytuje určitou záruku zpoždění – data lze odesílat v intervalu 1 ms. Převodník by tak bylo možné použít pro řízení v reálném čase (u systémů bez extrémních nároků na těsnost zpětné vazby). Odpadá režie ovladačů s ošetřením chyb při přenosu na rozdíl od isochronního režimu. Maximálně využívá přenosovou kapacitu USB (v případě nezatížené sběrnice nebo pokud je zařízení k „Root portu“ USB hostitele připojeno jako jediné).
Poznámka: Z předchozí kapitoly vyplývá, že vzhledem k délce CAN zpráv a rychlosti CAN sběrnice tato dokáže „generovat“ za 1 ms několik zpráv. Z toho důvodu by bylo výhodné vzhledem k režii ovladačů CAN a USB v převodníku a vzhledem k využití přenosové kapacity USB, aby se zprávy přes USB neposílaly vždy jednotlivě, ale pokud se jich během onoho min. 1 ms intervalu USB vyskytne více, sloučit je do jednoho USB „paketu“. Zvětší se tím sice mírně zpoždění doručování zpráv (kvůli zvýšení režie ovladače z důvodu zavedení komunikačního protokolu nad USB), ale v případě použití převodníku pro intenzivní řízení nebo průběžnou (online) diagnostiku na více zatížené sběrnici CAN by se tak podstatně zvýšila přenosová kapacita převodníku. Z výše uvedených poznatků vyplývá, že je tedy reálně nutné počítat se zpožděním takového převodníku v řádu několika málo milisekund. Je také vhodné implementovat v převodníku větší vyrovnávací paměť (i pro možnost offline zpracování přijatých CAN zpráv).
13
4. Hardware V této kapitole jsou popsány technické prostředky převodníku, navržené v rámci diplomové práce.
4.1. MCU Vzhledem ke skutečnostem uvedeným v předchozí kapitole byl (i s ohledem na cenu) jako základ převodníku vybrán jednočipový mikropočítač fy Hitachi H8S2638 (dále jen MCU). Na katedře řídící techniky byl již použit i v jiných projektech, jeho mechanické vlastnosti nevyžadují speciální zacházení a jsou pro něj k dispozici i základní programové prostředky (GNU C, program pro zavádění software do paměti přes integrované sériové rozhraní). Jeho srdcem je 32bitový CISC procesor řady H8S/2600, který většinu instrukcí, nemajících operandy uložené v paměti, provede v jednom cyklu procesoru. Vzhledem k maximální pracovní frekvenci až 20 MHz je tak s ohledem na předpokládané využití převodníku dostatečně výkonný. Stručná charakteristika MCU: ● ● ● ● ● ● ● ● ● ● ● ●
32bitový CISC procesor Pracovní frekvence až 20 MHz Sdílený adresní prostor 16 MB pro I/O a paměť Kompatibilní s CPU řady H8/300 10 vstupněvýstupních bran (I/O portů), 2 vstupní porty Watchdog, časovač, pulsní generátor PWM pro řízení motorů 2x rozhraní CAN 2x sériové rozhraní (SCI) D/A a A/D převodník 256 KB vnitřní FLASH ROM, 16 KB vnitřní RAM Napájecí napětí 5 V, maximální odběr proudu 90 mA (při 20 Mhz).
14
4.2. Řadič USB Jako řadič USB byl vybrán obvod fy Philips PDIUSBD12, který je dostupný i v maloobchodní síti a taktéž je již na katedře využíván. Tento obvod obsahuje mimo povinného řídícího kanálu (endpointu) 0 ještě jeden nízkorychlostní endpoint a jeden vysokorychlostní endpoint (až 1 MB/s) se zdvojenou vyrovnávací pamětí (2x 64 B). Endpointy mohou pracovat v režimech: „bulk“, „interrupt“, isochronní vstupní, isochronní výstupní a isochronní vstupněvýstupní. Stručná charakteristika PDIUSBD12: ● ● ● ● ● ●
Vyhovuje USB specifikaci 2.0 (základní rychlost) 2 MB/s paralelní rozhraní Zcela autonomní DMA pro vysokorychlostní endpoint 3 endpointy Až 1 MB/s v režimech „bulk“ a „interrupt“ Napájecí napětí 3,3 V nebo 5 V, maximální odběr proudu 15 mA
4.3. Převodník Převodník je navržen jako modulární, aby bylo možno jej využít i pro jiné účely. Základ tvoří MCU s obvody pro CAN, RS232 a USB rozhraní, paměť se k této základní desce připojuje pomocí konektoru s vyvedenou adresní a datovou sběrnicí a řídícími signály (RD_N, LWR_N, HWR_N, AS_N, CS2_N a CS3_N). Desku je možno napájet jak z USB, tak z externího zdroje napětí 5 V, které se na desku přivádí přes 2 pinový konektor (header). Pro výběr zdroje napájecího napětí (USB / externí) je v návrhu použit multiplexer TPS2115A fy Texas Instruments, zvládající proud do 1,25 A, což je tudíž limitem pro celkovou spotřebu desky včetně modulu paměti. Jako výchozí zdroj napájení je určen externí zdroj. Aktuální zdroj napájení je hlášen MCU na jednom z jeho portů (řídícím portem desky je port J). Aby bylo možno zařízení napájet z USB, je napájení pro obvody pro CAN a paměťový modul po RESETu blokováno MOSFETem, řízeným signálem PVCC_ENA_N z portu J MCU. Dále je použit 5 MHz krystal pro snížení spotřeby MCU do vyjednání vyššího odběru z USB, kdy může být frekvence MCU vnitřním PLL programově zvýšena až na čtyřnásobek (MCU má v takovém případě odběr až 90 mA). Součástí desky jsou 3 LED pro ladící účely, připojené k řídícímu portu J.
15
Obrázek 4.3.1. Blokové schéma převodníku
4.3.1. Rozhraní RS232 Vodiče pro příjem (Rx) a vysílání (Tx) programovacího sériového rozhraní MCU (SCI1) používané MCU k nahrání software do vnitřní RAM, jsou na desce vyvedeny přes obvod MAX232 na standardní DB9F konektor pro RS232 (DCE). Zbylé datové vodiče obvodu MAX232 byly použity pro signály hardwarového řízení toku (RTS1, CTS1), připojené k řídící bráně MCU (RTS1 port J) a na vstupní vývod MCU pro přerušení (CTS1 IRQ5_N). Druhé sériové rozhraní (SCI0) (Rx, Tx) spolu se signály RTS0 a CTS0 (IRQ4_N) je vyvedeno v TTL úrovních na vnitřní konektor. Je určeno především pro ladící účely. Schopnost MCU reagovat jak na vzestupnou, tak na sestupnou hranu signálu na svých vstupech pro přerušení, usnadňuje návrh ovladače pro sériové rozhraní reflektujícího hardwarové řízení toku.
16
4.3.2. Rozhraní USB Rozhraní USB je tedy tvořeno obvodem PDIUSBD12 s několika málo pasivními součástkami. Zapojení na USB straně je převzato ze schématu ukázkového zapojení obvodu výrobce pro napájecí napětí 5 V. K MCU je připojen 8bitovou datovou sběrnicí, adresním bitem A0 a řídícími signály RD_N, HWR_N, CS1_N a IRQ2_N). Posledním řídícím signálem je signál SUSPEND, kterým je možno z MCU převést odvod PDIUSBD12 ze stavu snížené spotřeby (suspended) do aktivního stavu. Jelikož MCU nemá obvod DMA, je toto na straně PDIUSBD12 deaktivováno. Pro snazší indikaci funkčnosti USB rozhraní je k obvodu PDIUSBD12 připojena LED, která po inicializaci obvodu svítí, po programovém připojení k USB zhasne a při přenosu dat bliká. PDIUSBD12 je v adresním prostoru MCU namapován do prostoru adres 100000h až 1FFFFFh.
Obrázek 4.3.2.1. Výřez ze schématu se zapojením USB rozhraní
4.3.3. Rozhraní CAN Jako fyzická vrstva bylo vybráno doporučení CiA 102 specifikace ISO 118982. Vodiče pro přenos dat (Tx, Rx) od MCU jsou přivedeny přes rychlé optické oddělovače HPCL0721 do běžně používaného budiče sběrnice PCA82C250 a ke sběrnici se připojují přes standardní DB9M konektor. Obvody pro CAN jsou napájeny přes 5 V galvanické oddělovače CDDSW10505S. Obě rozhraní CAN jsou vybavena přepínačem pro 120 Ω zakončení sběrnice. Napájení pro tuto část desky je přiváděno přes spínací tranzistor řízeného z MCU (port J) z důvodu minimalizace odběru převodníku z USB do úspěšně provedené registrace k PC (enumerace). Celková spotřeba CAN rozhraní při uvažování limitních hodnot činí cca 180 mA.
17
Obrázek 4.3.3.1. Výřez ze schématu se zapojením CAN rozhraní
4.3.4. Modul paměti Paměťový modul sestává ze dvou obvodů CY7C1049B statické paměti RAM v organizaci 512 Kb x 8 s přístupovou dobou 20 ns a dokáže tak pracovat v nejrychlejším možném cyklu sběrnice MCU, který činí 2 takty, tj. 50 ns (v tomto režimu vyžaduje MCU, aby byla data zapsána do 25 ns po aktivaci signálů LWR_N / HWR_N). Použití těchto pamětí vzhledem k jejich maximálnímu uváděnému odběru 185 mA (celkem tedy 370 mA) nezaručuje možnost napájení z USB, jelikož součet maximálních odběrů s dalšími obvody převodníku přesahuje 500 mA, které je schopna USB standardně dodávat. Vzhledem k modularitě je však možné v případě, že nebude požadována tak rychlá paměť, použít jiný modul s pamětí s nižšími energetickými nároky, jejíž rychlost se běžně pohybuje okolo 55 ns a MCU při přístupu k této paměti zpomalit vložením jednoho nebo více taktů do cyklu sběrnice (provádí se programovou konfigurací registrů definujících časování přístupu do 8 oblastí adresního prostoru MCU). Modul je v adresním prostoru MCU namapován do prostoru adres 200000h až 18
2FFFFFh. Součástí paměťového modulu je i konektor pro připojení displeje, který je na katedře používán. Obsahuje i jednoduchý dekodér adresy generující signál výběru (CS_N) pro displej a rozděluje tak adresní prostor nevyužitého signálu CS3_N, který je na modul vyveden z desky MCU. Napájení paměťového modulu je stejně jako v případě CAN blokováno tranzistorem (výchozí stav po RESETu je ODPOJENO).
4.3.5. Konektory
SERIAL1 RS232
CAN0
120 Ω pro CAN
SERIAL0 TTL
CAN1
EXT. PWR
PWM
USB
BOOT/ FLASH
RAM PWR RAM MODUL
Obrázek 4.3.5.1. Rozmístění konektorů na hlavní desce
19
4 SV2:
4
BOOT 1
FLASH, nepřepisovatelná 1
SV1: SV5:
4
1 1
FLASH, přepisovatelná 1
Externí zdroj, 1 = +5 V, 2 = GND Napájení RAM, 1 = +5 V, 2 = GND
1
X2:
1 – RTS 2 – CTS 3 – Rx 4 – Vcc 5 – Tx 6 - GND
0 1 X4:
SV4:
120 Ω zakončení CAN. CAN0 vypnuto, CAN1 zapnuto 2 1
20 19
1 – PH1, 2 – PH0, 3 – PH3, 4 – PH2, 5 – PH5, 6 – PH4, 7 – PH7, 8 – PH6 9 – TCLKA, 10 – TCLKB, 11 – TIOCA1, 12 – TCLKC, 13 – TIOCA2, 14 – TCLKD, 15 – AN6, 16 – AN7, 17 – AN4, 18 – AN5, 19 – GND, 20 - PVcc SV3:
41 42
1 2 1 – HWR_N 2 – LWR_N 3 – AS_N 4 – RD_N 5 – D1 6 – D0 7 – D3 …
19 – D15 20 – D14 21 – A1 22 – A0 23 – A3 …
39 – A15 40 – A14 41 – CS3_N 42 – CS2_N
Obrázek 4.3.5.2. Zapojení konektorů SV2: V BOOT režimu MCU očekává nahrání software do vnitřní RAM přes RS232, ve FLASH režimu spouští program uložený ve FLASH ROM. __________________________________________________________________ Schéma a deska plošných spojů byly navrženy v programu Eagle německé firmy CadSoft Computer GmbH a jsou uloženy ve formátu tohoto programu na přiloženém CD. Schéma je k dispozici na CD také ve formě PNG souboru. 20
5. Software 5.1. CAN Ovladač pro CAN pro H8S/2638 MCU sestává ze dvou částí, první část zajišťuje obsluhu vyrovnávacích pamětí řadiče CAN v MCU, druhá poskytuje rozhraní (API) pro vyšší programové vrstvy (aplikaci). Každý ze dvou řadičů má k dispozici 16 vyrovnávacích pamětí (message boxů) <0..15> pro jednu zprávu, z nichž 15 jich je konfigurovatelných jak pro příjem, tak pro vysílání, vyrovnávací paměť číslo 0 je pouze pro příjem. Ovladač je využívá v režimu, kdy je polovina z nich nastavena na příjem a polovina na vysílání, čímž poskytuje 8 obousměrných komunikačních kanálů na jednom CAN portu. Technické omezení řadiče dovoluje maskování IDENTIFIKÁTORu pro příjem na každém portu pouze pro vyrovnávací paměť číslo 0. Zprávy jsou vysílány podle priority určené IDENTIFIKÁTORem. Ovladač pracuje v režimu přerušení, kdy reaguje na události: přijetí zprávy, přepsání nepřečtené zprávy novou, odeslání zprávy, zrušení odeslání zprávy, přechodu řadiče do „bus off“ stavu a na reset řadiče. Vzhledem k víceúrovňovému systému přerušení MCU (Interrupt Mode 2), kdy může být rutina obsluhy přerušení přerušena událostí s vyšší prioritou, je ovladač vybaven zámkem, znemožňujícím jeho volání z aplikace, která zpracovává přerušení s vyšší prioritou (v případě takového volání je indikována volající aplikaci chyba a požadovaná operace se neprovede). Při zpracování přerušení v důsledku přijetí nebo vyslání zprávy (a uvolnění vyrovnávací paměti vysílače) ovladač posune ukazatele v seznamu zpráv předaného druhou vrstvou ovladače a připraví se na příjem nebo vyšle další zprávu. V případě přechodu řadiče CAN do „bus off“ stavu jsou všechny popisovače vyrovnávacích pamětí (kanálů) uzavřeny a v případě blokujících operací pro příjem a vysílání je řízení předáno zpět aplikaci s indikací chyby). Po uzavření všech popisovačů je řadič CAN přepnut do stavu snížené spotřeby a před dalším použitím je nutné jej reinicializovat (reset), což je provedeno automaticky při pokusu o otevření kanálu. První vrstva ovladače také zajišťuje (pod podmínkou, že nejsou otevřeny žádné popisovače kanálů) inicializaci řadiče a nastavení rychlosti sběrnice. Druhá vrstva zajišťuje předávání seznamu přijatých zpráv a seznamu IDENTIFIKÁTORů zpráv, které mají být přijaty, mezi aplikací a první (nižší) částí ovladače. Pro tuto část ovladače bylo zvoleno programové rozhraní (API) shodné s API komponenty „CANopen device“ projektu OCERA (www.ocera.org). Při přístupu k vnitřním strukturám ovladače tato vrstva zakazuje přerušení od řadiče CAN, aby
21
nemohla být přerušena událostí na CAN sběrnici v době modifikace vnitřních struktur. Kanály jsou aplikaci přiřazovány touto druhou vrstvou automaticky a vzestupně. Pokud je tedy třeba pro příjem zpráv využít registr masky IDENTIFIKÁTORu, je nutné, aby aplikace tento CAN port otevřela jako první.
Druhá vrstva (API)
Funkce pro příjem / vyslání posloupnosti zpráv, otevření / zavření kanálu (API)
Vnitřní stavové proměnné, ukazatelé na seznamy zpráv Zámek první vrstvy
První vrstva
Zpracování přerušení, příjem / vysílání zpráv
Obrázek 5.1.1. Struktura ovladače pro CAN pro MCU Ovladač je napsán v jazyce C, zdrojový kód je přístupný na přiloženém CD. Z ovladače jsou aplikaci přístupné tyto funkce: hcan_Init() hcan_SetMask() vca_open_handle() vca_close_handle() vca_send_msg_seq() vca_rec_msg_seq() vca_wait()
inicializuje prostředí ovladače a řadič CAN na požadovanou rychlost sběrnice, nastaví masku IDENTIFIKÁTORu pro kanál číslo 0, otevře komunikační kanál a vrátí jeho popisovač aplikaci, uzavře komunikační kanál, odešle posloupnost zpráv, přijme posloupnost zpráv. testuje, zda byla zpráva odeslána/přijata.
22
Funkce vca_send_msg_seq() a vca_rec_msg_seq() mohou pracovat jak v neblokujícím, tak v blokujícím režimu (vrátí řízení volající aplikaci až po odeslání / příjmu všech zpráv). Bližší popis funkcí a jejich parametrů je k dispozici v dokumentaci na přiloženém CD.
5.2. USB V tomto bodě má práce skončila, neboť se i přes velké množství vynaloženého času a usilí nepodařilo ovladač USB zprovoznit, resp. nedojde k úspěšné registraci zařízení u hostitele (enumeraci). Po dlouhodobém testování jsem zjistil tyto skutečnosti: Komunikace s hostitelským řadičem proběhne podle scénáře: 1) RESET USB sběrnice, 2) příjem USB požadavku „SET ADDRESS“, 3) příjem USB požadavku „SET ADDRESS“, 4) RESET USB sběrnice, 5) příjem USB požadavku „SET ADDRESS“, 6) příjem USB požadavku „SET ADDRESS“, 7) konec neúspěšné enumerace. Zjišťováním stavu obvodu PDIUSBD12 v průběhu enumerace jsem zjistil, že odpověď (packet nulové délky) na požadavek „SET ADRESS“ je do PDIUSBD12 zapsána, PDIUSBD12 hlásí, že ji ve své výstupní vyrovnávací paměti řídícího endpointu 0 má a čeká na odeslání, ale k odeslání již buď nedojde, nebo ji hostitel nerozpozná. Studiem zdrojového kódu ovladače USB na straně Linuxu mého PC jsem zjistil, že na potvrzení přijetí požadavku „SET ADDRESS“ čeká PC 10 ms, a po té svůj požadavek zopakuje (viz bod 3 zjištěného scénáře neúspěšné enumerace). Rozborem kódu USB ovladače na straně MCU pro PDIUSBD12 však nenacházím důvod pro takovou režii zpracování požadavku „SET ADDRESS“. Celkový počet instrukcí pro zpracování tohoto požadavku nepřesahuje 1000 instrukcí, což při době jejich zpracování na 20 MHz MCU zdaleka nedosahuje oněch 10 ms, takže selhání enumerace z důvodu přílišné prodlevy na straně převodníku vylučuji. Během snahy o zprovoznění mého vlastního USB kódu se mému vedoucímu diplomové práce podařilo přenést ovladač pro obvod PDIUSBD12 jiného diplomanta z minulých let na tento převodník se zjištěním, že se chová nestabilně (přenos dat z převodníku do PC selhává). Na mém počítači však tento ovladač nedokáže projít ani enumerací stejně jako můj testovací USB ovladač. Jiná USB zařízení však na příslušném USB portu mého PC pracují spolehlivě.
23
Příčinu uvedeného chování se do doby termínu odevzdání diplomové práce z časových důvodu již nepodařilo zjistit.
6. Závěr Ačkoli se původního cíle, kterým byla kompletní realizace převodníku CAN/USB po hardwarové i softwarové stránce, nepodařilo dosáhnout, výsledky mé práce našly velké uplatnění v jiných projektech realizovaných na katedře. Pro další pokračování na tomto projektu navrhuji jeden ze dvou postupů: 1) Využít USB rozhraní s obvodem PDIUSBD12 v té podobě, v jaké pracuje na deskách jiných zařízení na katedře, avšak realizovat jej na samostatné desce, aby bylo možné jej odzkoušet i na jiných platformách a odzkoušenou verzi pak připojit k modifikaci hardware navrženého v rámci této práce. 2) Vytvořit hardware navržený v této práci s jiným USB řadičem. Oba postupy by měly umožnit zjistit konkrétní místo, na kterém se nachází příčina problému a tím i napomoci k jeho odstranění a vyvarování se výskytu podobných problémů při návrhu dalších USB zařízení.
24
7. Literatura Při návrhu jsem vycházel především z informací nalezených na internetu. Zde uvádím seznam podstatných zdrojů informací: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
Universal Serial Bus specification 1.1 a 2.0 URL: <www.usb.org> Controller Area Network specification 2.0B URL: <www.can.bosch.com> CiA 102 physical layer specification URL: <www.cancia.org> H8S/2638 Series, Hardware Manual URL: <www.renesas.com> H8S/2638 Series, Programming Manual URL: <www.renesas.com> PDIUSBD12 Product data URL: <www.semiconductors.philips.com> Plošné spoje se SMD, návrh a konstrukce Nakladatelství Platan, 2000. Projekt OCERA URL: <www.ocera.org> Program Eagle. <www.cadsoft.de> GNU C.
Program Doxygen. <www.stack.nl/~dimitri/doxygen/>
8. Obsah přiloženého CD Seznam adresářů na CD a jejich obsah: /hw
/src
Obsahuje schéma hlavní desky a paměťového modulu a návrh jejich desky plošných spojů ve formátu programu Eagle, zároveň jsou k dispozici i jako obrázky ve formátu PNG. Obsahuje zdrojový kód ovladače pro CAN pro MCU. 25
/doc
Obsahuje dokumentaci zdrojového kódu ovladače pro CAN pro MCU vygenerovanou programem DOXYGEN ve formátu HTML a elektronickou podobu textu diplomové práce ve formátu PDF.
26