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
- 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.
typedef struct
{
MQX1588_CONFIG lib1588_cfg;
boolean autorun;
uint_32 checksum;
} MQX1588DEMO_CONFIG, _PTR_ MQX1588DEMO_CONFIG_PTR;
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 |