Ta notka ma niewiele wspólnego z katastrofą Tu154M PLF 101 – raczej stanowi informację dla osób, które w związku z katastrofą próbują tworzyć własne interpretacje działania systemów komputerowych takich, jak FMS lub TAWS. Podawane tu informacje dotyczą technologii zamrażania stanu pamięci tych systemów w momencie wykrycia zaniku zasilania. Opisywana metoda jest typowa dla stanu techniki mikroprocesorowej w czasie, gdy urządzenia te były konstruowane i wprowadzane do eksploatacji.
Standardem konstrukcyjnym, w zakresie kontroli dostępu mikroprocesorów (uP) (takich jak stosowany w FMS układ Z8000) do pamięci RAM typu statycznego podczas zaniku zasilania było zastosowanie układu scalonego z rodziny MAX690. Konkretnych wersji takich układów jest kilka – różnią się one parametrami elektrycznymi i stopniem zaawansowania zastosowanej logiki. Wersje uproszczone mają obudowę DIP8 i oznaczenia MAX69x, gdzie x jest cyfra parzystą, a wersje zaawansowane obudowę DIP16 i oznaczenia MAX69y, gdzie y jest cyfrą nieparzystą. Schemat aplikacyjny systemu z zastosowaniem wersji uproszczonej przedstawiono na rysunku 1.

Rys 1. Typowa konfiguracja systemu komputerowego wykorzystującego uproszczony układ scalony z rodziny MAX690
Istotą wszystkich wersji układów z rodziny MAX690 jest monitorowanie poziomu napięcia zasilającego system. Jeśli napięcie to jest wyższe niż 4.65V (w niektórych wersjach układu 4.4V), układ nie ingeruje w wymianę danych między mikroprocesorem a pamięcią. Z chwilą, kiedy napięcie zasilające spada poniżej tego progu, układ odcina dostęp mikroprocesora do pamięci i przełącza zasilanie tej pamięci na baterię, a następnie wystawia sygnał /RESET do mikroprocesora, co powoduje jego całkowitą deaktywację, w tym wprowadzenie wszystkich jego wyjść w stan wysokiej impedancji, tzw „trzeci stan”. Wersje zaawansowane zapewniają także prawidłowe podtrzymanie sygnału /CE dla pamięci (o czym będzie dalej), a wersje uproszczone nie dostarczają takiej możliwości.
Dla mikroprocesorów, generacji stosowanej w czasie gdy konstruowano FMS, standardowe napięcie zasilające musiało być zbliżone do 5 V z niewielkim tylko dopuszczalnym odchyleniem w dół. Wybór wersji układu MAX z progiem 4.65V lub 4.4 V zależał od właściwości konkretnego mikroprocesora – stosowano taką wersję, która zapewniała odłączenie mikroprocesora przy napięciu nadal gwarantującym jego poprawną pracę. Jeśli wybrano by wersję ze zbyt niskim progiem odcięcia, mikroprocesor mógłby zniszczyć zawartość pamięci RAM z powodu wyjścia poza zakres normalnego działania.
Na rysunku 2 przedstawiono schemat aplikacyjny z zastosowaniem wersji zaawansowanych układów (MAX691, MAX693 lub MAX695). Istotą tych wersji jest monitorowanie stanu sygnału /CE (w Z8000 nosi on nazwę /MREQ) kierowanego z mikroprocesora do pamięci. Normalna wymiana danych między pamięcią a mikroprocesorem odbywa się w ten sposób, że mikroprocesor wystawia adres na szynie adresowej A0-A15, ustawia kierunek przepływu danych sygnałem R/W i ewentualnie wystawia zapisywane dane na szynie danych D0-D15, po czym sygnałem /CE wyznacza czas cyklu dla pamięci RAM. Czas trwania sygnału /CE musi być tak dobrany, by operacja zapisu lub odczytu pamięci dawała stabilny wynik. Przy zastosowaniu układów MAX691, MAX693 lub MAX695 sygnał /CE IN z mikroprocesora jest przechwytywany, a do pamięci RAM kierowany jest sygnał /CE OUT. Dzięki temu układ wyznacza moment blokady i przełączenia zasilania pamięci, tak by ostatni cykl dostępu do pomięci z mikroprocesora był dostatecznie długi, gwarantujący poprawny zapis lub odczyt danych.

Rys 2. Zaawansowana konfiguracja systemu z układem z rodziny MAX690
Związane z tym przebiegi czasowe pokazano na rysunku 3. Jak widać układ zapewnia nie tylko odcinane pamięci od reszty systemu przy zaniku zasilania, ale także prawidłowe przywracanie stanu systemu po nawrocie zasilania. Widać to na wykresie zmian sygnału /RESET, gdzie zapewniony jest 50 ms odstęp zaniku aktywności tego sygnału od momentu powrotu napięcia zasilającego do wartości 4.7 V. Dopiero zanik tego sygnału powoduje, że wyjścia mikroprocesora wychodzą z „trzeciego stanu”, a jego licznik rozkazów rozpoczyna ich pobieranie z ustalonej lokacji pamięci RAM (w przypadku mikroprocesora Z8000 jest adres 0002, 0004 lub 0006).
Niestety samo wykorzystanie sygnałów /CE IN i /CE OUT nie gwarantuje poprawnej synchronizacji mikroprocesora i pamięci przy zaniku zasilania w przypadku tak zaawansowanych systemów jak FMS. Problem wynika stąd, że szyna wymiany danych między mikroprocesorem a pamięcią RAM ma szerokość 16 bitów, a argumenty i wyniki niektórych operacji są dłuższe: 32 lub 64 bitowe i więcej. Wtedy do przesłania całego kompletu danych trzeba wykonać kilka cykli dostępu pomiędzy uP a RAM. Logika odcinania pamięci od mikroprocesora nie może pozwolić na to, aby odcięcie to nastąpiło w środku przesyłania danych, bo w rezultacie w pamięci powstanie niespójny stan.
Mikroprocesor Z8000 daje możliwość rozwiązania tego problemu. Może się to odbyć przy wykorzystaniu sygnału NMI, który jest generowany przez układy z rodziny MAX690 przy spadku napięcia do poziomu 4.8V. Sygnał ten doprowadzony do uP powoduje uruchomienie przerwania niemaskowalnego. W przerwaniu tym, które zachodzi zawsze po zakończeniu wykonywania bieżącego rozkazu, należy zastopować dalsze wykonywanie programu instrukcją HALT. Dzięki temu, podczas dalszego spadku napięcia zasilającego mikroprocesor, blokuje się możliwość wykonywania transferów danych z lub do pamięci, wymagające kilku cykli na szynie.

Rys 3. Koordynacja sygnałów doprowadzanych do mikroprocesora i pamięci RAM
Nie należy przywiązywać znaczenia do błędu w rysunku pt. „Figure 6. Reset Timing” w oryginalnej notce aplikacyjnej [1], gdzie dwa różne sygnały oznaczono jako /CE IN – poprawny jest zamieszczony tu rysunek 3. Nie ma też znaczenia to, że układ powtarza stan sygnału /CE IN na wyjściu /CE OUT tuż po wzroście napięcia zasilającego powyżej 4.7 V, bez względu na stan sygnału /RESET. Nie ma znaczenia, bo skoro aktywny jest sygnał /RESET, to mikroprocesor nie wystawi sygnału /CE IN do układu MAX.
Położenie układu z rodziny MAX 690 na płycie głównej systemu FMS firmy UASC pokazano na rysunku 4 – w czerwonej elipsie. Jak widać układ jest położony tuż obok baterii i wspomagany przez tranzystor jak na schemacie aplikacyjnym z rysunku 2. Nie da się odczytać(?), którą dokładnie wersję układu zastosowano, ale widać, że jest to wersja zaawansowana , w odbudowie DIP16. Powyżej widać także jakiś układ w obudowie DIP8 – być może jest to także układ z rodziny MAX690, do obsługi innych układów scalonych (np. korzystających z DMA lub pamięci konfiguracji) wchodzących w skład systemu, pewności jednak nie ma.
Rys 4. Położenie układu z rodziny MAX 690 na płycie głównej systemu FMS.
W podsumowaniu: to co napisałem należy rozumieć w ten sposób, że bateria wykorzystywana do podtrzymania stanu pamięci RAM służy tylko i włączenie do tego celu. Po zejściu napięcia na kondensatorach wyjściowych zasilacza systemu poniżej progu 4.65V nie ma żadnego podtrzymania normalnych funkcji systemu. Wszelkie teorie oparte na założeniu, że bateria służy do podtrzymania jakichś innych funkcji systemu są błędne – cokolwiek by się nie działo w systemie i jego otoczeniu, po zejściu zasilania poniżej progu nie ma to wpływu na stan pamięci RAM, bo układ MAX690 odcina ją od otoczenia.
Opisane tu zachowanie się systemu z wykorzystaniem układu MAX690 nie dotyczy tylko stanów nadzwyczajnych, tj. zaniku zasilania w wyniku katastrofy. To jest normalne zachowanie się systemu w wyniku odłączeniu zasilania po zakończeniu lotu samolotu.
Literatura
[1] https://datasheets.maximintegrated.com/en/ds/MAX690-MAX695.pdf
[2] BRADLY K. FAWCETT THE Z8000 MICROPROCESSOR A Design Handbook
[3] Z8000 CPU Manual Zilog Inc.
Inne tematy w dziale Polityka