FT245BM USB -> paralel
http://www.elektrorevue.cz/clanky/05027/index.html
Článek se zabývá praktickou aplikací sběrnice USB v podobě zařízení, které je schopno komunikovat pomocí USB portu s konkrétními binárními vstupně-výstupními (I/O) linkami připojené periferie. V první části je popsán hardware, jehož základ tvoří obvod FT245BM. Druhá obsáhlejší část je věnována softwarovému vybavení pro operační systémy Windows 98 až XP. Článek je určen pro odbornou veřejnost seznámenou s obecnými základy USB.
Obsah
1. Úvod
2. Hardware
2.1. Obecný popis FT245BM
2.2. Blokové schéma FT245BM
2.3. Obvodová realizace
3. Software
3.1. D2XXUnit.pas - Přístup k dynamické knihovně
3.2. Soft.pas - Uživatelský program
4. Závěr
Literatura
1. Úvod
Universal Serial Bus je nejrozšířenější počítačové rozhraní, které se stále rozvíjí a nabízí vysoký uživatelský komfort. Popisované zařízení ukazuje různé způsoby jednoduchého využití rozhraní USB.
2. Hardware
Pro řízení externí logiky byla zvolena konverze sériového rozhraní USB na paralelní s možností přímého přístupu k jednotlivým I/O linkám nově vytvořeného paralelního rozhraní. Pro tento typ komunikace je nejvhodnější čip společnosti FTDI FT245BM. Další možností by byl zastaralý USB mikrokontrolér společnosti Cypress CY7C63000, která je podrobně popsána v [1]. FT245BM je zástupce druhé generace USB produktů firmy FTDI, která nejen přidává nové funkce dosavadním produktům série AM, ale i vyšší integrací snižuje počet nezbytně nutných externích součástí. Samozřejmostí je zde plná pinová kompatibilita s předchozími verzemi. Dalším příznivým faktorem je bohatá programová vybavenost včetně ovladačů a podpůrných programů.
Obr. 1. Detail obvodu FT245BM v SMD provedení
Na našem trhu existuje celá řada různých převodníků USB na sériový či paralelní port. Většina z nich se prodává ve formě kabelu s integrovaným převodníkem do jedné z koncovek. Jejich použití je sice uživatelsky nenáročné, protože pro operační systémy vystupují jako virtuální porty daného konvertovaného rozhraní (COM či LPT), ale tento přístup je pro vývoj USB zařízení nevhodný. Výhodou obvodových převodníků FTDI je možnost použít komunikační knihovny D2XX, která umožňují přímý přístup k zařízení pomocí funkcí uložených v DLL knihovně. V tomto případě je připojené zařízení v systému vedeno přímo jako USB a je zde možné využít BitBang mód, který zajišťuje přímé nastavování logických úrovní koncových I/O linek.
2.1. Obecný popis FT245BM
FT245BM nabízí spolehlivé a finančně nenáročné řešení pro obousměrnou komunikaci počítače s periferiemi pomocí sběrnice USB rychlostí až 1MB/s. FIFO controller (kap. 2.2.) je vhodný k připojení externího mikrokontroléru, mikroprocesoru, či jiných zařízení pomocí vstupně-výstupních portů.
Při použití BitBang módu se osm datových linek rozhraní FIFO mění na osmibitový paralelní vstupně-výstupní port, kde se dá přistupovat ke konkrétním pinům. Datové pakety vysílané z hostitelského počítače jsou postupně předávány tomuto rozhraní s rychlostí definovanou vnitřním časovačem. Zapsaná data zůstávají ve výstupních bufferech a jsou k dispozici na výstupních linkách dokud nejsou přepsána novými daty. Kromě využití na přepínání světel, relé a dalších zařízení, výrobce uvádí možnost připojení statické paměti s náhodným přístupem SRAM či programovatelného hradlového pole FPGA. Každý pin se dá nastavit jako vstupní či výstupní pomocí funkcí popsaných v kapitole 3.2.
2.2. Blokové schéma FT245BM
Obr. 2. Blokové schéma FT245BM
-
3,3V LDO Regulator - Tento regulátor generuje referenční napětí 3,3V pro řízení výstupních buněk bufferů USB přijímače. Regulátor vyžaduje připojení externího kondenzátoru na výstupní svorku 3V3OUT. Pomocí této svorky je možno napájet externí logiku, pokud její odběr nepřesáhne 5mA (obr. 2.).
-
USB Transciever - USB přijímač a vysílač tvoří fyzické rozhraní USB 1.1 či USB 2.0 pro přímé připojení kabelu. Výstupní ovladače provádí na úrovni 3,3V kontrolní signalizaci sledováním bitové rychlosti, zatímco rozdílový přijímač a dva jednostranné přijímače zajišťují příjem dat (obr. 2.).
-
USB DPLL - Tento blok dekóduje příchozí USB data ve formátu NRZI a provede obnovení hodinového signálu. Výsledek je veden do bloku sériového rozhraní (SIE) (obr. 2.).
-
6MHz Oscillator - Oscilátor využívá externího krystalu na kmitočtu 6MHz. Tento kmitočet je násoben osmkrát (x8 Clock Multiplier) na 48MHz, což je referenční kmitočet USB DPLL. Druhý výstup násobiče je 12MHz, který slouží jako referenční kmitočet pro SIE, USB Protocol Engine a FIFO Controller (obr. 2.).
-
Serial Interface Engine (SIE) - Nástroj sériového rozhraní vykonává převod USB dat z paralelního do sériového formátu a naopak. Podle předpisů USB 2.0 také vykonává vyrovnávání bitů, generování zabezpečení (CRC5 / CRC16) a kontrolu datového toku (obr. 2.).
-
USB Protocol Engine - Tento blok řídí datový tok z koncového zařízení. Řízení probíhá dle požadavků základního protokolu USB, ve kterém jsou příkazy ovladače hostujícího zařízení. Další funkcí tohoto bloku je ovládání funkčních parametrů FIFO (obr. 2.).
-
FIFO Recieve Buffer (128B) - Přijímací buffer paměti FIFO je využíván pro dočasný záznam dat vyslaných koncovému bodu zařízení. Buffer je vyprázdněn po přečtení jeho obsahu pomocí signálu RD# (obr. 2.).
-
FIFO Transit Buffer (384B) - Ve vysílacím bufferu jsou zapsána přijímaná data z koncového zařízení pomocí signálu WR#. Obsah bufferu je vyprázdněn po přijetí požadavku na data z koncového bodu zařízení, kdy jsou tato data načtena do SIE (obr. 2.).
-
FIFO Controller - Ovladač FIFO zajišťuje komunikaci mezi piny externího rozhraní FIFO a přijímacími či vysílacími buffery (obr. 2.).
-
EEPROM Interface - I když je možné funkční zapojení obvodu FT245BM bez externí paměti EEPROM, je vhodné paměť použít pro ukládání identifikátorů zařízení VID, PID, sériového čísla, proudového odběru zařízení a popisu zařízení. Další parametry, které jsou obsaženy v EEPROM zahrnují zapínání externího oživení a izochronního módu přenosu dat, softwarové vypnutí zařízení a deskriptory režimu USB 2.0. Všechny identifikátory jsou nutné pro tzv. enumerizaci čili proces přihlášení zařízení do operačního systému počítače.Programování paměti EEPROM je možné přímo v pracovním zapojení s obvodem FT245BM. Společnost FTDI k tomu dodává speciální software, který se dá využít i k diagnostice zařízení [3] (obr. 2.).
-
RESET Generator - Tato část provádí nulování vnitřních obvodů FT245BM při jeho zapnutí. Přídavné piny (RSTOUT# a RSTIN#) slouží k resetování připojených zařízení. Během resetu je RSTOUT# na úrovni logické nuly, jinak je na úrovni 3,3V. Při připojení obvodu k počítači se na tento výstupní pin přivede napětí 3,3V se zpožděním 5ms od okamžiku, kdy napájení VCC dosáhne úrovně 3,5V. Tato prodleva slouží k nastavení zpoždění pro enumerizaci pomocí připojeného odporu 1,5kW. Po uplynutí zpoždění se rozběhne oscilátor a zařízení začne fungovat. Pro případ, kdy není vyžadován reset vnějších zařízení, je vstup RESET# připojen k napájecímu napětí. Tak je tomu i u této aplikace (obr. 2.).
2.3. Obvodová realizace
Zapojení, uvedené na obr. 3, vychází z doporučení uvedených v [3]. USB signály jsou přivedeny do zařízení pomocí konektoru typu B. Toto zařízení je napájeno pouze ze sběrnice USB a tomu odpovídá i navrhované zapojení. Pokud by mělo zařízení svůj zdroj napájení, tak by bylo zapojení některých vývodů integrovaného obvodu mírně odlišné.
Nutnou součástí je 6MHz krystal, který je zde použit ve dvoupinovém provedení v kombinaci s dvojicí kondenzátorů. Vhodné je použít paměť EEPROM, která nese údaje o zařízení (kap. 2.2.). Připojení LED na pin PWREN# slouží k signalizaci úspěšného přihlášení zařízení do operačního systému počítače. Piny D0-D7 jsou připraveny pro komunikaci s připojeným zařízením a představují paralelní port.
Obr. 3. Celkové schéma zapojení zařízení
3. Software
Na obr. 4 je uvedeno blokové schéma systému komunikace od klientské aplikace na připojeném PC až po fyzickou vrstvu USB na přípravku.
Obr. 4. Blokové schéma systému řídících signálů
Aplikační software programovacího jazyka Delphi má za úkol proniknout do dynamické knihovny FTDD2XX.DLL, která je součástí ovladačů FTDI, a umožnit tak plný uživatelský přístup na I/O linky integrovaného obvodu FT245BM. Knihovna FTDD2XX.DLL obsahuje soubor funkcí a procedur, které lze použít pomocí systémového ovladače na komunikaci s USB zařízením. Použité funkce jsou uvedeny v kapitole 3.1. Popisovaný řídící program byl vytvořen ve vývojovém prostředí Borland Delphi Enterprise ver. 7.0 a v následujících kapitolách je uveden popis zásadních částí zdrojového kódu.
3.1. D2XXUnit.pas - Přístup k dynamické knihovně
Tento programový celek je součástí softwarové podpory společnosti FTDI a obsahuje zpřístupnění základních funkcí dynamické knihovny FTD2XX.dll. Pro potřeby popisovaného zařízení bylo nutné doplnit D2XXUnit.pas o funkce obsluhující BitBang mód.
V první části výpisu 1 je vidět zavedení a nastavení BitBang módu pomocí procedur FT_SetBitMode a FT_GetBitMode v dynamické knihovně FTD2XX.dll. Ve druhé části je definice funkcí přístupných z prostředí Delphi (SetBitMode a GetBitMode). Obě funkce vrací hodnotu FT_Result, která je celočíselného typu integer a jejím jednotlivým hodnotám jsou následně přiřazena různá chybová hlášení užitečná pro diagnostiku programu.
FT_SetBitMode je základní procedura na zápis hodnoty BitBang módu. Zde se také vybírá, které piny budou vstupní, a které výstupní.
Směr je dán proměnnou ucMask takto:
- 1 výstupní pin
- 0 vstupní pin
Další proměnná ucEnable zapíná a vypíná režim BitBang módu:
- 1 zapnutí BitBang
- 0 vypnutí BitBang
FT_GetBitMode vykoná bezprostřední čtení osmi pinů a vrací jejich hodnotu. Je to užitečné ke sledování aktuálního stavu logických úrovní. Stejného výsledku se nám dostane i běžným čtením, ale tam se vždy čeká na naplnění bufferu, tak je odezva pomalejší a hodnoty již nemusí být aktuální.
Ostatní funkce, které jsou použity v tomto programu a jsou součástí původního programového celku D2XXSUnit, jsou popsány zde:
- GetFTDeviceCount slouží jako detektor připojených zařízení a vrací hodnotu o počtu připojených zařízení.
- GetFTDeviceDescription vrací popis zařízení.
- Open_USB_Device zpřístupňuje USB zařízení pro další operace.
- Close_USB_Device uzavře přístup na aktivní USB zařízení.
- Set_USB_Device_BaudRate nastavuje přenosovou rychlost komunikace s USB zařízením. Maximální hodnota je 3MBd. Pro BitBang mód platí, že hodinový signál je 16-ti násobek této přenosové rychlosti. Doporučená hodnota je zde 9600Bd, kdy bude pro BitBang mód přenosová rychlost 9600 x 16 = 153600B/s, čili 1B se přenese za 6,5ms.
- Write_USB_Device_Buffer zapíše obsah proměnné FT_Out_Buffer do USB zařízení. Tato funkce vrací počet úspěšně odeslaných bajtů. Při volání této funkce je potřeba v parametrech uvést kolik bajtů se bude zapisovat.
3.2. Soft.pas - Uživatelský program
Kromě grafického rozhraní zajišťuje tento program primárně komunikaci s USB zařízením voláním funkcí definovaných v D2XXUnit. Výpis 2ukazuje řešení kontrolního výpisu připojených zařízení. Celý blok je zahájen detekcí počtu připojených zařízení. Pokud je připojeno alespoň jedno, potom program v cyklu for vyplní výpis připojených zařízení pořadovým číslem, sériovým číslem a popisem zařízení. Tyto informace jsou obsaženy v paměti EEPROM na přípravku. Jak je vidět na obr. 5, tak je aktuálně připojeno jediné zařízení.
Obr. 5. Výpis připojených zařízení
Následně dojde k pokusu o otevření prvního zařízení v pořadí. Pokud je pokus úspěšný, následuje reset, nastavení přenosové rychlosti, nastavení BitBang módu a nakonec výpis informace uživateli do stavového řádku okna o úspěšném otevření jednotky.
Nastavení BitBang módu SetBitMode($FF,$01) má za argument dvě čísla (zde v hexadecimálním tvaru). Obě vychází z definice této funkce (kap. 3.1.):
- $FF (= 255d = 11111111b) Nastavuje všech osm linek na výstupní.
- $01 (= 1d = 00000001b) Aktivuje režim BitBang.
Další ukázka zdrojového textu (výpis 3) slouží k demonstraci vlastního zápisu na FT245BM. Zde se přímo přiřazují logické úrovně jednotlivým výstupním linkám. V grafickém provedení (Obr. 6) je tento výběr reprezentován osmi zatrhávacími políčky.
Obr. 6. Výběr logických úrovní na jednotlivých výstupních linkách
Úvodní část výpisu 3 tvoří detekce označených políček. V poznámce (za //) je pro přehlednost uvedeno označení políčka z ovládacího okna. Následuje jednoduchá rovnice, která z binárního vyjádření převede výslednou hodnotu do dekadické podoby. Poté je předána tato hodnota do výstupního bufferu na pozici 0, odkud je v posledním příkazu Write_USB_Device_Buffer zapsána jako jeden bajt na čip FT245BM, který toto číslo prezentuje v binární podobě změnou stavu příslušných výstupních linek. Hodnota, kterou vrací funkce Write_USB_Device_Buffer je využita ke zjištění celkového počtu úspěšně odeslaných bajtů do USB zařízení pomocí proměnné pocet. Tato informace je průběžně zobrazována na stavovém řádku hlavního okna programu
4. Závěr
Popisované zařízení pro řízení externí logiky může mít v kombinaci s připojenými relé nespočet možných aplikací v ovládání různých elektrických spotřebičů. Další oblastí použití je zajištění konektivity zařízení využívajících starších, dnes již nepoužitelných typů komunikace. Zajímavé využití se může skrývat i v externí signalizaci pomocí LED. Nové možnosti se nabízí při nastavení některých I/O linek na vstupní. Pro tento příklad by mohlo externí zařízení signalizovat svůj stav počítači.
V případě připojení počítače na internet lze vytvořit jednoduchou alternativu k systému nazývanému Smart Home. Tento moderní trend v oblasti domácího vybavení spojuje všechny spotřebiče společným digitalizovaným řízením, které se zapojuje do speciálních datových sítí s přístupem na internet. Tak je možné na dálku zapnout nahrávání oblíbeného televizního pořadu na DVD rekordér, ovládat hlídací kamerový systém, spouštět zavlažování zahrady a třeba si před odjezdem z práce uvařit kávu, aby byla čerstvá po příjezdu domů. Tyto systémy se zvolna začínají přivádět do praxe a jsou zatím značně finančně náročné.
Literatura
[1] Kainka, B. Měření, řízení a regulace pomocí sběrnice USB. BEN, Praha 2003
[2] PALKO, L. Počítačem dálkově řízený přepínač videosignálu, Diplomová práce ÚTKO FEKT, Brno 2004
[3] http://www.ftdichip.com/Documents/ds245b14.pdf