An Introduction to AT Commands

Każdy programista, który musi pracować z modemem komórkowym, będzie musiał w pewnym momencie skorzystać z tak zwanych „komend AT”. Polecenia AT są zasadniczo instrukcjami modemu. Pierwotnie opracowane przez producenta modemów Hayes jako środki do obsługi ich produktów telefonii stacjonarnej, polecenia AT – „AT” oznacza „come to ATtention” – są obecnie używane przez wszystkie modemy, wszystkich typów.

Polecenia AT są głównie używane do konfigurowania modemu i ustanowienia jego połączenia sieciowego. Mogą być również użyte do uzyskania informacji o stanie modemu i połączenia, co może być bardzo pomocne w debugowaniu aplikacji i w potwierdzeniu, że modem działa poprawnie: połączył się z właściwą siecią, używa właściwej technologii komórkowej, ma włączony roaming, itp. Przyjrzymy się wkrótce kilku przydatnym komendom do takich zadań.

Jak wysyłać komendy AT

Komendy AT są wysyłane do modemu jako zwykły tekst przez połączenie szeregowe (UART) składające się z dwóch przewodów, jednego do odbioru (RX) i jednego do nadawania (TX), lub przez USB. W terenie, urządzenie IoT z obsługą sieci komórkowej będzie zarządzać swoim modemem wysyłając mu komendy AT, ale podczas tworzenia aplikacji i debugowania, nie jest rzadkością, aby dotknąć połączenia modemu. Pozwala to na uruchomienie terminala i bezpośrednią interakcję z modemem poprzez wydawanie własnych poleceń AT.

Jak formatować polecenia AT

Wysyłane polecenia muszą być zgodne z następującą podstawową składnią:

AT<COMMAND><SUFFIX><DATA>

To się nazywa „linia poleceń”. Jak widać, zaczyna się ona od AT, po czym następuje komenda, przyrostek wskazujący na tryb lub „typ” komendy, i wreszcie jakieś dane, choć nie wszystkie komendy muszą zawierać to pole.

Ta struktura jest nazywana „linią komend” i jest zawsze zakończona pojedynczym znakiem powrotu karetki. W linii można umieścić wiele poleceń, każde oddzielone średnikiem:

AT<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>

Każda linia, bez względu na to, ile poleceń zawiera, ma tylko jedno AT, na początku. Otrzymasz błąd, jeśli dołączysz AT więcej niż raz w pojedynczej linii. Polecenia w liniach złożonych z wielu poleceń są przetwarzane sekwencyjnie. Długość linii jest zwykle ograniczona do 80 znaków.

Pola linii poleceńAT

Pole <COMMAND> wskazuje, co chcesz, aby modem zrobił. Starsze, „podstawowe” polecenia mają nazwy jednoznakowe; późniejsze dodatki do zestawu poleceń, zwane poleceniami „rozszerzonymi”, są poprzedzone znakiem +, takie jak AT+COPS (skanuj w poszukiwaniu sieci) i AT+CGMI (uzyskaj producenta modemu). Niektóre polecenia są poprzedzone znakiem & – na przykład AT&F, które resetuje ustawienia modemu. Wszystkie komendy komórkowe są komendami rozszerzonymi. Zgodnie ze specyfikacją komend AT, komendy muszą składać się z dużych liter, ale wiele modemów pozwala na wysyłanie komend również małymi literami. My będziemy trzymać się standardu.

Wartości pól <DATA> i <SUFFIX> zależą od typu komendy, których są cztery:

.

Type Suffix Role
Read ? Uzyskaj ustawienie konfiguracji modemu
Ustaw = Ustaw konfigurację modemu setting
Execute None Wywołaj operację modemową
Test =? Sprawdź, czy modem obsługuje nazwaną komendę – ale zauważ, że AT+COPS=? działa nieco inaczej, jak zobaczymy za chwilę

Zobaczymy za chwilę, jak te typy wpływają na użycie komend AT, ale najpierw zobaczmy, jak modem reaguje na komendy.

Odpowiedź na komendę AT

Gdy komenda AT jest wydana, w zależności od wysłanej komendy, modem może lub nie zwrócić dane, czyli wykonać to, co jest nazywane „odpowiedzią informacyjną”. Tak czy inaczej, operacja polecenia zawsze kończy się zwróceniem przez modem „kodu wyniku”.

Na przykład, załóżmy, że pytamy o nazwę producenta modemu używając następującego polecenia:

AT+CGMI

To wygeneruje następującą odpowiedź, gdy zostanie wywołane na modemie u-blox:

u-bloxOK

Każda jednostka odpowiedzi – informacja (górny wiersz) i kod wyniku (dolny wiersz) – są nawiasowane znakami Carriage Return i Line Feed (odpowiednio kody Ascii 0x0D i 0x0A), stąd pusty wiersz przed OK.

OK to jeden kod powrotu; drugi to ERROR – popełniłeś błąd. Być może modem nie odpowiada na wysłane polecenie AT, albo źle je wpisałeś. Być może podałeś zbyt mało lub zbyt wiele wartości danych lub parametrów komendy. Domyślnie modemy mogą nie dostarczać zbyt wielu wyjaśnień. Na szczęście, niektóre z nich mogą być ustawione na zwracanie rozszerzonej informacji o błędach; ponownie, będziesz musiał wysłać komendę AT, aby zastosować to ustawienie: AT+CMEE=2.

Ważne jest, aby zrozumieć, że możesz również otrzymać ERROR od całkowicie poprawnego polecenia AT. Kiedy tak się dzieje, jest to wskazówka, że modem jest w stanie, który jest niekompatybilny z poleceniem. Na przykład, jeśli próbujesz zmienić nazwę punktu dostępowego (APN) modemu, gdy jest on aktywny, zazwyczaj otrzymasz ERROR. Środkiem zaradczym jest wyłączenie modemu, dokonanie zmiany APN, a następnie ponowne włączenie go.

Typy poleceńAT i testowanie

Możesz złagodzić problem pozornie poprawnych poleceń wyrzucających błędy, korzystając z przyrostka polecenia testowego (=?), który służy do zapytania modemu, czy obsługuje dane polecenie. Jeśli nie, otrzymasz kod powrotu ERROR; wiesz, że nie powinieneś wydawać tej komendy. Jeśli modem obsługuje polecenie, otrzymasz odpowiedź informacyjną wskazującą parametry polecenia, jeśli takie posiada, po której następuje OK.

Powyższy przykład może być użyty do zademonstrowania testowania poleceń. Możemy zapytać modem, czy obsługuje polecenie +CGMI:

AT+CGMI=?

i zwróci on OK, ponieważ obsługuje to polecenie. Ponieważ jednak producent modemu jest stały, próba jego zmiany zawsze zakończy się wynikiem ERROR. Jak mogliśmy próbować zmienić jego wartość? Za pomocą sufiksu polecenia set (=):

AT+CGMI="Fintlewoodlewix"ERROR

Zauważ, że dane łańcuchowe są umieszczone w cudzysłowie – to również jest wymóg polecenia AT.

Dodaj komentarz