Interfejsy szeregowe

Interfejsy szeregowe

Interfejs RS-232 i pochodne

Interfejs I2C

Synchroniczny interfejs szeregowy SMI

Konfiguracje systemowe interfejsu SMI.
8-bitowy interfejs SMI.
Realizacja protokołu transmisji przez interfejs SMI.
Format poszczególnych komend:



Interfejs RS-232 i pochodne.
          Przewidziane są one zazwyczaj do zapewnienia łączności mc z komputerem PC lub innym mc.
mc wyposażone są w rozbudowane układy UART posiadające własne generatory sygnałów odniesienia, bufory, dekodery kodów sterujących, mogące pracować w trybie DUPLEX z protokołem potwierdzeń sprzętowych i Xon/Xoff. W praktyce jednak nie spotyka się zewnętrznych mikroukładów wyposażonych w ten system interfejsowy.  Nie może więc on być traktowany jako platforma rozszerzenia mikrosystemu, lecz jedynie jako interfejs dedykowany budowie specjalizowanego łącza.

Interfejs I2C            reszta

      Standard ten został opracowany przez firmę Phillips dla zapewnienia wymiany informacji pomiędzy układami scalonymi ( Inter - IC).
W chwili obecnej produkowane są mc posiadające jednostki interfejsu I2C. Są to najczęściej układy kompatybilne z procesorem 80C51. Spośród układów peryferyjnych I2C spotykany jest na szerszą skalę wśród pamięci EEPROM.
Interfejs ten należy również traktować jako dedykowany - do zapewnienia łączników z układami scalonymi firmy Phillips i pochodnymi.


Synchroniczny interfejs szeregowy SMI.

Model systemu komunikacyjnego.

          Protokół transmisji synchronicznej ( w najprostszej postaci ) wymaga dwóch rejestrów przesuwnych połączonych w licznik pierścieniowy ( wej. jest połązcone z wyj. ). Transmisja jest synchroniczna - jeden z układów dostarcza sygnału zegara, odseparowanego od sygnału danych, zgodnie ze zboczami zegara taktującego. Układ generujący sygnał zegara jest określony jako nadrzędny ( ang. Master), bez względu na to czy dane są przez niego nadawane czy odbierane. Wszystkie pozostałe układy  na magistrali są określone jako podrzędne ( ang. Slave). Sygnały danych i zegara są przesyłane oddzielnymi jednokierunkowymi liniami. Sygnał zegara nie jest ciągły, nadawany jest jedynie w czasie trwania transmisji. Umożliwia to odbiór poszczególnych bitów danych bez konieczności testowania bitów startu i stopu, ch-tycznego dla transmisji asynchronicznej.
          Przez wprowadzenie dodatkowych przerzutników Q0 na wejściu rejestru przesuwnego oraz inwerterów negujących ich sygnał zegarowy, likwiduje się przekłamania transmisji wynikające ze zmniejszenia wymaganego czasu podtrzymania danych ( ang. Data hold time ), spowodowanego przesunięciami czasowymi. Dzięki temu rozwiązaniu dane są wpisywane do rejestru jednym zboczem zegarowym, a przesuwane drugim. Zwiększa to czas podtrzymania danych odbiornika do:
                1/2TCLK - td   gdzie TCLK - okres zegara,  td - opóźnienie magistrali

           Układy wyposażone w SMI są wewnętrznie programowane i sterowane przy pomocy rejestrów równoległych. Dane przeznaczone do wysłania są ładowane przed transmisją do rejestru szeregowego z rejestru równoległego. Zawartość rejestrów szeregowych jest wymieniana między urządzeniami podczas transmisji, a następnie dane odebrane są przesyłane z rejestru szeregowego do odpowiedniego rejestru równoległego. Operacje przesłania danych pomiędzy rejestrami równoległymi a szeregowymi rejestrami transmisyjnymi są wywoływane przy pomocy dodatkowych linii sterujących.
  Operacje przesyłania pomiędzy tymi rejestrami mogą być wywołane w dwojaki sposób:

1.  poprzez uaktywnienie dodatkowej linii sterującej oznaczonej najczęściej jako �wybór układu� -  -
     - CS (ang. Chip select ), �pisz�, �czytaj�, �rozkaz� lub podobne;
2.  poprzez ustawienie odpowiedniego bitu w odpowiednim rejestrze sterującym ( dla mc ). Dodatkowo w mc przesłanie z rejestru transmisyjnego do równoległego, po odebraniu danej, odbywa się najczęściej automatycznie. Fakt ten jest sygnalizowany odpowiednią flagą.
  Właściwości układu z punktu widzenia interfejsu mogą być opisane przy pomocy 3 funkcji :
1.  Talker - przesyła zawartość rejestru równoległego do szeregowego, przesuwa i wysyła dane z rejestru szeregowego ( wymaga sygnałów  �adres/sterowanie�, �wejście danych�, �zegar� );
2.  Listener - wczytuje dane odbierane od rejestru szeregowego, po zebraniu całego słowa przepisuje je do rejestru równoległego ( wymaga sygnałów: �adres/sterowanie�, �wejście danych�, �zegar� );
3.  Repeater - bez względu na tryb transmisji sygnału �adres/sterowanie� dane wejściowe są wpisywane do rejestru szeregowego, przesuwane i wysyłane ( wymaga sygnałów: �wej. danych�,
     �wyj. danych� i �zegar� )
  Maksymalna konfiguracja zawiera z reguły wszystkie trzy wymienione funkcje, ale w praktyce spotyka się wszystkie możliwe ich kombinacje. mc z reguły maja możliwość generacji sygnału zegarowego, a ich jednostki interfejsowe mogą pracować tak w trybie �master�, jak i �slave�.

Warianty strobowania/przesuwania informacji.

  Cechą wyróżniającą różne wersje interfejsów  szeregowych jest wzajemna relacja pomiędzy sygnałami danych a sygnałem zegarowym.
  Decydują o niej  2 parametry:

1.  polaryzacja sygnału zegarowego ( 0 lub 1 )
2.  faza sygnału zegarowego ( 0 lub 1 )


  Polaryzacja sygnału zegarowego jest określona przez wartość logiczną sygnału zegara w stanie spoczynkowym ( poza czasem transmisji )

   Cpol = 0 - sygnał zegara w stanie spoczynkowym Lo;
   Cpol = 1 - sygnał zegara w stanie spoczynkowym Hi;
  Faza sygnału zegarowego definiuje zależność pomiędzy zboczami sygnału zegarowego a momentami próbkowania danych wejściowych; przesuwania zawartości rejestru ( wysłania danych wyjściowych )
   Cpha = 0 - pierwsze zbocze sygnału zegarowego próbkuje dane wejściowe, drugie zbocze przesuwa dane w rejestrze ( dane są próbkowane a następnie przesuwane i wysyłane );
   Cpha = 1 - pierwsze zbocze sygnału zegarowego przesuwa dane w rejestrze, drugie zbocze próbkuje dane wejściowe ( dane są przesuwane i wysyłane, a następnie próbkowane i wpisywane na wejście rejestru ).

Stąd istnieje możliwość 4 protokołów transmisji :
    Np. COP8780  Cpol = 0,   Cpha = 0
        MB89620   Cpol = 1,   Cpha = 1


Konfiguracje systemowe interfejsu SMI.

  Jest jednym z nielicznych standardów interfejsowych, w którym można tworzyć wszystkie 3 konfiguracje:

1.  systemy gwiazdowe;
2.  magistralowe;
3.  pętlowe.
          Systemy 1) i 2) mogą być budowane z układów wyposażonych w funkcje Listener i Talker.
Do budowy systemów pętlowych wymagana jest dodatkowo funkcja Repeater. Linie CS służą do adresowania układów lub wysyłania odpowiednich rozkazów. Adresowanie układów jest w większości dokonywane przy pomocy dodatkowych indywidualnych linii. Niektórzy wytwórcy proponują rozwiązania, gdzie ciąg danych wysłanych do układu zawiera adres logiczny w formie bitów identyfikujących ( ukł. rodziny NSP firmy Huges Microelectronics, układy matryc przetworników C/A firm Maxim i Micro Power System ).
          Dodatkowo dane przesyłane mogą mieć długość 4-bitową, 8-bitową lub n-bitową ( do sterowania zewn. układami ), wypełnienie około 1/2 .Kolejność przesyłania bitów może być od nr bitu=0 do 7,czyli LSB do MSB lub odwrotnie, czyli MSB do LSB ( mc mają obcje zmiany porządku transmisji ). Szybkość transmisji nie przekracza najczęściej 1 - 2 Mbps. Różne firmy stosują różne warianty Cpol i Cpha . Wytwórcy układów peryferyjnych w większości preferują opcję protokołu Cpol = 0, Cpha =0.
        Np. COP98780 posiada standard MICROWIRE z Cpol i Cpha równą zero; rozszerzeniem jest MICROWIRE/PLUS z możliwością wyboru fazy sygnału zegara. Polaryzację ( jej zmianę) można dokonać przez umieszczenie inwertera.


8-bitowy interfejs SMI.

  Np. MB89620 posiada dwa  8-bitowe, sprzętowe interfejsy SMI.
Charakteryzuje je niezależność od procesora, możliwość wyboru szybkości transmisji, możliwość pracy z własnym zegarem ( tryb �master� ) lub z zegarem zewnętrznym (tryb �slave� ). Transmisja danych wykonywana jest automatycznie a procesor odbiera jedynie przerwanie sygnalizujące jej zakończenie lub odczytuje flagę zakończenia transmisji w rejestrze sterującym.

  Np. COP880C posiada jeden prosty 8-bitowy układ interfejsu MICROWIRE. Składa się on z rejestru transmisyjnego, który może być taktowany ze żźródła wewnętrznego ( master ) lub zewnętrznego ( slave ). Wyborem żródła taktowania zajmuje się selektor zegara, którego działanie ustala się przez zapis odpowiedniego bitu ( G5 ). Przy taktowaniu wewnętrznym sygnał zegarowy o częstotliwości równej częstotliwości cykli maszynowych jest wstępnie dzielony w preskalerze a następnie doprowadzony do do rejestru transmisyjnego i na S0, S1 w rej. CNTRL. Słowo zostaje wysunięte na zewnątrz z rejestru szeregowego jeśli zostanie ustawiony bit BUSY w rejestrze PSW. Końcówki portu G muszą być prawidłowo skonfigurowane. Układ ten nie generuje przerwania, przez co jego możliwość pracy jako slave, jest mało przydatna.


Realizacja protokołu transmisji przez interfejs SMI.

  Często komunikację pomiędzy sterownikiem opartym na mc a komputerem PC można zorganizować w trybie �master-slave�, gdzie układem sterującym  jest komputer PC. Bez jakiegokolwiek nakładu sprzętowego układem sterującym jest interfejs SMI możemy realizować software�owo, wykorzystując
port równoległy. Potrzebne są do tego trzy linie wyjściowe i jedna wejściowa portu równoległego komputera.
  Medium fizyczne połączenia komputer-sterownik stanowi 4-żyłowy przewód. Oprócz przewodów SO ( Serial Output ), SI ( Serial Input ), SCK ( Serial  Clock ) wykorzystuje się dodatkowy przewód CS ( Chip Select ). Sygnał ten stosowany jest do zainicjowania połączenia oraz synchronizacji wstępnej przy komunikacji. Właściwą synchronizację początku przesyłania poszczególnych bajtów danych komunikatu zorganizowano metodą zgłaszania potwierdzeń do gotowości odbioru/nadawania przy wykorzystaniu dwóch linii interfejsowych ( SO, SI ), które na etapie synchronizacji całkowicie zmieniają swoje funkcje.

  Opis czynności wykonywanych przez komunikujące się jednostki w poszczególnych fazach transmisji :

1.  Układ �master� zgłasza chęć transmisji przez wygenerowanie opadającego zbocza na linii CS i oczekuje na potwierdzenie przyjęcia zgłoszenia przez układ �slave�, cyklicznie próbkując własna linię SI ( dla �slave� SO ) do momentu wykrycia niskiego poziomu napięcia.
2.  Układ �slave� zgłasza na SO gotowość do transmisji niskim poziomem sygnału. Po zgłoszeniu gotowości cyklicznie sprawdza stan linii SI do momentu potwierdzenia ( niskim poziomem sygnału );
3.  Po otrzymaniu sygnału gotowości układu �slave� do transmisji, układ �master� potwierdza odebranie gotowości niskim poziomem na SO. Niski stan tej linii utrzymywany jest przez czas T1 , nie krótszy niż czas potrzebny na deklarację linii ( czas wykonania 15 instrukcji w kontrolerze ) oraz czas przeprogramowania znaczenia SO mc na wyjściu interfejsu.Po odebraniu potwierdzenia gotowości do transmisji kontroler przeprogramowuje znaczenie pinu SO na wyjściu i przechodzi w stan oczekiwania na zakończenie transmisji.
4.  Transmisji danych. Kontroler oczekuje na koniec transmisji pojedynczego bajtu.
5.  Układ �master� wprowadza niewielkie stałe opóźnienie (t2), w czasie którego �slave� mc przeprogramowuje znaczenie linii SO na wyj. portu i wymusza na nim wysoki poziom sygnału.
          Jeśli przetransmitowano ostatni bajt to �master� zmienia stan linii CS na �1�, w przeciwnym wypadku powtarzają się czynności układów 1)-5) za wyjątkiem ponownej generacji CS. Protokół ten umożliwia implementację komend wielobajtowych oraz uniezależnić pewność transmisji od szybkości zastosowanego mk PC.
          Sygnał CS jest podłączony do wejścia przerwaniowego. Opadające zbocze jest przyczyną przerwania zewnętrznego w mc, które obsługuje transmisję szeregową. Obydwa algorytmy - na mc i PC muszą być ze sobą zsynchronizowane.

  Na podstawie takiego protokołu można tworzyć zestaw własnych komend:
Format poszczególnych komend:

1)  readbyte - <bajt1.wej> <bajkt2.wej> <bajt3.wyj>
     bajt1 - starszy nibl zawiera kod rozkazu, młodszy nibl zawiera starszą część adresu
     bajt2 - młodszy bajt adresu
     bajt3 - dana przesyłana do PC
2)  readbyteinc - <bajt1.wej> <bajt2.wyj>
         bajt1 - kod rozkazu
         bajt2 - dane przesyłane do PC
3)  writebyte - <bajt1.wej> <bajt2.wej> <bajt3.wej>
4)  writebyteinc - <bajt1.wej> <bajt2.wej>
                                               wej - wyj - zpunktu widzenia mc.
  Np. Dla MB89620:
    .
    .
  main() { ....
               .... }
 /* definicje funkcji przerwaniowych */
   .
   .
  void EXINTO()  /*  zewn. przerwanie - żądania połączenia SMI nr 0  */
            {
             parser();
              EIRO = 0;
             }
             .
             .
             .
   void parser()
  {
    unsigned char code;
    code=send(SYNC);     /*  Pobranie bajtu rozkazu */
     if((*f).T_ERR)goto endint;
     switch(code)
               {
                case SYNC:
                                 send( SYNC ); break;
                case READI:
                                 readbyteinc(); break;
                                  .
                default:
                                              switch ( code & 0xF0
                                                          {
                                                            case READ:
                                                                               readbyte ( code); break;
                                                            case WRITE:
                                                                                .
                                                          }
                 }
  }