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.