Bevezetés az AT-parancsokba

Minden fejlesztő, akinek mobilmodemmel kell dolgoznia, valamikor kénytelen lesz használni az úgynevezett “AT-parancsokat”. Az AT-parancsok lényegében modemutasítások. Az AT-parancsokat eredetileg a Hayes nevű modemgyártó fejlesztette ki a vezetékes telefonos betárcsázós termékeik működtetésére, de ma már minden modem használja őket – az ‘AT’ az ‘come to ATtention’ rövidítése -, bármilyen típusú modemben.

Az AT-parancsokat elsősorban a modem konfigurálására és a hálózati kapcsolat létrehozására használják. Használhatók a modem és a kapcsolat állapotára vonatkozó információk lekérdezésére is, ami nagyon hasznos lehet az alkalmazások hibakeresése során, valamint annak megerősítésében, hogy a modem megfelelően működik: a megfelelő hálózathoz csatlakozott, a megfelelő cellatechnológiát használja, engedélyezve van a roaming stb. Hamarosan megnézünk néhány hasznos parancsot az ilyen feladatokhoz.

Hogyan küldhetünk AT-parancsokat

Az AT-parancsokat egyszerű szövegként küldjük a modemnek egy soros (UART) kapcsolaton keresztül, amely két vezetékből áll, egy a vételhez (RX) és egy az adáshoz (TX), vagy USB-n keresztül. A terepen egy cellakompatibilis IoT-eszköz AT-parancsok küldésével kezeli a modemet, de az alkalmazásfejlesztés és hibakeresés során nem ritka, hogy a modem kapcsolatát megcsapolják. Ez lehetővé teszi, hogy beindítson egy terminált, és saját AT-parancsok kiadásával közvetlenül interakcióba lépjen a modemmel.

Hogyan formázza az AT-parancsokat

Az elküldött parancsoknak a következő alapvető szintaxisnak kell megfelelniük:

AT<COMMAND><SUFFIX><DATA>

Ezt nevezzük “parancssornak”. Mint látható, AT-val kezdődik, ezt követi a parancs, egy utótag, amely a parancs módját vagy “típusát” jelzi, és végül néhány adat, bár nem minden parancsnak kell tartalmaznia ezt a mezőt.

Ezt a szerkezetet “parancssornak” nevezzük, és mindig egyetlen kocsivégzéssel zárul. A sorban több parancs is szerepelhet, amelyeket pontosvesszővel választunk el egymástól:

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

Minden sor elején, függetlenül attól, hogy hány parancsot tartalmaz, csak egy AT van. Hibát kapsz, ha egy sorban többször is szerepel AT. A többparancsos sorokban a parancsok egymás után kerülnek feldolgozásra. A sor hossza általában 80 karakterre van korlátozva.

AT parancssor mezői

A <COMMAND> mező azt jelzi, hogy mit szeretne a modemtől. A régebbi, “alap” parancsok neve egykarakteres; a parancskészlet későbbi, “kiterjesztett” parancsoknak nevezett kiegészítései előtt + jel szerepel, például AT+COPS (hálózatok keresése) és AT+CGMI (modemgyártó lekérdezése). Néhány parancs előtagja & – például a AT&F, amely visszaállítja a modem beállításait. Minden cellás parancs kiterjesztett parancs. Az AT parancsspecifikáció szerint a parancsoknak nagybetűs karakterekből kell állniuk, de sok modem lehetővé teszi a parancsok kisbetűs küldését is. Mi maradunk a szabványnál.

A <DATA> és <SUFFIX> mezők értékei a parancs típusától függnek, amelyből négy van:

.

Type Suffix Role
Read ? Modemkonfiguráció beállításának lekérdezése
Beállítás = Modemkonfiguráció beállítása setting
Execute None Trigger a modem operation
Test =? Check whether a modem supports the named command – de vegye figyelembe, hogy a AT+COPS=? kissé másként működik, amint azt rövidesen látni fogjuk

Most megnézzük, hogyan befolyásolják ezek a típusok az AT-parancsok használatát, de előbb nézzük meg, hogyan reagál a modem a parancsokra.

AT parancsválasz

Az AT-parancs kiadásakor a modem a küldött parancstól függően adhat vagy nem adhat vissza adatokat, azaz adhat úgynevezett “információs választ”. Akárhogy is, a parancsművelet mindig azzal végződik, hogy a modem egy “eredménykódot” küld vissza.

Tegyük fel például, hogy a modem gyártójának nevét kérdezzük meg a következő paranccsal:

AT+CGMI

Ez egy u-blox modemen történő hívás esetén a következő választ fogja generálni:

u-bloxOK

A válasz minden egyes egységét – az információt (felső sor) és az eredménykódot (alsó sor) – Carriage Return és Line Feed karakterek zárójelezik (Ascii kódok 0x0D és 0x0A, illetve), ezért az üres sor a OK előtt.

OK az egyik visszatérési kód; a másik ERROR – hibát követtél el. Lehet, hogy a modem nem reagál az elküldött AT-parancsra, vagy rosszul írtad be. Talán túl kevés vagy túl sok adatértéket vagy parancsparamétert adtál meg. Alapértelmezés szerint a modemek nem sok magyarázatot adhatnak. Szerencsére némelyikük beállítható úgy, hogy bővített hibainformációkat küldjön vissza; a beállítás alkalmazásához ismét AT-parancsot kell küldenie: AT+CMEE=2.

Fontos megérteni, hogy egy tökéletesen érvényes AT-parancsból is kaphatunk ERROR értéket. Amikor ez történik, ez azt jelzi, hogy a modem olyan állapotban van, amely nem kompatibilis a paranccsal. Ha például megpróbálja megváltoztatni a modem hozzáférési pont nevét (APN), miközben a modem aktív, ez általában ERROR-t ad vissza. A megoldás az, hogy kikapcsoljuk a modemet, elvégezzük az APN módosítását, majd újra bekapcsoljuk.

AT parancstípusok és tesztelés

A látszólag helyes parancsok hibaüzeneteinek problémáját enyhíthetjük a tesztparancs utótag (=?) használatával, amellyel a modemtől megkérdezhetjük, hogy támogatja-e az adott parancsot. Ha nem támogatja, akkor egy ERROR visszatérési kódot kap; tudja, hogy ne adja ki ezt a parancsot. Ha a modem támogatja a parancsot, akkor egy információs választ kapunk, amely jelzi a parancs paramétereit, ha van ilyen, és amelyet OK követ

A fenti példa használható a parancsok tesztelésének bemutatására. Megkérdezhetjük a modemtől, hogy támogatja-e a +CGMI parancsot:

AT+CGMI=?

és a modem OK-t fog válaszolni, mert támogatja ezt a parancsot. Mivel azonban a modem gyártója rögzített, ha megpróbáljuk megváltoztatni, mindig a ERROR eredményt kapjuk. Hogyan próbálhattuk meg megváltoztatni az értékét? A set parancs utótagjával (=):

AT+CGMI="Fintlewoodlewix"ERROR

Figyeljük meg, hogy a karakterlánc adatai idézőjelek közé kerülnek – ez is egy AT parancs követelménye.

Szólj hozzá!