2012-10-01 31 views
7

Czy ktoś wie, czy możliwe jest emulowanie UART (prosty szeregowy nadawanie i odbieranie) przez USB? Jak to się dokona?Emulacja UART przez USB

Znalazłem ten link na stronie Microchip, ale nie jest to zbyt przychodzące.

http://www.microchip.com/forums/m522571-print.aspx

Jakieś pomysły? Dzięki.

+4

Zdecydowanie za pomocą FTDI jest najlepszym sposobem, aby przejść. – TJD

+0

FTDI? Proszę wytłumacz. Mój menedżer prosi o skonfigurowanie zintegrowanego urządzenia peryferyjnego USB do działania jako UART. O ile mogę powiedzieć, nie jest to możliwe, ale nalega, że ​​tak jest. –

+0

Chipy FTDI konwertują UART na USB. Więc wewnętrznie używałbyś tylko zwykłego urządzenia peryferyjnego UART, ale zewnętrznie podłączasz się przez USB. Po stronie komputera dostajesz wirtualny port COM, dzięki czemu możesz wchodzić z nim w interakcje jako normalny port szeregowy. To jest bardzo czyste i łatwe, i sposób, w jaki wszyscy to robią. Nie mogę sobie wyobrazić, dlaczego naprawdę musiałbyś używać peryferii USB swojego chipa. – TJD

Odpowiedz

8

Zasadniczo masz dwie opcje do emulowania UART na USB:

  1. Wykorzystanie istniejącego produktu. Firma FTDI dostarcza dobrze znane i solidne układy mostkowe UART-USB, np. FT230X. Pro: Nie potrzebujesz żadnej szczegółowej wiedzy o USB. Minusy: drogie, jeśli wykorzystywane w produkcji masowej. Dodatkowy sprzęt, potrzebuje dodatkowej mocy.

  2. Zaimplementuj klasę urządzeń USB "Klasa urządzeń komunikacyjnych" (CDC). Specyfikacja CDC dostępna jest na stronie USB.org, patrz: here. Pro: Tanie w masowej produkcji (jeśli twój mikrokontroler ma USB na pokładzie). Con: Potrzebujesz szczegółowej wiedzy o USB.

+0

Proste i na temat. Okazuje się, że mój menedżer mówił o implementacji wirtualnego portu COM. Dzięki! –

+0

Link jest uszkodzony. Czy powinno być teraz tutaj? http://www.usb.org/developers/docs/ –

+1

@ cp engr: Dziękuję za podpowiedź. Twój link idzie w dobrym kierunku. O jeden krok dalej i przechodzisz do specyfikacji klasy USB, gdzie można znaleźć specyfikację CDC: [www.usb.org/developers/docs/devclass_docs/](http://www.usb.org/developers/docs/devclass_docs/). – Habi

11

trzeba zaimplementować stos urządzenia jako urządzenia CDC ACM (znany również jako wirtualny port COM lub VCP). Większość dostawców mikrokontrolerów z obsługą USB ma przykładowy kod lub uwagi dotyczące aplikacji.

W związku z tym urządzenie będzie wyglądać jak port COM w odniesieniu do systemu Windows. Na końcu urządzenia otrzymasz surowe bloki danych przesyłanych. Odpowiednia warstwa abstrakcji może zostać zaimplementowana dla interfejsów UART i USB, aby zapewnić ten sam interfejs, jeśli to konieczne.

Jedną z nich jest to, że urządzenia USB wymagają identyfikatora dostawcy przydzielonego przez Forum Implementatora USB, pod numerem $5000 fee (poprawny 23 czerwca 2016 r.). Jeśli zamierzasz wypuścić urządzenie na wolność, naprawdę będziesz go potrzebować, jeśli Twoje urządzenie ma być rozpoznawane i zachowywać się poprawnie z innymi urządzeniami. Niektórzy dostawcy mikrokontrolerów pozwalają na używanie ich identyfikatora dostawcy dla podzbioru identyfikatorów produktów za darmo lub za mniejszą opłatą, ale mogą to robić tylko wtedy, gdy kupujesz od nich znaczące ilości urządzeń.

Innym problemem jest to, że w systemach OSX i Linux CDC/ACM jest rozpoznawany bez żadnych dodatkowych sterowników, Windows jest bardziej wybredny i wymaga pliku INF, aby powiązać konkretnego dostawcę USB i identyfikator produktu ze sterownikiem usbser.sys. Następnie wkracza się w cały świat podpisywania sterowników, co jest niezbędne w przypadku korzystania z systemu Windows Vista 64 lub dowolnej wersji systemu Windows 7. Podpisywanie podpisu kodu również będzie kosztować pieniądze. Jeśli twój dostawca podał przykład kodu VCP, prawdopodobnie zapewnią również podpisanego sterownika. Przykład STCP VM STMicroelectronios ma nawet certyfikat WHQL, więc można go uzyskać automatycznie przez Windows Update.

Rezultat jest taki, że w przypadku eksperymentów można to zrobić, jeśli dostawca już dostarcza kod i podpisany sterownik (lub użytkownik nie korzysta z systemu Windows), ale aby wdrożyć produkt, potrzebny będzie identyfikator dostawcy i podpisywanie kodu certyfikat. To szczerze mówiąc, jest to pole minowe.

Prostszym rozwiązaniem jest użycie FTDI USB < -> Chip szeregowy. Jest to szczególnie użyteczne w przypadku mikrokontrolera bez własnego kontrolera USB, ale szybkość przesyłania danych będzie ograniczona przez interfejs mikro i/lub FTDI UART, a nie przez szybkość USB. Chip FTDI może być użyty tak jak jest, używając VID/PID FTDI lub możesz go dostosować za pomocą własnego VID/PID.Dostosowywanie powoduje powrót do konieczności uzyskania identyfikatora VID i certyfikatu podpisu, ale pozwala na unikalne identyfikowanie urządzenia, a nie ogólnego portu szeregowego.

+3

Dodam to: Unikaj jakiegokolwiek klucza USB-serial bazującego na PL2303 - sam chipset wydaje się flakey i sterowniki dla Windows i MacOSX są niewiarygodne. Naprawdę złe wieści podczas debugowania wbudowanego sprzętu i polegasz na porcie szeregowym do debugowania. – marko

+2

Potrafię ręczyć za kłopoty w oknach za pomocą adapterów PL2303. Niebieskie ekrany i tym podobne, jeśli jest zbyt dużo danych na wielu adapterach itp. Również kilka wariantów tych adapterów, które stosowałem, działało całkiem dobrze pod Linuksem. –

+0

Jestem zainteresowany użyciem płyty, która wykorzystuje układ FTDI USB-to-Serial i zastanawiałem się, w jaki sposób interfejs ten będzie działał z portem USB mikrokontrolera STM32. Zastanawiam się, jak komunikować się z nim z punktu widzenia mikrokontrolera. Z mojego zrozumienia (które przyznaję jest ograniczone), aby mikro rozpoznało go jako VCP, wymagałoby to sterownika FTDI VCP. Nie jestem pewien, czy możliwe jest nawet zainstalowanie tego na urządzeniu STM32 micro i miałem nadzieję sprawdzić, czy istnieją alternatywy do połączenia z płytą przez USB. – mban