Implementacja protokołu PTP IEEE 1588 V2 na mikrokontrolerze Kinetis K60

Lista zadań MQX

W tej części zostały opisane wszystkie zadania aplikacji stworzonej za pomocą środowiska MQX. Na rysunku 8 przedstawiono zadania aplikacji i przypisane im priorytety (im wyższy numer, tym niższy priorytet).


 


Rys. 8. Zadania aplikacji

Rys. 8. Zadania aplikacji


 



  • Proces powłoki (shell task) – jedyny proces z przypisanym atrybutem autostartu – jest uruchamiany wraz z uruchomieniem MQX

  • Procesy RTCS – uruchamiane przez proces powłoki, realizują stos TCP/IP

  • Usługa Telnet Server – gdy jest aktywna, prowadzony jest nasłuch gniazda strumienia. Za każdym razem, gdy klient inicjalizuje połączenie, serwer tworzy nowy proces powłoki Telnet i przekierowuje wejście oraz wyjście tego procesu do podłączonego gniazda. Przetwarzanie komend jest realizowane przez określoną powłokę

  • Usługa serwera HTTP – gdy jest aktywna, proces ten obsługuje, ocenia i odpowiada na zapytania HTTP

  • Usługa PTPMain – uruchamiana przez wątek powłoki, obsługuje PTP. W wersji ewaluacyjnej IXXAT IEEE 1588, usługa PTP jest automatycznie zatrzymywana 4 godziny po uruchomieniu MQX

  • Usługa Telnet – tworzona przez serwer Telnet, odpowiada za powłokę Telnet, podobnie jak powłoka portu szeregowego

  • Dziennik powłoki – tworzony przez wątek powłoki po wywołaniu polecenia „show on” z linii komend lub za pośrednictwem powłoki Telnet, jeśli wydane zostanie polecenie „show on”. Usługa dziennika powłoki zapisuje logi zawierające dane: faktyczny czas IEEE1588, przesunięcie w stosunku do modułu nadrzędnego, opóźnienia master-slave, opóźnienie slave-master, opóźnienie jednostronne, dryft zegara. Zapis następuje co sekundę, na konsolę szeregową lub konsolę Telnet.

Pamięć nieulotna

Poza wyjątkiem w postaci danych konfiguracyjnych MQX1588, które są związane z biblioteką MQX1588, użytkownik może określić inne dane aplikacji, które będą przechowywane w zewnętrznej pamięci NAND Flash. Następująca struktura zależna od aplikacji została zdefiniowana w pliku MQX1588DEMO.h (listing 1).


 


Listing 1.

 


lib1588_cfg – jest to struktura konfiguracyjna biblioteki MQX1588, a jej zawartość jest kluczowa dla poprawnego funkcjonowania stosu IEEE 1588. Zawiera parametry PTP niskiego poziomu zależne od biblioteki, parametry konfiguracji sieci i parametry związane z biblioteką MQX1588. Więcej szczegółów na temat tej struktury można znaleźć w dokumentacji biblioteki MQX1588. Funkcje MQX1588_ReadConfig() i MQX1588_WriteConfig() mogą być przeciążane przez użytkownika i są przeznaczone do odczytu i zapisu tej struktury.


Autorun – ta zmienna aktywuje automatyczny powrót do zadania PTPMain po jego utworzeniu i tym samym rozpoczyna proces synchronizacji zegara po resecie płytki bez potrzeby interwencji użytkownika.


Checksum – 32-bitowa suma kontrolna jest konieczna do utrzymania i weryfikacji integralności struktury MQX1588DEMO_CONFIG w pamięci Flash.


Struktura default_MQX1588DEMOCfg typu MQX1588DEMO_CONFIG jest zdefiniowana w pliku ptp_cfg.h. Struktura ta jest zapisywana w zewnętrznej pamięci NAND Flash po pierwszym uruchomieniu aplikacji, a także gdy suma kontrolna struktury konfiguracji zapisana w pamięci NAND okaże się nieprawidłowa. Użytkownik może modyfikować domyślną strukturę konfiguracji przed kompilacją projektu.


Zależne od aplikacji funkcje MQX1588_ReadConfig() i MQX1588_WriteConfig(), które pośredniczą w dostępie do struktury  MQX1588_WriteConfig() zapisanej w pamięci NAND Flash są zdefiniowane w pliku MQX1588DEMO.c. Funkcje te są używane przez wywołania biblioteki MQX1588 API, funkcje MQX1588_ReadConfig() i MQX1588_WriteConfig(), za każdym razem, gdy konieczny jest odczyt lub zapis danych konfiguracyjnych MQX1588.


Określanie czasu

Zdolność do określania czasu (timestamping) modułu 10/100Mbps Ethernet MAC-NET układu Kinetis K60 pozwala na precyzyjne wyznaczenie czasu przyjścia i wysłania ramek. Ten moduł zawiera regulowany czasomierz, zaimplementowany jako licznik 32-bitowy. Poprzez dedykowaną logikę korygującą, czasomierz może być regulowany w celu synchronizacji z odległym modułem nadrzędnym i stanowić zsynchronizowane źródło czasu odniesienia dla lokalnego systemu. Czasomierz może być skonfigurowany jako źródło przerwania następującego po upływie określonego czasu, umożliwiając tym samym synchronizację czasomierzy w programie, lub w celu wykonania innych zsynchronizowanych funkcji systemowych.


Gdy odbierana jest ramka PTP, MAC zatrzaskuje wartość czasomierza tak szybko, jak wykryte zostanie pole początku ramki (SFD – Start Frame Delimiter). Stan ten jest przepisywany do deskryptora bufora Rx. Odbywa się to dla wszystkich odbieranych ramek.


Podczas transmisji sterownik klienta (sterownik MAC-NET) powinien wykryć ramki zdarzenia 1588 i umieścić w buforze deskryptora Tx informację, że czas ramki ma być zapisany. Następnie moduł MAC rejestruje moment transmisji ramki w dedykowanym rejestrze i generuje przerwanie, sygnalizując, że dostępny jest nowy moment czasowy Tx.


Szczegółowy opis możliwości określania czasów modułu peryferyjnego MAC-NET znajduje się w podręczniku użytkownika K60 Sub-Family Reference Manual, K60P104M100SF2RM.


Interfejs użytkownika

Aplikacja demonstracyjna IEEE 1588 oparta na bibliotece Freescale MQX1588 i przeznaczona dla układu Kinetis K60 może być obsługiwana za pomocą:



  • Szeregowej linii komend

  • Konsoli Telnet

  • Serwera HTTP

  • Aplikacji IXXAT PTP Manager

W tabeli 2 przedstawiono opcje kompilacji, które muszą zostać odpowiednio skonfigurowane w pliku MQX1588DEMO.h, by aktywować serwer Telnet i serwer sieciowy HTTP w aplikacji.


 


Tab. 2. Opcje konfiguracyjne kompilacji dla dema MQX 1588












Opcja Wartość
MQX1588DEMOCFG_ENABLE_WEBSERVER 1
MQX1588DEMOCFG_ENABLE_TELNET_SERVER 1

 

O autorze