Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Protokołu komunikacji Nokia MBUS (M2BUS v2)

Bifar 21 Lip 2006 01:58 1683 0
  • #1 21 Lip 2006 01:58
    Bifar
    Poziom 1  

    Dzień dobry.

    Próbuje rozgryźć protokół komunikacji Noki 3310 z komputerem.

    Zajrzałem w już chyba do wszelkiej możliwej dokumentacji.
    Przejrzałem dokładnie najlepsze źródło informacji na ten temat jakim jest projekt GNOKII http://samba.org/ftp/unpacked/gnokii/Docs/protocol/..
    Teraz usiłuje je wprowadzić w praktykę. Mam zamiar zaprogramować mikrokontroler ATMEGA16, tak by wysyłał SMS’y sam.

    Mam jednak problem z rozgryzieniem protokołu komunikacji.
    Wyjaśnię wszystko do czego mi się udało dojść i z czym mam problem.

    Odpowiednikiem protokołów do Nokia 3310 jest protokół Nokia 6110.

    Komunikacja z Nokia 3310 możliwa na dwa sposoby.
    Dzięki protokołowi komunikacji FBUS i MBUS (M2BUS – MBUS wersja 2).

    FBUS charakteryzuje się tym że komunikacja z telefonem odbywa się dwoma liniami portu RS-232.
    Linie:
    RxD – odbiór danych.
    TxD – transmisja danych.
    Linie te są „niemal bezpośrednio” połączone z telefonem, dzięki czemu jest możliwe nadawanie i odbieranie komunikatów jednocześnie, co umożliwia szybszą komunikację z telefonem. Transmisja odbywa się portem RS-232 na warunkach:
    * Prędkość transmisji równa 115200 bps
    * Dane do transmisji składają się z 8 bitów
    * Sprawdzanie transmisji, chyba nie jest konieczne ( Parity: none), ale nie jestem pewny tego.
    * Jeden bit stopu.

    MBUS – różnie się tym od FBUS że komunikacja z telefonem odbywa się jedną linią i nie jest możliwe jednoczesne odbieranie i wysyłanie danych.
    Warunkami transmisji jest:
    * Prędkość transmisji równa 9600bps
    * Dane do transmisji składają się z 8 bitów
    * Sprawdzanie poprawności danych odbywa się na dzięki spędzeniu nieparzystości danych ( Parity: none)
    * Jeden bit stopu.

    Ja zdecydowałem się na protokół komunikacji MBUS, gdyż jest wolniejszy i nie będzie za bardzo obciążał mi mikrokontrolera.

    Z dokumentacji GNOKII dowiedziałem się wysyłanie i odbieranie danych z telefonu przypomina rozmowę przez CB radio.

    * Komputer wysyłam zapytanie
    * Telefon wysyła potwierdzenie odbioru pytania.
    * Telefon wysyła odpowiedzi na pytanie komputera
    * Komputer wysyła potwierdzeni odbioru odpowiedzi.

    Ja ma problem z wysłanie potwierdzenia odbioru odpowiedzi, ale o tym później.

    Transmisja pytania, odpowiedzi i potwierdzeni odbioru zawiera się w ramce transmisyjnej.
    Ramka transmisyjna składa się z kilku bajtów.

    Wstawię tu fragment kopie dokumentacji GNOKII
    MBUS version 2:

    Code:
    { FrameID, DestDEV, SrcDEV, MsgType, FrameLengthLO, FrameLengthHI, {block}, SeqNo, ChkSum }
    

             where FrameID:         0x1f: Serial / M2BUS




                   DestDev, SrcDev: 0x00: mobile phone
                                    0x1d: TE (M2BUS)
                                    0x10: TE (M2BUS) (Service Software ?)
                                    0x04: Carkit?
                                    0x48: DLR3 cable?
                                    0xF8: unknown target?
                                    0xFF: global target?
                   MsgType:         see List
                   FrameLength:     {block}
                   SeqNo:           sequence number
                   ChkSum:          XOR on frame's all numbers


      Ack:
       
        { FrameID, DestDEV, SrcDEV, 0x7f, Id_SeqNo, ChkSum }
       
        where Id_SeqNo:        Is the sequence number that you are
                               acknowleging (from the other part).

    Nie jestem dobrzy w angielskiemu, ale przetłumaczyłem to tak
    MBUS version 2:
    { Rodzaj_Ramki, Wysyłane_Do, Wysyłane_Od, Rodzaj_wiadomości, Wielkość_ramki_MNIEJ_znaczący_bajt, Wielkość_ramki_BARDZIEJ_znaczący, {block},
    Kolejności_Ramki, Sprawdznie_poprawności }
    Gdzie:
    1 bajt - Rodzaj_Ramki: 0x1f (początek ramki protokołu komunikacji MBUS wersja 2
    2 i 3 bajt – Wysyłane_Do , Wysyłane_Od: 0x00: Telefon komórkowy
    0x1d: Komputer (protokuł M2BUS)
    4 bajt – Rodzaj_wiadomości – Tu trzeba zajżeć do listy znanych wiadomości.
    Polecam http://samba.org/ftp/unpacked/gnokii/Docs/protocol/nk6110.txt
    5 bajt – Wielkość_ramki_MNIEJ_znaczący_bajt: zazwyczaj jest to 0x00. (nie jestem tego całkiem pewny).
    6 bajt – Wielkość_ramki_BARDZIEJ_zanczący_bajt: Liczba bajtów liczona od następnego bajta do bajta Kolejności_ramki (czyli do przedostatniego bajta ramki)
    Przedostatni bajt – Kolejność_ramki. Jest to najmniej zrozumiały przeze mnie bajt, źródło moich kłopotów.
    Ostatni bajt – Sprawdzenie_poprawności. Wszystkie bajty są od pierwszego do przedostatniego są przepuszczane przez bramkę logiczna XOR. Można ją znaleźć w windowsowskim kalkulatorze, trybie zawansowanym.
    Dla zainteresowanych to:
    Code:
     ___________
    
    | X | Y | Z |
    |===========|
    | 0 | 0 | 0 |
    |---+---+---|
    | 0 | 1 | 1 |
    |---+---+---|
    | 1 | 0 | 1 |
    |---+---+---|
    | 1 | 1 | 0 |
    |___|___|___|

    Na mówiąc prościej Z jest równe 1 gdy X i Y różnią się od siebie.

    Ramka potwierdzenia odbioru:
    { Rodzaj_Ramki, Wysyłane_Do, Wysyłane_Od, 0x7f, Kolejność_ramki, Sprawdzenie_poprawności }

    Gdzie: Kolejność_ramki: Kolejność_ramki jest to nr pobrany z poprzednio odebranej wiadomości.

    Udało mi się zrozumieć znaczenie protokołów i wykorzystać komunikacji ale nie do końca.

    Moim głównym problemem jest to że nie wiem do czego dokładniej służy Kolejność_ramki (SeqNo)

    W ramce FBUS wersja 1:
    Code:

    Sequence number of command in case where direction is                                from ME to computer, the sequence number is counting from 0x30 to 0x37 and resetting back to 0x30. When direction is from computer to ME, sequence number counts from 0x08 to 0x0f and resets back to 0x08.
    It may not be required to be this way. Sequence numbers are used in acknowledging commands.

    Ja z angielskiego rozumiem to tak:
    Kolejność ramki jest wykorzystywana w dwóch przypadkach.
    Gdy komunikat jest wysyłany z komputera do telefonu, odliczanie zaczyna być liczona od 0x30 do 0x37 i ponownie powraca do 0x30.
    Gdy komunikat jest wysyłany z telefonu do komputera, odliczanie zaczyna być liczone od 0x08 do 0x0f i ponownie powraca do 0x08.

    W ramce M2BUS wersja 2:
    Code:
    Is the sequence number that you are acknowleging (from the other part).

    Jest to numer który ja wysyłam w potwierdzeniu odbioru, numer ten uzyskuje z poprzedniej wiadomości.

    W ramce MBUS wersja 1:
    Nie występuje Sequence number, ale ID o podobnym jak mi się zdaje działaniu.

    O ID w GENOKII jest napisane:
    Code:
    request identity number 1..n, incremented after the request is accepted
    

    Numer identyfikacyjny odpowiedzi 1..n, jest zwiekszaney od 1 po każdym zaakceptowaniu odpowiedzi.

    Moim głównym problemem jest to że nie znam odpowiedzi na kilka problemów.
    1. Czym jest to dokładnie SeqNo?
    2. Kiedy SeqNo jest inkrementowane, a kiedy jest po prostu kopiowane z poprzedniej wiadomości i wysyłane?
    3. Czy SeqNo jest inkrementowane przy wysyłaniu nowej wiadomości, czy po prostu kopiowane z poprzedniego potwierdzenia odbioru.

    Jeśli mieliście styczność z protokołami komunikacji NOKIA lub znacie na tyle dobrze angielki by zauważyć błąd w moim tłumaczeniu i rozumowaniu proszę mi o tym powiedzieć.

    Niedługo postaram się wysłać przykłady komunikacji telefonu z komputerem.

    0 0