Opracowanie układu wejść i wyjść binarnych współpracującego z
Transkrypt
Opracowanie układu wejść i wyjść binarnych współpracującego z
Opracowanie układu wejść i wyjść binarnych współpracującego z interfejsem USB Bloch Sławomir Stadnik Krzysztof WSTĘP W każdym systemie USB jest tylko jeden host, który zarządza protokołem USB, żadne urządzenie peryferyjne bez zezwolenia hosta nie ma dostępu do magistrali. Możliwe jest zasilanie urządzeń peryferyjnych (pobór prądu do 100mA) jak również wprowadzanie ich w tryb „uśpienia” (pobór prądu nie większy niż 500µA). Dane są przesyłane w kodzie NRZI. Kabel USB to cztery żyły: masa, zasilanie oraz para D+ D-, na której różnicowo są przesyłane dane. Przy wysyłaniu jedynki przewód D+ jest w stanie wysokim a D- niskim, zaś w przypadku przesyłania zera na odwrót. Jeśli występuje ciąg 5 jedynek to wstawiane jest zero. Host wysyłając jednocześnie na D+ i D- stan niski przez ponad 2,5µs chce zresetować urządzenie peryferyjne. Serial Interface Engine jest częścią warstwy fizycznej i odpowiada za konwersję danych szeregowych na równoległe i odwrotnie w zależności od kierunku transmisji. Serial Interface Engine jest odpowiedzialny również za generowanie bitów CRC(BER<10-10) i ich weryfikację, jak również za rozpoznawanie sygnałów wprowadzającego w stan uśpienia, powrotnego z tego stanu oraz sygnału reset. W każdym systemie jest zawsze jeden host controller. Układ ten formuje ramki i zarządza protokołem USB. Transfer danych w tym protokole można podzielić na 3 części: • Token phase – zainicjowanie przez host tokena wskazującego na rodzaj transferu • Data phase – transmisja danych w kierunku zgodnym z kierunkiem wskazywanym przez token • Handshake phase – (opcjonalna) wysyłanie specjalnego pakietu (handshake packet) wskazującego czy transmisja się powiodła czy nie. Host chcąc odebrać dane od urządzenia wysyła token. Jeśli urządzenie faktycznie ma dane do wysłania następuje ich wysłanie i ewentualnie faza handshakingu. Jeśli ich nie posiada, host przekazuje token do następnego urządzenia. W przypadku gdy host chce wysłać dane do urządzenia również wysyła token, lecz inny niż w powyższym przypadku, a za nim pakiety z danymi. 2 Na początku każdego pakietu następuje synchronizacja urządzenia peryferyjnego (ciąg D+D-D+D-D+D-D+D-). Na początku pakietu znajduje się pole służące do rozróżnienia rodzaju pakietu (Packet Identifier Fidel – 8 bitów). Wyróżniamy następujące rodzaje pakietów: • Tokeny – OUT (wskazują, że dane będzie wysyłana od hosta), IN (dana wysyłana będzie do hosat), SOF token (wskazują początek ramki), SETUP token (dana będzie wysyłana od hosta w celu konfiguracji urządzenia) • Pakiety danych – w polu PIF takiego pakietu znajduje się jego numer • Handshake – w polu PIF takiego pakietu znajduje się informacja czy transmisja się udała (ACK), czy nie (NAK) W zależności od rodzaju pakietu wyróżnić możemy też pole adresu (tokeny), podzielone na dwie części. Pierwsza część to numer urządzenia (od 1 do 127), który przydzielił mu host. Numer 0 jest zabroniony jako adres stały, wykorzystywany jako adres wstępny. Druga część określa adres tzw. endpointu (każde urządzenie peryferyjne zawiera przynajmniej jeden). Następnie znajdują się dane (do 1023 bajtów – tylko pakiety danych) i bity CRC (nie występują w pakietach handshake) Pakiet danych Handshake pakiet Pakiet Token SOF Pozostałe pakiety Token 3 USB może obsługiwać różnorodne urządzenia także dzięki oferowaniu następujących sposobów transmisji danych: • transmisja typu BULK – przewidziana dla urządzeń potrzebująch przesyłać duże bloki danych, bez zapewnienia stałych interwałów między transferami. Ponadto w transmisji typu BULK zapewniane jest bezbłędne dostarczenie danych i ewentualne wznowienie „transakcji”, które się nie powiodły. Ten typ transmisji wykorzystują takie urządzenia jak drukarki, skanery, dyski twarde itp. • transmisja typu ISO (izochroniczna) – przewidziana jest dla klasy urządzeń, które muszą transmitować lub odbierać dane synchronicznie. W grupie tej można znaleźć np.: kamery, głośniki, mikrofony itp. W fazie inicjacji rezerwowany jest fragment pasma magistrali USB dla poprawnej obsługi urządzenia ewentualne błędy transmisji nie są korygowane, ale przekaz w tym trybie ma wyższy priorytet niż dla typu BULK. • transmisja typu INTERRUPT – przewidziana jest dla urządzeń, które zwykle swoją pracę opierały na systemie przerwań procesora. Zamiast rzeczywistych przerwań stosuje się tu jednak technikę „odpytywania” urządzenia w ustalonych odstępach czasowych. Ten tryb transmisji podobnie jak BULK zapewnia bezbłędne dostarczenie danych do odbiorcy. Najczęściej transmisję typu INTERRUPT wykorzystują urządzenia takie jak klawiatury, myszy itp. • transmisja typu CONTROL – tryb od którego zaczyna się komunikacja między hostem a urządzeniem, służy do konfiguracji urządzeń, konfiguracja może się odbyć nie tylko podczas enumeracji urządzenia lecz również w każdym momencie transmisji. Systemy USB mogą pracować z szybkością: • Low Speed (LS) – do 1,5Mb/s (maksymalna długość kabla 3m) • Full Speed (FS) – 12Mb/s (maksymalna długość kabla 5m) • High Speed (HS) – 480Mb/s (maksymalna długość kabla 5m) Maksymalna odległość, na jaką mogą być przesyłane dane poprzez USB to 25m, lecz co 5m musimy wstawić huba. 4 Po podłączeniu urządzenia do działającego hosta następuje: • Host rozpoznaje, że urządzenie zostało przyłączone dzięki dzielnikowi napięcia, do którego przyłączana jest para różnicowa, • Host do huba, do którego zostało podłączone urządzenie wysyła zapytanie co zostało podłączone (kolejny hub czy urządznie), • Gdy jest to urządzenie host wysyła sygnał seretu do tego nowo podłączonego urządzenia, • Po resecie urządzenie komunikuje się z hostem za pomocą endpointu 0, • Host wykrywa szybkość, z jaką urządzenie może przesyłać dane (w zależności czy linia D+ (FS) czy D- (LS)ma potencjał bliski VCC), • Host przydziela adres urządzeniu, • Na przydzielony adres host wysyła zapytanie o informacje o podłączonym urządzeniu, a na ich podstawie wybiera odpowiedni sterownik, do komunikacji z urządzeniem, • Na podstawie sterownika ustawiany jest tryb w jakim odbywać się będzie komunikacja. KONTROLER FT 245 BM 5 Schemat blokowy kontrolera przedstawiony jest na powyższym rysunku. Składa się on z następujących bloków funkcjonalnych: • 3,3V LDO Regulator Główną funkcją tego bloku jest zasilanie bloków USB Transceiver oraz Reset Generator. Blok ten w mniejszym stopniu może być wykorzystany do zasilania zewnętrznych układów wymagających napięcia 3,3V – pod warunkiem, że pobierany przez nie prąd jest nie większy niż 5mA – za pomocą pinu 3V3OUT. Dostarcza również 3,3V do pinu RSTOUT#. • USB Transceiver Nazwa bloku jest skrótem od Transmiter-Receiver (Nadajnik-Odbiornik). USB Transceiver zapewnia dla łącza USB 1.1 / USB 2.0 pracę w trybie full-speed. • USB DPLL Blok ten odzyskuje z danych w kodzie NRZI sygnał zegarowy i dostarcza go oraz te dane do bloku SIE. • 6MHz Oscillator Za pomocą tego bloku otrzymywany jest sygnał zegarowy o częstotliwości 6MHz, który jest wykorzystywany przez blok x8 Clock Multiplier. • x8 Clock Multiplier Przy użyciu sygnału o częstotliwości 6MHz generowany są sygnały zegarowe o częstotliwości 12MHz dla bloków SIE, USB Protocol Engine i UART FIFO Controller oraz 48MHz dla bloków USB DPLL i Baud Rate Generator. • Serial Interface Engine Blok ten dokonuje konwersji równoległo-szeregowej lub szeregoworównoległej danych z/do łącza USB. Zgodnie ze specyfikacją USB 2.0 dodaje bądź usuwa bity kontrolne CRC5 lub CRC16 do/z strumienia danych. 6 • USB Protocol Engine Blok zajmuje się obsługą protokołu USB. • Dual Port TX Buffer (128 bajtów) Bufor pośredniczący, do którego zapisywane są dane przychodzące z portu USB, a następnie przekazywane do bloku UART Transmit Register. Odbywa się to pod kontrolą ze strony UART FIFO Controller. • Dual Port RX Buffer (384 bajtów) Działanie bloku jest analogiczne do powyższego, lecz dla danych transmitowanych w przeciwnym kierunku. • UART FIFO Controller Kieruje transferem danych pomiędzy buforami Dual Port TX i RX Buffer a rejestrami bloku UART. • FIFO Controller Blok dokonuje konwersji równoległo-szeregowej lub szeregowo-równoległej danych do/z interfejsu RS245. Obsługuje piny D0…D7, RD#, WR, TXE#, RXF#. • Baud Rate Generator Generator dostarcza blokowi UART sygnału pochodzącego z 48MHz Reference Clock, lecz o częstotliwości 16-krotnie zwiększonej. Określa parametr Baud Rate bloku UART, który jest programowalny w zakresie od 183 do 3 milionów bodów. • RESET Generator Blok RESET Generator zapewnia resetowanie wewnętrznych urządzeń przy wzroście napięcia. Dodatkowe wejście RESET# oraz wyjście RSTOUT# umożliwiają odpowiednio innym urządzeniom resetowanie FT245BM bądź 7 FT245BM resetowanie innych urządzeń. Pin RSTOUT# pozostaje w stanie wysokiej impedancji przez około 5ms po tym, jak napięcie na pinie VCC wzrośnie ponad 3,5V przy jednocześnie działającym oscylatorze i wysokim stanie na pinie RESET#. Jeśli nie będzie wykorzystywane resetowanie z zewnątrz, wejście RESET# powinno być zwarte z VCC. • EEPROM Interface FT245BM może pracować bez pamięci EEPROM. Pamięć EEPROM powinna być 16-bitowa. Wykorzystywana jest ona przy samodzielnym ustalaniu wartości VID, PID, Serial Number, Product Description Strings oraz Power Description. Jeśli pamięć ta jest niepodłączona, FT245BM będzie używał domyślnych wartości wymienionych wyżej parametrów, za wyjątkiem Serial Number. Poniżej przedstawiony jest wygląd i opis wejść oraz wyjść urządzenia: 8 Piny interfejsu UART: • RD# – wyjście dla asynchronicznej transmisji danych • WR – wejście dla asynchronicznej transmisji danych • RXF# – wyjście sygnalizujące chęć wysłania danych • TXE# – wejście informujące o chęci nadania danych przez urządzenie zewnętrzne • D0..7 – Dane wejściowe i wyjściowe Piny interfejsu USB: • USBDP – wejście/wyjście, plus sygnału danych • USBDM – wejście/wyjście, minus sygnału danych Piny interfejsu EEPROM: • EECS – wejście/wyjście, “chip select” • EESK – wyjście sygnału zegarowego dla EEPROM • EEDATA – wejście/wyjście danych do/z EEPROM • SLEEP# – wyjście w stanie niskim w trybie uśpienia (Suspend Mode), używane do zmniejszania pobieranej mocy • PWREN# – wyjście w stanie niskim po skonfigurowaniu urządzenia za pomocą USB, a następnie w stanie wysokim w trybie uśpienia, także używane do zmniejszania pobieranej mocy • PWRCTL – wejście, w stanie niskim oznacza zasilanie z magistrali, w stanie wysokim – samozasilanie Sygnały zasilania: • 3V3OUT – wyjście z LDO Regulator dostarczające napięcia 3,3V do bloku USB Transceiver oraz pinu RSTOUT#, a także do zasilania niewielkich układów zewnętrznych. Powinno być połączone z masą za pomocą kondensatora ceramicznego o pojemności 33nF. • VCC – zasilanie napięciem od 4,35V do 5,25V dla bloku LDO i bloków interfejsu UART • VCCIO – zasilanie napięciem od 3V do 5,25V dla UART • GND – masa • AVCC –źródło zasilania dla analogowej części bloku x8 Clock Multiplier 9 spoza • AGND –masa dla analogowej części bloku x8 Clock Multiplier Pozostałe wejścia i wyjścia: • RESET# – wejście służące do resetu FT245BM za pomocą urządzeń zewnętrznych • RSTOUT# – wyjście wewnętrznego Generatora Resetu (Reset Generator) • TXLED# – dioda, święcąca gdy wysyłane są dane • RXLED# – dioda, święcąca gdy odbierane są dane • XTIN – wejście bloku 6MHz Oscillator • XTOUT – wyjście z bloku 6MHz Oscillator • TEST – wejście sterujące testowaniem urządzenia, w czasie normalnej eksploatacji musi być zwarte z masą FT245BM • Jednoukładowy, dwukierunkowy konwerter USB na interfejs równoległy • Prędkość transmisji do 1MBps - dla sterowników bezpośrednich • Prędkość transmisji do 300kBps - dla sterowników wirtualnych • Prosty interfejs do logiki MCU/PLD/FPGA z czteroprzewodowym handshake'm • Bufory: Nadawczy (384Byte) i odbiorczy (128Byte) • Kompatybilność z USB 1.1 i USB 2.0 • Zasilanie od 4.4V do 5.25V • Zintegrowany stabilizator 3.3V dla układów zewnętrznych • Parametry urządzania przechowywane w zewnętrznej pamięci EEPROM z możliwością zapisu przez USB • Wbudowany 6Mhz-48MHz powielacz częstotliwości zgodny z FCE i CE • Obudowa 32-LD LQFP (7mm x 7mm) • Więcej informacji na stronie www.ftdichip.com 10 Minimoduł komunikacyjny USB z kontrolerem USB FT245BM MMusb245 jest niedrogim zintegrowanym modułem do transmisji danych do/z urządzeń peryferyjnych lub PC. Moduł bazuje na kontrolerach FT245BM firmy FTDI. MMusb245 pozwala na transfer danych z prędkością 1MB/s. Jest prostym urządzeniem typu FIFO stanowiącym łatwy interfejs pomiędzy standardem USB, a dowolnym systemem mikroprocesorowym poprzez porty IO mikrokontrolera. Do modułu dołączony jest kabel USB. Dzięki sterownikom do systemu Windows, które emulują port szeregowy moduł nadaję się do upgrade`u aplikacji w których dotychczasowo używana była transmisja po łączu szeregowym RS232. Wybór naszego Minimodułu jest pierwszym krokiem dla projektów, które muszą być zrealizowane w krótkim czasie. MMusb245 może być użyty zarówno do prototypu eliminując konieczność projektowania obwodu drukowanego jak i do układu finalnego w którym minimoduł montowany jest w postaci "kanapki". 11 Układ wyprowadzeń Minimoduł posiada wyprowadzenia z rastrem 0,1" (2.54mm) pasujące do podstawki DIL24 Opis wyprowadzeń Pin Nazwa Tryb Opis pinu 1 RXT wyjście Sygnalizuje stan zawartości bufora 2 TXE wyjście Sygnalizuje stanem wysokim, że bufor transmisji jest wypełniany lub zajęty zapisem ostatniego bajta 3 WR wejście zapis danych z D7-D0 do bufora transmisji 4 RD wejście odczyt z bufora na D7-D0 5 D7 we/wy Linia szyny danych (bit 7) 6 D6 we/wy Linia szyny danych (bit 6) 7 D5 we/wy Linia szyny danych (bit 5) 8 D4 we/wy Linia szyny danych (bit 4) 9 D3 we/wy Linia szyny danych (bit 3) 10 D2 we/wy Linia szyny danych (bit 2) 12 11 D1 we/wy Linia szyny danych (bit 1) 12 D0 we/wy Linia szyny danych (bit 0) 15 RST wejście zewnętrzny do reset 16 RSO wyjście Wyjście wewnętrznego generatora resetu 18 3V3 wyjście Wyjście wewnętrznego regulatora LDO. 20 SLP wyjście sygnalizuje stan wstrzymania 21 SND wejście wzbudzanie i natychmiastowe wysyłanie do PC 22 VIO wejście Ustala napięcia na pinach komunikacyjnych 23 VEX wejście Ustala główne źródło zasilania 24 VPO wyjście Zasilanie z USB Oprogramowanie Firma FTDI wraz z układem dostarcza sterownik Virtual Com Port (VCP) sprawiający, że porty peryferyjne urządzenia wyglądają jak standardowy port COM dla komputera PC. Większość istniejącego oprogramowania powinno współpracować z VCP, wystarczy zmienić używane przez nie porty na stworzone przez sterownik VCP. Używając VCP, programista może komunikować się z urządzeniem w ten sam sposób jak przez regularny port PC COM – za pomocą Windows VCOMM API lub biblioteki portu COM. Sterowniki zawierają takie funkcje zdefiniowane dla sterowników D2XX firmy FTDI, co pozwala programiście aplikacji zintegrować program z urządzeniem używając Windows DLL. Sterowniki wirtualnego portu COM (Virtual COM Port) • Windows 98/ 98 SE / 2000 / ME / XP, MacOS, Linux 2.4 i nowsze D2XX ( Sterowniki bezpo_rednie USB + interfejs DLL S/W) • Windows 98 / 98 SE / 2000 / ME / XP, Linux Więcej informacji na stronie www.ftdichip.com 13 Dane techniczne MMusb245 • Jednomodułowe rozwiązanie dla szybkiej transmisji USB • FT245BM • Technologia SMD, obwód dwu-warstwowy • 2 x 14 wyprowadzenia z rastrem 0.1" (2.54mm) pasujące do podstawki DIP28 • Możliwość montażu poziomego • Małe wymiary 45mm x 20mm x 15mm • Złącze USB w standardzie B • Wbudowana pamięć EEPROM dla parametrów: USB VID, PID, Numeru seryjnego i opisu produktu. • Możliwość zasilania z interfejsu USB (do 60mA dla konwertera i układów zewnętrznych) lub z zewnętrznego źródła • Obudowa 24-piny Instalacja sterowników Aby móc używać konwertera USB – RS232 należy zainstalować odpowiednie sterowniki. Sterowniki te (VCP – Virtual COM Port) emulują standardowy port COM. Dzięki temu możemy komunikować się jak przez klasyczny port szeregowy. W przypadku nieposiadania sterowników należy je pobrać ze strony FTDI: www.ftdichip.com Następnie urządzenie emulujące port szeregowy należy podłączyć do którekolwiek z niezajętych portów USB. To automatycznie zapoczątkuje instalację. 14 Postępując według wskazówek, zaznacz opcję „Wyszukaj sterowniki dla nowego urządzenia” („Search for a suitable driver for my device (recommended)”, a następnie „Wybrana lokalizacja” („Specify a location”). W kolejnym kroku sprecyzuj, gdzie znajdują się sterowniki do urządzenia – instalator wybierze plik ftdibus.inf. Jeśli wszystko przebiegnie poprawnie, instalator poinformuje o pomyślnym zakończeniu procesu instalacji szeregowego konwertera (serial converter). Instalator automatycznie przejdzie do instalacji 15 sterownika emulatora portu COM. Procedura jest taka sama jak powyżej, z tym że PC wybierze tym razem plik ftdiport.inf. Jeśli teraz otworzysz Menedżer Urządzeń (Device Manager), w portach pojawi się „USB Serial Port”. W celu jego skonfigurowania wybierz z menu „Ustawienia” („Properties”). Przechodząc do zakładki „Ustawienia Portu” („Port Settings”) możemy zdefiniować prędkość transmisji (Bits per second), ilość bitów danych (Data bits), parzystość (Parity), bity stopu (Stop bits) oraz sterowanie przepływem (Flow control). W celu zmiany kolejnych parametrów należy wejść w opcje zaawansowane (Advanced…). 16 Okno to umożliwia zmianę następujących parametrów: • numer portu COM (COM Port Number) • rozmiar bufora USB (USB Transfer Sizes) • wartość latency timer value (BM Options) • limity czasu odpowiedzi dla odczytu i zapisu (Timeouts) a także pozwala na ustanowienie kilku opcji: • Serial Enumerator – pozwala na wykrywanie urządzeń typu Plag-and-Play podłączonych do portu USB • Serial Printer – blokuje działanie parametrów „Timeouts” zezwalając na długie opóźnienia • Cancel If Power Off – opcja używana w przypadku problemów związanych z zawieszeniem bądź hibernacją. Powoduje brak reakcji na żądania otrzymywane przez sterowniki podczas tych stanów. • Event On Surprise Removal – stosowana bardzo rzadko • Set RTS On Close – powoduje ustanowienie sygnały RTS przy zamykaniu portu • Disable Modem Ctrl At Startup- opcja używana do nadzoru sygnałów kontrolnych modemu (RTS i DTS) przy starcie, zapobiega pojawianiu się „szpilek” na tych liniach – co mogłoby być przyczyną wejścia podłączonego do konwertera urządzenia w niepożądany stan. 17 Enumeracja PID i VID Aby użyć sterowników FTDI z urządzeniami, które są identyfikowane przez kombinacje VID (Vendor ID) i PID (Product ID) inne niż VID FTDI oraz domyślny PID urządzenia, pliki INF oraz INI sterownika muszą zostać zmodyfikowane. W piku ftdibus.inf następujące sekcje muszą zostać zaktualizowane: [FtdiHw] %USB\VID_0403&PID_6001.DeviceDesc%=FtdiBus,USB\VID_0403&PID_6001 [ControlFlags] ExcludeFromSelect=USB\VID_0403&PID_6001 [Strings] USB\VID_0403&PID_6001.DeviceDesc="USB Serial Converter" Opis urządzenia (DeviceDesc) może być zmieniony dowolnie – jest to nazwa pod jaką urządzenie pojawia się w Menedżerze Urządzeń. W pliku ftdiport.inf następujące wpisy podlegają modyfikacji: [FtdiHw] %VID_0403&PID_6001.DeviceDesc%=FtdiPort232,FTDIBUS\COMPORT&VID_0403&PI D_6001 [Strings] VID_0403&PID_6001.DeviceDesc="USB Serial Port" Powyższa uwaga dotycząca opisu urządzenia jest aktualna także i w tym miejscu. Aby móc automatycznie odinstalować urządzenia – za pomocą Dodaj/Usuń Programy (Add/Remove Programs) – konieczna jest następująca zmiana w plikach ftdiunin.ini oraz ftdiun2k: [Uninstall] Device=VID_0403&PID_6001 18 Zastosowanie o Konwertery USB na RS245 o Rozszerzanie możliwości urządzeń peryferyjnych o Oprzyrządowanie USB o Wymiana danych w przemyśle o Zabawki o Miernictwo Przykłady standardowej konfiguracji urządzenia Zasilanie z USB lub zewnętrzne. Powyższy rysunek ilustruje konfigurację zasilania MMusb245 za pomocą portu USB. Urządzenie pobiera zasilanie z magistrali USB. Podstawowe reguły dla urządzenia zasilanego z USB są następujące: a) Podłączone, urządzenie nie powinno pobierać więcej niż 100mA b) Wstrzymane urządzenie podłączone pod USB, nie powinno pobierać więcej niż 500uA c) Urządzenie pobierające więcej niż 100mA powinno posiadać MOSFET na pokładzie w celu utrzymania poboru mocy przez zewnętrzny obwód w okolicy 70mA podczas pracy i 200uA w trybie wstrzymania d) Urządzenie, które zużywa więcej niż 100mA nie może zostać podłączone do zasilania hub’a USB. e) żadne urządzenie nie może czerpać więcej niż 500mA z magistrali USB. Opcja USB Power Descriptor w EEPROM powinna być aby dopasować aktualne pobieranie mocy przez urządzenie. 19 zaprogramowana tak, Powyższy rysunek ilustruje konfiguracje zasilania zewnętrznego modułu MMusb245. W konfiguracji zasilania zewnętrznego moduł nie pobiera zasilania z magistrali USB, a z zewnętrznego zasilacza. Podstawowe reguły dla konfiguracji zasilania z zewnątrz są następujące: a) Urządzenie pracuje z zasilaniem zewnętrznym nie może powodować przepływu prądu po magistrali USB, kiedy host USB lub kontroler USB jest wyłączony b) Urządzenie zasilane z zewnątrz może pobierać tyle prądu ile potrzebuje podczas pracy oraz zawieszenia pracy USB tak długo jak posiada własne zasilanie. c) Urządzenie zasilane z zewnątrz może być użyte z dowolnym Hostem USB oraz z dowolnym Hubem USB zasilanym z magistrali jak i z zewnątrz. Opcja USB Power Descriptor w pamięci EEPROM powinna być ustawiona na wartość zero. Jeżeli interfejs logiczny pomiędzy modułem MMusb245 a układem peryferyjnym ma być w standardzie 3.3V, wówczas do pinu 22 powinno być dołączone napięcie +3.3V. 20 Schemat elektryczny modułu Musb245 1 USB 2 VCC VCC VCC VCC C5 10nF R3 470R C6 0.1uF 6 R4 27R R5 27R AVCC 30 5 C4 33nF C7 0.1uF 3V3OUT 8 U2 3 26 13 1 2 3 4 VCC VCC VCC-IO CN1 CN-USB FB1 FERRITE BEAD D0 D1 USBDM D2 7 R6 USBDP D3 D4 1k5 5 RSTOUT# D5 RSTOUT# 27 D6 XTIN Y1 6MHz RESONATOR D7 VCC-5v 25 D0 IO10 24 D1 IO11 23 D2 IO12 22 D3 IO13 21 D4 IO14 20 D5 IO15 19 D6 IO16 18 D7 IO17 16 RD# IO20 15 WR IO21 14 TXE# IO22 12 RXF# IO23 PWREN# IO24 5v MCU or Logic cct RD# 28 XTOUT 4 VCC WR RESET# TXE# RXF# 32 EECS 1 SI/WU EESK 2 EEDATA PWREN# 29 GND GND TEST VCC VCC 10 RSTOUT# RESET# GND FT245BM 9 17 31 AGND DECOUPLING CAPS 11 R7 47k C3 10uF C2 0.1uF C1 0.1uF VCC U1 1 2 3 4 CS SK DIN DOUT VCC NC NC GND 8 7 6 5 FT245BM 5v BUS POWERED EXAMPLE 93C46/56/66 ( Optional ) R2 2k2 R1 10k Schemat elektryczny układu testującego VCC R14 1k 2 3 4 5 6 7 8 9 IO10 IO11 IO12 IO13 IO14 IO15 IO16 IO17 U3 1 19 0 B0 B1 B2 B3 B4 B5 B6 B7 A0 A1 A2 A3 A4 A5 A6 A7 R15 1k R12 1k R13 1k R8 1k R9 1k 18 17 16 15 14 13 12 11 R10 1k R11 1k 1 2 3 4 5 6 7 8 S1 16 15 14 13 12 11 10 9 SW DIP-8 DIR G 74LS245 R23 D5 RD# 470 U4 VCC 2 3 4 5 6 7 8 9 1 19 A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 18 17 16 15 14 13 12 11 R22 470 R21 470 R20 DIR G 470 74LS245 R19 0 470 R18 470 R17 470 R18 470 21 LED D6 LED D1 LED D2 LED D7 LED D3 LED D8 LED D4 LED 0 Przykładowe ustawienie układu w trybie Bit-Bang mode. Po pierwsze, FT_SetDivisor(), kontroluje wielkości zatrzaskiwane na wyjściach układu ( D0…D7 ). Przykład ustawienia trybu Bit-Bang mode w C++: FT_STATUS status; USHORT dta; Dta = 0x400; status = SetDivisor(dta); if(status != FT_OK) { CString str; str.Format("Data entered (%d) is not a valid divisor.", dta); AfxMessageBox(str); } Program ten pozwala ustawić linie danych wyjściowych w określonym z góry czasie. W trybie Bit - Bang nie ma żadnej linii przesyłowej dla " “latching” dane do zewnętrznego urządzenie — dane po prostu ukazują się na ośmiu liniach danych. Jedena z osiem linii danych może być użyta jako latch requiring. Główne oprogramowanie ustawia zarówno stan danych siedmiu bitów i linii sterująceji oddzielnie. Drugi rozkaz, FT_Write(), posyła dane do pamięci FIFO w FT245BM, gdzie czeka na wysłanie danych wyjściowych. Trzeci rozkaz, FT_SetBitMode(), pozwala wybrać poszczególne bity od D0 do D7 i ustawić jeden bit wyjściowy w stan 0 lub 1. Na przykład : //enable bit bang mode status = SetBitMode(0x0f, 0xff); if(status == FT_OK) { //bit bang mode active } 22 Rozkaz, FT_GetBitMode(), jest używany aby odczytać aktualny stan (wysoki / niski) poszczególnych linii danych. Dane, które są pobrane z FIFO do linii danych wyjściowych są zamknięty na ”latch” aż inny bajt zostanie wysłany. Żaden zewnętrzny bufor albo ”latch requiring” nie jest wymagany, aby utrzymać stan linii danych w trybie Bit - Bang. ( Kiedy nie jest w trybie Bit Bang, dane tylko są trzymane na liniach danych tak długo jak RD # jest trzymany w stanie niskim). 23