Użycie modułu GSM w systemie embedded. Komendy AT oraz ich rozszerzenia dla modułów GSM. cz. 1

Użycie modułu GSM w systemie embedded. Komendy AT oraz ich rozszerzenia dla modułów GSM. cz. 1
Pobierz PDF Download icon

We wczesnych latach sześćdziesiątych bardzo szybki rozwój techniki komputerowej wymusił konieczność opracowania standardów połączeń służących do przesyłania danych. Rozumiano przez nie przede wszystkim połączenie pomiędzy terminalem a komputerem mainframe. Na mniejsze odległości było ono realizowane za pomocą bezpośredniego połączenia kablowego, na większe za pomocą linii telefonicznej i modemu. Współcześnie przeważnie nie chcemy używać połączeń kablowych, a jedynie bezprzewodowych, od których oczekujemy coraz więcej i więcej. To spowodowało zastosowanie telefonów i modułów GSM do transmisji danych.

Upraszczając, ilekroć w artykule będzie mowa o module GSM, to mam na myśli dowolny moduł zapewniający łączność GSM, GPRS, UMTS, 3G, 2G itp. W zasadzie, jako użytkownicy modułu znajdujący się po stronie interfejsu sterującego (zwykle UART) nie interesujemy się, co dzieje się po stronie interfejsu radiowego. Stąd ten skrót myślowy.

Tabela 1. Zestawienie komunikatów przesyłanych przez modem w efekcie wykonania komendy

Większość współczesnych modułów (i modemów) GSM jest sterowanych za pomocą UART. Czasami ten rodzaj interfejsu jest mylnie nazywany RS232, jednak trzeba pamiętać, że pomimo identycznego formatu danych, RS232 dopuszcza reprezentowanie poziomów logicznych przez napięcie o wartości do ±24 V, natomiast UART co najwyżej do wartości napięcia zasilania modułu GSM. Wyższe napięcie z pewnością uszkodzi moduł. Interfejs UART ma też mniej linii, niż RS232. Standard specyfikuje dla niego (w wersji dla wtyku 9-pinowego) sygnały: RXD, TXD, RTS, CTS, RI, DTE, DCE, GND i Received Line Signal Detect. Interfejs UART zwykle ma jedynie linie RXD i TXD, a o resztę trzeba zadbać programowo.

Komendy AT przesyłane do modułu GSM za pomocą UART są znakami ASCII. Każda linia komend jest interpretowana i wykonywana - jeśli oczywiście pozwala na to tryb pracy - natychmiast po jej odebraniu przez modem. Każda komenda jest złożona z trzech elementów: prefiksu, ciała oraz znaku kończącego.

Fotografia 1. Płytka ewaluacyjna z modułem GSM firmy Quectel M10

Prefiks, za wyjątkiem komendy "A/", zawiera ciąg znaków "AT". Ciało, albo inaczej - zawartość komendy, jest zbudowane z indywidualnych ciągów znaków i zawiera nazwę oraz parametr lub listę parametrów, jeśli wymagane. Często w opisach komend parametry obowiązkowe podawane są wprost, natomiast opcjonalne ograniczane są znakami nawiasu kwadratowego []. Domyślnym znakiem kończącym jest znak powrotu karetki CR o kodzie 0x0D. Komendy mogą być łączone w tej samej linii. Znaki odstępu pomiędzy poszczególnymi ciałami są ignorowane. Standardowo wprowadzono podział na komendy podstawowe (bez znaku + lub ^) i rozszerzone (ze znakiem + lub ^).

Odbiór komend jest potwierdzany na dwa sposoby. Po pierwsze, może być używana funkcja modemu i interfejsu RS232 zwana echem. Specyfikacja standardu EIA232 dla urządzenia odbiorczego mówi o funkcji "echa znaku". Polega ona na natychmiastowym odsyłaniu za pomocą linii TXD przez urządzenie docelowe odebranego znaku. Porównując komendę przesłaną z odebraną można upewnić się, że moduł prawidłowo ją odebrał.

Po drugie, jeśli wydana komenda jest prawidłowa, to po napotkaniu znaku kończącego CR (0x0D) moduł GSM odsyła ciąg znaków "OK". W przeciwnym wypadku jest zwracane słowo "ERROR". Możliwe są również inne komunikaty. Ich wykaz umieszczono w tabeli 1. Każdorazowo urządzenie wysyłające komendy sterujące pracą modemu musi poczekać na jeden z wyżej wymienionych komunikatów. Oznacza ono gotowość modemu do przyjmowania następnych komend. Inaczej wykonywanie odebranego wcześniej polecenia może zostać przerwane.

Wskazówki do samodzielnego eksperymentowania

Tabela 3. Wykaz nastaw parametru OW (Okres Ważności)

Moduł GSM jest urządzeniem nadawczo-odbiorczym i powinien być wyposażony w antenę, która jest dopasowana do impedancji wyjściowej nadajnika. Brak dopasowania może powodować powstawanie zaburzeń, odbić i w konsekwencji doprowadzić do niezgodności z wymaganiami EMC lub wręcz uszkodzenia urządzenia. Oprócz tego, w instrukcjach obsługi większości aparatów telefonicznych można znaleźć następujące wskazówki odnośnie do ich bezpiecznego użytkowania:

  • Nie wolno korzystać z aparatu w szpitalach lub tam, gdzie funkcjonują elektroniczne urządzenia medyczne podtrzymujące życie. Telefon komórkowy to źródło zaburzeń o dosyć szerokim widmie częstotliwości i mocy sygnału do 2 W. Niebezpieczne są zwłaszcza aparaty pracujące w technologii GSM.
  • Nie należy korzystać z aparatu w pobliżu stacji benzynowych, zakładów chemicznych, materiałów wybuchowych. Nie ma dowodów na to, że telefon komórkowy może w normalnych warunkach bezpośrednio wywołać zagrożenie, ale może zakłócić pracę zapalników, wywołać wyładowanie elektryczne itp.
  • Nie wolno rozbierać telefonu lub jego baterii. Wykonywanie zmian wewnątrz urządzenia jest zabronione i może spowodować unieważnienie homologacji. Dodatkowo, użytkowanie telefonu bez zamontowanych przez producenta metalowych ekranów wewnątrz obudowy powoduje wzrost promieniowania elektromagnetycznego szkodliwego dla zdrowia.
  • Telefon GSM może zakłócać pracę działających odbiorników telewizyjnych, radiowych i komputerów. Dodatkowo, telefon komórkowy pracujący w pobliży nośników magnetycznych może uszkodzić zawartą na nich informację.
  • Niewłaściwe użytkowanie może unieważnić gwarancję!

Tabela 4. Wykaz identyfikatorów protokołu transmisji

Większość modułów GSM i telefonów komórkowych jest zasilana napięciem rzędu 2,7...3 V. Dołączenie takiego aparatu do komputera PC np. w celu przesyłania komend tekstowych za pomocą programu terminala wymaga wykonania odpowiedniego adaptera dokonującego translacji poziomów napięć logicznych. W przykładach zaprezentowanych w tym artykule uniknęliśmy stosowania adaptera, ponieważ został on wbudowany na płytce ewaluacyjnej modułu GSM. Jest to dużym ułatwieniem dla konstruktora, który może najpierw "pobawić się" modemem korzystając z wygodnego interfejsu komputera PC zanim przystąpi do implementowania programu w mikrokontrolerze.

Najprostszym testem połączenia komputera PC z telefonem komórkowym jest wysłanie komendy AT, na którą modem powinien odpowiedzieć "OK". Jeśli na ekranie nie pojawił się tekst odpowiedzi, należy spróbować innych prędkości transmisji. Do samodzielnego eksperymentowania polecam program BrayTerminal+, który można ściągnąć z Internetu. Jest to typowa aplikacja dla programistów, wygodnie i czytelnie prezentująca poziomy wyjściowych i wejściowych sygnałów interfejsu oraz umożliwiająca dynamiczną, natychmiastową zmianę prędkości transmisji danych lub wybór interfejsu, bez konieczności rozłączania. Oczywiście, nic nie stoi na przeszkodzie, aby zastosować dowolny inny program terminala znakowego.

Ważną cechą interfejsów UART i RS232 jest tak zwane echo. Jest ono możliwe, ponieważ interfejs zawiera dwie jednokierunkowe linie danych: jedną wejściową i jedną wyjściową. Echo pozwala na kontrolę poleceń wysyłanych do telefonu. W praktyce każdy znak wysyłany do telefonu natychmiast jest zwracany do urządzenia wysyłającego. Cecha ta umożliwia budowę bardzo prostych funkcji kontroli wysyłanych poleceń. Jednak czasami konieczność odbioru i analizy echa niepotrzebnie komplikuje program sterujący. Wówczas można je wyłączyć wydając komendę ATE0.

Dla uproszczenia, przyjąłem pewną konwencję:

  • Polecenia wysyłane do modemu pisane są małymi literami, a rezultaty wykonywanych komend dużymi.
  • Poprawne rezultaty wykonywania poleceń pisane są dużymi literami, napis "OK" jest pomijany, podobnie jak znajdujące się za nim znaki "CR" i "LF".
  • Błędnie wykonane polecenia pisane są dużymi literami, napis "ERROR" jest umieszczany w oryginalnej pozycji, to znaczy w taki sposób, jak ukazał się na ekranie komputera.
  • Tekst zwracany przez echo komendy jest pomijany.

Na fotografii 1 pokazano płytkę ewaluacyjną z modemem Quectel M95 wykorzystywaną przeze mnie dla potrzeb tego kursu. Jest ona wytwarzana i sprzedawana przez firmę Soyter, która jednocześnie jest dystrybutorem modemów Quectel. Moduł GSM zamontowany na płytce nie ma przetworników i kodeków sygnału audio i służy jedynie do zestawiania połączeń danych oraz wysyłania i odbierania wiadomości SMS. Moim zdaniem jest to strzał w dziesiątkę, ponieważ zwykle w urządzeniach do monitorowania obiektów, zdalnej kontroli procesów itp. nie potrzebujemy połączenia głosowego, a moduł może być tani, łatwiejszy w aplikacji, a jego obudowa może mieć mniejszą liczbę wyprowadzeń. Płytka ewaluacyjna ma interfejs USB dołączany za pomocą zworek - można go "rozpiąć", gdy po eksperymentach z użyciem PC chcemy moduł dołączyć bezpośrednio do testowanego urządzenia. Wyprowadzenia modułu są dostępne na szpilkach goldpin.

Wysyłanie i odbiór wiadomości SMS

Tabela 5. Wykaz parametrów Schematu Kodowania (klas komunikatów)

Funkcja SMS (Short Message Service) umożliwia przesyłanie krótkich wiadomości tekstowych pomiędzy aparatami GSM (MS, Mobile Station) z wykorzystaniem Centrum Serwisowego (SC, Service Center). Wiadomość SMS może zawierać maksymalnie 140 znaków zakodowanych na 8 bitach (oktetów), co przy użyciu specjalnej, omawianej dalej metody kodowania umożliwia przesłanie do 160 znaków ASCII.

W trybie obsługi wiadomości SMS istnieje możliwość realizacji dwóch podstawowych funkcji: SMS-SUBMIT i SMS-DELIVER. W związku z tym, że bardzo dużo dokumentów na temat GSM posługuje się tymi właśnie terminami pochodzącymi z języka angielskiego, również i w niniejszym opracowaniu posłużono się nimi w brzmieniu oryginalnym.

SMS-SUBMIT to stan, gdy aparat wysyła wiadomość SMS do Centrum Usług, natomiast SMS-DELIVER to stan, w którym aparat odbiera wiadomość z Centrum Usług. W zależności od rodzaju odbiorcy oraz miejsca przeznaczenia czy doręczenia wiadomości wprowadzone są dalsze podziały, jednak dokładna znajomość terminologii potrzebna jest osobom profesjonalnie zajmującym się telefonią GSM.

Zauważmy, że jest tu mowa o przekazaniu wiadomości do Centrum Usług i nie ma ani słowa o tym czy została ona poprawnie odebrana przez odbiorcę. Nie ma też gwarancji, że w ogóle do niego dotrze. Oczywiście, sieć będzie się starała ją dostarczyć, ale w skrajnym przypadku np. po 7 dniach możemy otrzymać komunikat sieciowy, że dostarczenie nie udało się. Jedyną informację o doręczeniu SMSa można otrzymać żądając raportu doręczenia - będzie o tym mowa dalej.

Ustawienie i odczyt parametrów karty SIM i sieci.
Urządzenie GSM po załączeniu musi zalogować się do sieci. Jest to możliwe po spełnieniu dwóch warunków: karta SIM znajdująca się w aparacie jest aktywna oraz telefon znajduje się w zasięgu oddziaływania stacji bazowej operatora właściwego dla karty SIM. Przez "zasięg oddziaływania" jest tu rozumiana moc sygnału docierającego do stopnia wejściowego odbiornika telefonu.

Operacja logowania jest przeprowadzana po wprowadzeniu ważnego kodu PIN (Personal Identification Number) zabezpieczającego kartę przed dostępem osób postronnych. Kod PIN jest ustalany przez producenta karty i dostarczany wraz z nią. Jest to poufny, 4-cyfrowy kod, rodzaj hasła zabezpieczającego. Może zostać zmieniony na inny przez użytkownika. PIN jest cechą karty SIM, a nie urządzenia i jako taka zmiana PIN zostaje zapamiętana w pamięci nastaw karty SIM, a nie terminala mobilnego. W konsekwencji wyłączenie kontroli PIN, oznacza wyłączenie zabezpieczenia przed użyciem karty działające we wszystkich aparatach, do których karta zostanie włożona.

W sieciach GSM/UMTS stacja bazowa uwierzytelnia aparat, natomiast aparat nie uwierzytelnia stacji bazowej (tzn. nie kontroluje czy stacja np. należy do macierzystej sieci). Można więc użyć dowolnej stacji bazowej, która udostępni swoje zasoby terminalowi GSM/UMTS.

AT+CPIN: wprowadzanie kodu PIN.
Umieszczenie karty w terminalu mobilnym wiąże się z koniecznością wprowadzenia kodu PIN po jego załączeniu, odpowiedniego dla umieszczonej w nim karty SIM. Dla większości kart trzykrotne, błędne podanie numeru PIN spowoduje żądanie wprowadzenia kodu PUK (Personal User Key). Podobnie jak PIN, PUK jest kodem, rodzajem hasła, jednak składającym się z 11 cyfr i przez to trudniejszym do zapamiętania. W praktyce przeciętny użytkownik musi sięgnąć do dokumentacji dostarczonej przez operatora, aby poznać i wprowadzić kod PUK.

Normalnie kod PIN jest wprowadzany przez użytkownika telefonu po jego załączeniu. Modem GSM przeważnie nie ma klawiatury i jest sterowany przez oprogramowanie. Dlatego wprowadzenie kodu PIN

Gdy podany został poprawny kod PIN, w przeciągu około 3 do 10 sekund aparat powinien zalogować się do sieci oraz udostępnić nam parametry operatora, sygnału stacji bazowej i inne.

AT+CPIN: wprowadzenie kodu PUK.
Do wprowadzenia kodu PUK służy identyczny zestaw komend, jak dla wprowadzenia kodu PIN, jednak rezultaty działania komend AT są różne. Dzięki komendom AT można zidentyfikować konieczność podania kodu PUK.

AT+CPWD: zmiana kodu PIN.
Zmiana kodu PIN wymaga podania dwóch kodów: bieżącego i nowego PIN.

Uwaga: liczby 9443 i 3221 to przykłady bieżącego i nowego kodu PIN. Kod PIN zostanie zmieniony tylko wtedy, gdy bieżący PIN będzie poprawny.

AT+CREG: odczyt statusu logowania do sieci.
Poprawne podanie numeru PIN powoduje włączenie telefonu do sieci o ile tylko karta SIM jest aktywna oraz telefon znajduje się w zasięgu działania stacji bazowej operatora. Zarówno w sytuacjach awaryjnych jak i wtedy, gdy wszystko przebiega prawidłowo możliwe jest użycie komendy at+creg? do odczytania statusu włączenia do sieci.


Uwaga: zmiana parametru "tryb" jest możliwa poprzez polecenie at+creg=0..2, a listę trybów obsługiwanych przez sieć można uzyskać za pomocą komendy at+creg=?. Najwięcej informacji zawiera tryb 2 zwracający informację o kodzie lokalizacji oraz kodzie stacji bazowej. Na przykład:
at+creg=2
at+creg?
Przykładowa odpowiedź modułu:
+CREG: 2,1,"7925","81E3"

Pierwszy i drugi ze zwracanych parametrów to poznane wcześniej tryb i status. Trzeci i czwarty to łańcuchy tekstowe, zawierające dwubajtowy kod lokalizacji i dwubajtowy kod stacji bazowej.

AT+COPS: identyfikacja operatora.
Po uzyskaniu informacji na temat statusu rejestracji w sieci GSM, można pobrać również identyfikator operatora, do którego sieci jest włączony terminal mobilny.

Polecenie +cops ma więcej znaczeń i może posłużyć do wyboru sieci, z której usług zamierzamy korzystać. Po szczegóły należy sięgnąć do opisu komend AT w dokumentacji modułu.

AT+CSQ: pomiar jakości sygnału.
Użyteczną komendą (zwłaszcza w systemach wyposażonych w mikrokontroler) jest pomiar poziomu sygnału docierającego do anteny. Przy współpracy z komputerem PC lub mikrokontrolerem wyposażonym w wyświetlacz, można tej komendy użyć do budowy graficznego wskaźnika poziomu sygnału. Znacznie ważniejsza jest jednak informacja czy w danych warunkach połączenie ze stacją bazową jest w ogóle możliwe. Można również w ten sposób stwierdzić fakt odłączenia anteny, lub jej uszkodzenia.

Pierwszy ze zwracanych parametrów podaje poziom sygnału odbieranego ze stacji bazowej. Zakres zwracanych wartości mieści się w granicach od 0 do 99, a w praktyce przeważnie od 0 do 27. Wartość 0 oznacza -113 dBm, każda kolejna zmiana wartości o 1 to kolejne 2 dB zmiany (1 = -111 dBm, 2 = -109 dBm itd.). Liczba 99 oznacza, że jakość sygnału jest nieznana.

Drugi parametr określa szybkość transmisji bitów błędu kanału i jest zgodny ze specyfikacją parametru RXQUAL zawartą w normie GSM 05.58. Liczba 99, podobnie jak poprzednio, oznacza, że parametr jest nieznany.

Numer Centrum Usług (+CSCA).
Centrum Usług (Service Center) to nie żaden "biurowiec", ale funkcja sieci GSM odpowiedzialna za dostarczenie i przechowywanie wiadomości SMS pomiędzy aparatem wysyłającym a odbierającym wiadomość. Centrum Usług nie jest częścią sieci GSM, aczkolwiek może być z tą siecią zintegrowane. Aby użyć funkcji wysyłania i odbierania SMS, terminal musi mieć zadeklarowany (lub zapisany w pamięci) numer Centrum Usług właściwy dla danego operatora sieci. Numer Centrum Usług zapamiętany na karcie SIM można wyświetlić następująco:

Pierwsze pole zawiera numer Centrum Usług, pole drugie jest opcjonalne i zawiera typ numeru Centrum Usług (czy jest to plan numerowania międzynarodowy 91H, czy lokalny 81H). Numer Centrum Usług musi być zdefiniowany, aby terminal mógł odbierać i wysyłać wiadomości SMS. Można podać go wraz z wysyłanym komunikatem SMS, można również zapisać w pamięci karty SIM. Niżej podano przykłady nastaw:

Zaleca się, aby każdy numer zapisywany w telefonie, nie tylko numer Centrum Usług, był poprzedzany znakiem "+" i numerem kierunkowym kraju abonenta. Jeśli zalecenie to nie będzie stosowane, może się pojawić problem, gdy telefon wykorzystuje funkcję roamingu.

Numer Centrum Usług jest również częścią wiadomości SMS. Podczas tworzenia nowej wiadomości może on być dodany automatycznie przez oprogramowanie telefonu bądź też wprowadzony ręcznie podczas kodowania tekstu wiadomości. Również wiadomości SMS odbierane przez terminal mobilny zawierają numer Centrum Usług.

Każda wiadomość SMS docierająca do aparatu telefonicznego jest zapamiętywana wraz z numerem Centrum Usług. Nie oznacza to jednak zapisu tego numeru jako parametr w pamięci karty SIM, a jedynie jego odbiór i przechowywanie wraz z komunikatem SMS.

Odczyt obsługiwanych formatów wiadomości (+CSMS).
Komenda at+csms wybiera usługę dostarczania komunikatu SMS. Może ona jednak posłużyć nie tylko do wyboru, ale również do uzyskania informacji na temat bieżącego trybu oraz listy obsługiwanych trybów doręczenia.

Wybór formatu wiadomości (+CMGF).
Komenda at+cmgf umożliwia odczyt i ustawienie aparatu GSM dla odbioru i przesyłania wiadomości SMS w określonym formacie. Należy tutaj wspomnieć, że tylko nieliczne telefony obsługują więcej niż jeden format. Większość umożliwia wysyłanie i odbiór wiadomości wyłącznie w trybie PDU MODE (0). Inny tryb, oznaczony jako TEXT MODE (1), obsługiwany jest przez większość modemów i niewielką liczbę aparatów telefonicznych.

Wybór odpowiedniego trybu kodowania umożliwia polecenie at+cmgf=0 lub at+cmgf=1. Jeśli tryb jest obsługiwany przez aparat, odpowiedzią jest komunikat "OK". W innym wypadku jest zwracany komunikat "ERROR".

Tryb 1 (TEXT MODE) do przesyłania wiadomości SMS używa wartości parametru <zestaw znaków> wyspecyfikowanego za pomocą polecenia at+cscs=<zestaw znaków> do kodowania i dekodowania komunikatu SMS.

Wysłanie SMS w trybie tekstowym

Za pomocą komendy at+cmgf=1 niektóre z aparatów GSM (w tym modem Quectel M10) mogą być wprowadzone w tryb przesyłania wiadomości SMS nazwany TEXT MODE. Mimo iż na pierwszy rzut oka ten tryb wydaje się skomplikowany w użyciu, to jednak jest chyba najłatwiejszym do zastosowania we własnym urządzeniu wysyłającym i odbierającym komunikaty SMS.

Ustawianie parametrów trybu tekstowego.
Poprawnie ustawiony telefon GSM nie wymaga żadnych dodatkowych nastaw. Nie mniej jednak nastawy są możliwe do przeprowadzenia z poziomu poleceń AT. Parametry funkcji doręczania wiadomości SMS mogą być zmieniane za pomocą polecenia at+csmp. Jego format jest następujący:
at+csmp=<PO>,<OW>,<IP>,<SK>
PO - pierwszy oktet

Do parametru "Pierwszy Oktet" wrócimy jeszcze przy okazji kodowania wiadomości SMS w trybie PDU. Parametr opisuje pierwszy oktet (8 bitów) zawierający parametry dla funkcji doręczenia SMS (SMS-SUBMIT). Standardową wartością jest liczba 17 (11H), co oznacza:

  • pole OW (okres ważności komunikatu) jest obecne i zawiera liczbę wskazującą na relatywny, obliczany na podstawie czasy wysłania, okres ważności SMS,
  • wybrano tryb SMS-SUBMIT tzn. doręczenie wiadomości w kierunku aparat a Centrum UsBug.

OW - okres ważności.
Pole OW zawiera liczbę wskazującą na czas, w którym Centrum Usług gwarantuje przechowywanie wiadomości w pamięci w przypadku jej niedoręczenia; tabela 3 zawiera wartości parametru wraz z odpowiadającym im okresem czasu.

IP - identyfikator protokołu

Informacja na temat identyfikatora użytego protokołu; szczegóły zawarte są w tabeli 4. Dla typowo zakodowanych wiadomości używa się parametru IP = 0. Informacji na temat dopuszczalnych protokołów należy poszukiwać u konkretnego operatora sieci. Nie można bowiem zagwarantować, że Centrum Usług obsługuje wszystkie protokoły tranmsmisji.

SK - schemat kodowania

Domyślnie znaki kodowane są w formacie 7-bitowym. Gdy jest używany ten schemat, 8 znaków jest kodowanych w formie 7 oktetów (bajtów) i dzięki temu komunikat może zawierać do 160 znaków (zamiast 140, gdyby były kodowane w postaci 8-bitowej). Dla kodowania 8-bitowego zestaw znaków jest identyczny z ASCII.

Dla wartości parametru równej "240", komunikat jest kierowany bezpośrednio na wyświetlacz - lub w terminalu GSM - wysyłany przez port szeregowy. Wybór klasy "1" do "3" powoduje, że komunikaty są zapamiętywane w pamięci karty SIM oraz aparatu. Dodatkowo dla klasy "2" jest zabronione przesyłanie wiadomości przez port szeregowy. Tabela 3 zawiera typowe wartości parametry SK.

Zapis SMS do pamięci karty SIM

Wykonanie komendy at+cmgw powoduje zapis komunikatu do pamięci karty SIM. Uwaga: funkcja ta działa różnie dla różnych trybów wysyłania / odbierania wiadomości SMS. Niniejszy opis funkcji dotyczy trybu tekstowego. Sposób działania polecenia dla trybu PDU omówiony będzie w punkcie 2.6.10

Pamiętajmy, że wprowadzany tekst SMS dla trybu kodowania 7-bitowego może mieć długość 160 znaków, natomiast dla trybu kodowania 8-bitowego, maksymalna długość to 140 znaków.

Polecenie at+cpms pozwala na odczyt oraz wybór preferowanego miejsca w pamięci do zapisu komunikatów SMS. Domyślnie SMS zapisywane są w pamięci karty SIM, możliwe jest jednak wskazanie jako docelowego (preferowanego) miejsca ich zapisu pamięci telefonu czy innej, dostępnej w danej konfiguracji sprzętowej.

Listę parametrów otrzymaną w wyniku użycia komendy at+cpms należy interpretować następująco:
+CPMS: <m1>,<m2>,<m3>

  • m1: miejsce, skąd komunikaty SMS będą odczytywane i gdzie będą kasowane,
  • m2: komunikaty będą zapisywane oraz wysyłane z tej lokalizacji pamięci,
  • m3: miejsce, gdzie zapisywane będą komunikaty SMS o ile nie jest włączone ich natychmiastowe przesyłanie do urządzenia zewnętrznego.

Podobny format ma polecenie wyświetlające aktualnie wybrane tryby dla wiadomości SMS wraz z informacjami o ilości zapamiętanych wiadomości oraz całkowitej pojemności pamięci. Oto rezultat wykonania tej komendy przez ten sam model aparatu telefonicznego, co w przykładzie wyżej:


Listę parametrów zwróconych jako wynik działania komendy należy interpretować następująco:
+CPMS: <"m1">,<liczba przechowywanych komunikatów>, <pojemność pamięci>,
<"m2">,<liczba przechowywanych komunikatów>, <pojemność pamięci>,
<"m3">,<liczba przechowywanych komunikatów>, <pojemność pamięci>

Znaczenie parametrów m1, m2 i m3 jest identyczne z opisywanym wyżej. Symbole oznaczeń rodzajów pamięci dostępnych w aparacie telefonicznym są następujące:

  • FD (Fix-Dialling) pamięć zastrzeżona karty SIM,
  • LD (Last Dialling) pamięć karty SIM przeznaczona na numery (adresy) ostatnio wybranych abonentów,
  • RC (Received Calls) pamięć karty SIM przeznaczona na numery odebranych wywołań,
  • MC (Missed Calls) pamięć karty SIM przeznaczona na numery nie odebranych wywołań,
  • SM (SIM) książka telefoniczna karty SIM,
  • ON (Own Numbers) obszar pamięci na karcie SIM (lub w książce telefonicznej) przeznaczony na zapamiętanie tzw. numerów własnych,
  • ME (Mobile Equipment) książka telefoniczna aparatu,
  • MT łączone pamięci karty SIM oraz aparatu.

Dzięki tej samej komendzie z listą parametrów po znaku równości, można wybrać rodzaj pamięci dla komunikatów SMS. Jak wspomniano wcześniej, lokalizacją domyślną jest pamięć karty SIM i dla większości zastosowań jest to zupełnie wystarczające.

Oczywiście w przypadku, gdy dana lokalizacja nie istnieje lub/i nie może być wybrana zwracany jest komunikat ERROR.

Wysłanie komunikatu SMS zapisanego w pamięci karty SIM

Komunikaty SMS zapisane w pamięci karty SIM można wysyłać przy pomocy komendy at+cmss=<indeks>. Dodatkowo jako parametrów tej komendy można użyć adresu (numeru) odbiorcy. Zalecane jest aby jeśli adres odbiorcy jest znany, był on podany jako drugi parametr wywołania +cmss. Jeśli argument ten nie będzie podany, zostanie użyty adres (numer) odbiorcy podany wraz z komunikatem SMS (patrz: at+cmgw):

Wykonanie komendy kończy się komunikatem informującym o statusie wysłanej wiadomości SMS, jeśli jej dostarczenie przebiegło poprawnie (na przykład +CMSS: 116) lub komunikatem o błędzie (+CMSS ERROR: <kod>). Liczba pojawiająca się po +CMSS to wartość całkowita, zgodna z podaną w normie GSM 3.40 (TP-Message-Reference). Dodatkowo niektóre aparaty mogą zwracać znacznik czasu Centrum Usług.

Wysłanie SMS w bez zapisu do SIM

Tryb tekstowy (1) jest bardzo łatwy w użyciu. Poniższa sekwencja komend wysyła wiadomość SMS bez jej wcześniejszego zapisu w pamięci karty SIM czy innej:

Odbiór SMS

Opisując odbiór SMS mam na myśli nie tyle wyświetlenie komunikatu przez aparat ile jego odbiór przez dołączone urządzenie. Będzie to więc forma usługi świadczonej przez terminal czy telefon GSM a nie wyświetlenie przezeń SMS. To jest zapewniane przez implementację odpowiedniego oprogramowania przez producenta i kwestii tej nie będziemy poruszać.

Nagłówek wiadomości SMS w trybie tekstowym.
Wiadomość odebrana w trybie tekstowym zwracana jest w formie łańcucha znaków, częściowo zdekodowanego (tzn. zdekodowane są wszystkie informacje za wyjątkiem oktetów zawierających status) i towarzyszącego odebranej wiadomości SMS. Struktura wiadomości odebranej w trybie tekstowym jest następująca:
<status>, <adres (numer) nadawcy>, <typ adresu nadawcy>, <nazwa nadawcy>, <znacznik czasu>, <pierwszy oktet>, <identyfikator protokołu>, <schemat kodowania>, <adres (numer) Centrum Usług>, <typ adresu Centrum Usług>, <długość tekstu SMS>

Parametry pogrubione pojawiają się w nagłówku zawsze. Obecność pozostałych jest uzależniona od parametru polecenia +CSDH. Jeśli jego wartość jest równa "1" - nagłówek SMS ma postać rozszerzoną, jeśli 0 - nagłówek SMS składa się wyłącznie z pól pogrubionych.

Tekst SMS jest umieszczany bezpośrednio za nagłówkiem. Tryb tekstowy charakteryzuje się wyjątkową łatwością obsługi. Wiadomości są odbierane jako już zdekodowane, nie ma potrzeby wykonywania jakichkolwiek dodatkowych czynności za wyjątkiem ewentualnego sformatowania wyniku. W związku z tym, że sygnalizacja odebranej wiadomości SMS oraz ewentualny jej odczyt z pamięci SIM są identyczne w trybie TEXT i w trybie PDU.

W związku z tym, że wiadomości odebrane w trybie tekstowym mają postać już zdekodowaną, przytoczę tutaj przykład wiadomości odebranej w trybie tekstowym, na podstawie materiałów firmy SIEMENS. Jak przykład odbiór komunikatu "WITAJ!" dla parametru +CSDH=0 oraz +CSDH=1 wysłanego z sieci Plus GSM, z numeru +48601102030.
+CSDH=0.
"REC_UNRED","+48601102030","JANUSZ","03/07/01,13:05:20+00"<CR><LF>WITAJ!


Po odebraniu komendy +CSDH=1
"REC_UNRED","+48601102030","JANUSZ","03/07/01,13:05:20+00",145,17,0,0, "+48601000310",145,6<CR><LF>WITAJ!

Powiadamianie o nowym SMS, odczyt SMS

Komunikat SMS każdorazowo jest dostarczany do abonenta GSM przez Centrum Usług, bez względu na miejsce i sposób jego wysyłki. Nie istnieje funkcja przesyłania wiadomości SMS wprost od jednego abonenta do drugiego, chociaż niektóre nowoczesne telefony, wyposażone w interfejs Bluetooth, umożliwiają między innymi wymianę wiadomości tekstowych tą drogą. Nie są to jednak stricte wiadomości SMS.

Istnieją dwa główne sposoby odbioru wiadomości SMS przez dołączone urządzenie zewnętrzne:

  • Jeśli komunikat SMS jest zapisywany w pamięci karty SIM, indeks oraz typ lokalizacji SMS może być przesłany do podłączonego urządzenia w formacie +CMTI: <m>, <indeks>, po czym wiadomość może być odczytana za pomocą polecenia at+cmgr=<indeks>.
  • Wiadomości SMS mogą być przesłane wprost do dołączonego urządzenia tuż po ich odebraniu.

Sposób funkcjonowania funkcji odbioru SMS można ustawić za pomocą polecenia at+cnmi o następującym formacie:
AT+CNMI=<tryb>, <mt>, <bm>, <ds>, <bfr>

Polecenie wybiera sposób, w jaki odbiór SMS z sieci będzie sygnalizowany odbiorcy, gdy odbiorca jest "aktywny", na przykład sygnał Data Terminal Ready jest załączony.
<tryb>

  • 0 - buforowanie wyniku w telefonie, powiadamianie "starszych" może być zastępowane przez "nowsze" lub buforowanie powiadomienia w innych obszarach pamięci zgodnie ze specyfikacją wytwórcy,
  • 1 - pomijanie powiadamiania i odrzucanie kodów rezultatów komunikatów, gdy połączenie z odbiorcą danych z telefonu jest zarezerwowane; jeśli nie - bezpośrednie przekazywanie komunikatu do urządzenia zewnętrznego,
  • 2 - buforowanie kodów rezultatów komunikatów, jeśli połączenie z urządzeniem zewnętrznym jest aktywne; przekazanie komunikatu bezpośrednio po zwolnieniu połączenia,
  • 3 - przekazywanie kodów rezultatów bezpośrednio do odbiorcy; specjalna technika "in-band" używana do przekazania kodów, jeśli aktywne jest połączenie danych z urządzeniem zewnętrznym.

<mt>

  • 0 - brak powiadomienia o doręczeniu SMS dla urządzenia zewnętrznego,
  • 1 - jeśli doręczony komunikat jest zapamiętywany w karcie SIM lub pamięci aparatu, powiadomienie o tym miejscu pamięci przekazywane jest do odbiorcy w formacie +CMTI: <m>,<indeks>,
  • 2 - doręczony komunikat jest przekazywany bezpośrednio do dołączonego urządzenia; jest używany format: +CMT: <tekst>,<długość><CR><LF><tryb pracy>,
  • 3 - doręczone komunikaty klasy przekazywane bezpośrednio do urządzenia odbiorczego używając formatu zdefiniowanych dla <mt>=2; komunikaty innych schematów kodowania w powiadomieniu zdefiniowanym dla <mt>=1.

<bm> (Broadcast Messages = komunikaty sieciowe)

Zasady zapamiętywania odebranych komunikatów sieciowych zależą od metod kodowania, nastawy typów komunikatów (przez polecenie +csbs) i ich wartości:

  • 0 - komunikat sieciowy zostaje zapamiętany w pamięci karty - aparatu; wskazanie miejsca pamięci przekazywane do urządzenia zewnętrznego w formacie: +CBMI: <pamięć>,<indeks>,
  • 1 - nowy komunikat sieciowy przekazany bezpośrednio do dołączonego urządzenia,
  • 2 - przekazywanie powiadomienia o komunikacie sieciowym do podłączonego urządzenia w formacie +CBM: <długość>,<CR><LF><tryb pdu>.

<ds> (SMS-Deliver Status = status funkcji SMS-Deliver)

  • 0 - brak raportowania statusu do urządzenie zewnętrznego,
  • 1 - przesyłanie informacji o statusie SMS do urządzenia zewnętrznego nie jest obsługiwane,
  • 2 - przesłanie informacji o miejscu zapisania SMS w pamięci dla urządzenia zewnętrznego nie jest obsługiwane.

<bfr> (bufor)

  • 0 - bufor kodów rezultatów zdefiniowanych w obrębie tej komendy jest opróżniany do urządzenia zewnętrznego, gdy wprowadzany jest tryb 1...3 (komunikat OK powinien być odebrany przed opróżnieniem bufora kodów),
  • 1 - bufor kodów rezultatów zdefiniowany w obrębie tej komendy jest czyszczony, gdy wprowadzany jest tryb 1...3.

Listę obsługiwanych przez aparat nastaw można pobrać podając polecenie at+cnmi=?


Aktualne nastawy sposobu powiadomienia można odczytać wprowadzając polecenie at+cnmi?

Dla typowych potrzeb odbioru komunikatu wystarczające jest wprowadzenie nastawy at+cnmi=1,1,0,2. Polecenie to załącza przekazywanie powiadomień o komunikatach do urządzenia zewnętrznego, jeśli tylko urządzenie to jest gotowe do odbioru. Powiadomienie jest przesyłane w postaci +CMTI: <pamięć>,<indeks>. Jednocześnie jest wyłączone przekazywanie komunikatów sieciowych oraz powiadamianie o statusie doręczanego SMS.

Wiadomość SMS została odebrana i zapisana w pamięci "kombinowanej" aparatu. Powiadomienie o tym fakcie zostało przesłane do urządzenia odbiorczego. Do pełnego cyklu odbioru brak jest tylko odczytu informacji z pamięci telefonu. Odczyt odebranego w ten sposób komunikatu możliwy jest po wydaniu polecenia at+cmgr. Jego parametrem jest indeks wiadomości w pamięci telefonu. Dla przykładu powiadomienia omawianego wcześniej:

Zmiana formatu komunikatu, a uściślając - jego wzbogacenie o informacje o statusie, jest możliwa przez polecenie at+csdh=1. Wówczas to przesyłane są dodatkowe informacje o statusie funkcji doręczenia SMS zawarte w nagłówku otrzymanej wiadomości. Są to:

  • pierwszy oktet,
  • identyfikator protokołu,
  • schemat kodowania,
  • adres (numer) Centrum Usług,
  • typ adresu (numeru) Centrum Usług,
  • długość komunikatu.

Podsumowanie

Po tej nieco przydługiej porcji wiedzy w kolejnym artykule wytłumaczę, w jaki sposób wysłać, odebrać i zinterpretować wiadomość SMS za pomocą Arduino i mikrokontrolera z rdzeniem Cortex-M0.

Jacek Bogusz, EP

Artykuł ukazał się w
Elektronika Praktyczna
luty 2014
DO POBRANIA
Pobierz PDF Download icon
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik styczeń 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio luty 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje styczeń 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna styczeń 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich styczeń 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów