poniedziałek, 15 marca 2021

USB w PIC32MM - uruchomienie przykładu z biblioteki Microchipa.


Tym razem krótki wpis w którym pokażę jak w ultraszybki sposób możemy uruchomić komunikację po USB pomiędzy komputerem a mikrokontrolerem PIC32MM. Dla przypomnienia seria PIC32MM firmy Microchip to segment tanich i sprytnych mikrokontrolerów. Jest to bardzo udana seria Microchipa, którą w sposób łatwy zaprogramujemy bez użycia "ciężkich" bibliotek HAL-o podobnych. Jest to jedyna seria 32-bitowa konfigurowalna w MPLABX-IDE za pomocą wtyczki MCC ,co powoduje, że kontakt z tym mikrokontrolerem to czysta przyjemność. Ponieważ PIC32MM w standardzie ma na pokładzie USB, postanowiłem zobaczyć czy to działa :). Poszedłem w tym przypadku maksymalnie na skróty i użyłem przykładu Microchipa do uruchomienia komunikacji. Przykład ten zawarty jest w standardowej bibliotece/stosie USB , który dołączamy we wtyczce MCC. Pokażę zatem jak to ugryźć.

Do zabawy użyję płytki PIC32MM USB Curiosity  na pokładzie której znajdziemy PIC32MM0256GPM064. Warto tutaj nadmienić, że ten MCU (obudowa 64 pin) kupimy na naszym rynku za ok 11 zeta. Gdyby ten MCU chodził jeszcze w ekosystemie 5V to byłby to prawie ideał w segmencie low-end



Na płytce mamy dwa gniazda USB , jedno jest skorelowane z programatorem a drugie jest do wykorzystania przez użytkownika. Do uruchomienia przykładu potrzebujemy MPLABX IDE z doinstalowaną z poziomu środowiska wtyczką MCC oraz kompilatora XC32.. Powyższe oprogramowanie jest bezpłatne.  Aby szybko przejść do przykładu , uruchamiamy środowisko MPLABX IDE. i tworzymy nowy projekt. U mnie nazwa projektu to pic32mm0256gpm064_USB.


Uruchamiamy wtyczkę MCC, klikając jeden raz w ikonkę MCC. Wyskoczy okienko z propozycją nazwy dla zapisu konfiguracji MCC, potwierdzamy domyślną nazwę. Na obrazku poniżej główne okno otwartej wtyczki MCC na którym ustawiłem zegar. Proszę to zrobić dokładnie jak na obrazku.


USB potrzebuje stabilnego zegara 48MHz, nasz PIC32MM potrafi taki wyczarować. Tu warto nadmienić , że PIC-e mają stosunkowo stabilne zegary wewnętrzne RC.

Zwróćmy jeszcze uwagę czy na obrazku z kłódeczkami czy piny do programatora czyli PGCx i PGDx są zapięte na pinach RB0 i RB1. Takiej konfiguracji wymaga nasza płytka.

Kolejnym krokiem jest dodanie do projektu funkcjonalności o nazwie MLA USB Device Lite. Znajdziemy ją w okienku Device Resources po lewej stronie na samym dole pod nazwą USB. "Klikamy" plusika i wybrana funkcjonalność pojawi nam się w okienku Project Resources jak poniżej :

W ten szybki sposób dołączyliśmy do naszego projektu bibliotekę/stos USB skonfigurowany dla urządzenia typu Device. Na środku ekranu pojawi nam się okienko konfiguracyjne , które przewijamy do końca i ptaszkujemy opcję Generate CDC example.


To jest nasza jedyna ingerencja w ustawienia USB :), resztę roboty odwalił za nas Microchip. W podstawowym ustawieniu czyli tak jak jest , skonfigurowana jest klasa CDC czyli taka metoda komunikacji w USB umożliwiająca np. emulację VCOM czyli m.in wirtualnego portu RS232. Taki tryb komunikacji w USB umożliwi nam emulowanie łącza RS232

W sumie to wszystkie nasze działania konfiguracyjne we wtyczce MCC. "Klikamy" zatem zakładkę Generate (lewe górne okno) i zamykamy MCC , "klikając" jeden raz w ikonkę MCC. Szablon projektu z dołączonym stosem USB został wygenerowany.

W drzewie naszego projektu otwieramy sobie plik o nazwie  example_mcc_usb_cdc.c w pliku tym jest funkcja demo MCC_USB_CDC_DemoTasks(), funkcję tą wklejamy do pętli głównej naszego programu.




Z funkcji demo dowiemy się jak wysyłać i odbierać dane po USB w trybie emulacji RS232. Parametry transmisji dla RS232 są ustawiane w funkcji konfiguracyjnej CDCInitEP(), którą znajdziemy w pliku usb_device_cdc.c


Baud Rate ustawione jest na 19200 . Teraz pytanie co robi ten przykład ? Z terminala np. Putty wysyłamy znak do mikrokontrolera np literkę a , mikrokontroler odsyła nam znak ASCII powiększony o wartość 1 czyli w terminalu zobaczymy odpowiedź z MCU w postaci literki b. Przykład ten może być bazą do dalszych zabaw z USB. Warto zainstalować sobie na PC biblioteki z przykładami od Microchipa tzw MLA. Znajdziemy je tutaj Microchip Libraries for Applications

Na koniec działanie przykładu . Wgrywamy wsad do naszej płytki i podpinamy się do USB użytkownika czyli USB2.  System wykryje naszą płytkę , u mnie na porcie COM4 w WIN10. Odpalam Putty i ustawiam jak poniżej :


Jak w terminalu wklepiemy literkę a pojawi nam się literka b itd . Przykład Microchipa działa co sprawdziłem osobiście :). Z tego prostego przykładu możemy zorientować się jak realizować wysyłanie i odbieranie po USB. Oczywiście tryb Device i klasa komunikacji CDC nie wyczerpuje wszystkich możliwości  jakie oferuje nam PIC32MM w zakresie komunikacji USB. Ale to już temat na inną bajkę.
Stos USB dostarczany przez Microchipa jest stosunkowo "lekki" , zajmuje tylko 2% Flasha i 6% RAM-u. w naszym MCU. Brawo Panie Microchip.


Pozdrawiam

PICmajster
picmajster.blog@gmail.com

Brak komentarzy:

Prześlij komentarz