Introducere în comenzile AT

Care dezvoltator care trebuie să lucreze cu un modem celular va trebui să utilizeze la un moment dat ceea ce se numește „comenzi AT”. Comenzile AT sunt, în esență, instrucțiuni de modem. Dezvoltate inițial de producătorul de modemuri Hayes ca mijloc de operare a produselor lor de telefonie fixă dial-up, comenzile AT – ‘AT’ vine de la ‘come to ATtention’ – sunt acum folosite de toate modemurile, de toate tipurile.

Comenzile AT sunt folosite în principal pentru a configura un modem și pentru a stabili conexiunea sa la rețea. Ele pot fi folosite, de asemenea, pentru a obține informații despre starea modemului și a conexiunii, iar acest lucru poate fi foarte util în depanarea aplicațiilor și în confirmarea faptului că un modem funcționează corect: s-a conectat la rețeaua corectă, folosește tehnologia celulară corectă, are roaming-ul activat etc. Vom examina în scurt timp câteva comenzi utile pentru astfel de sarcini.

Cum se trimit comenzile AT

Comandațiile AT sunt trimise modemului sub formă de text simplu prin intermediul unei conexiuni seriale (UART) care cuprinde două fire, unul pentru recepție (RX) și unul pentru transmisie (TX), sau prin USB. Pe teren, un dispozitiv IoT cu tehnologie celulară își va gestiona modemul trimițându-i comenzi AT, dar, în timpul dezvoltării și depanării aplicațiilor, nu este neobișnuit să se apeleze la conexiunea modemului. Acest lucru vă permite să porniți un terminal și să interacționați cu modemul direct, emițând propriile comenzi AT.

Cum să formatați comenzile AT

Comenzile pe care le trimiteți trebuie să respecte următoarea sintaxă de bază:

AT<COMMAND><SUFFIX><DATA>

Aceasta se numește „linie de comandă”. După cum puteți vedea, începe cu AT, urmată de o comandă, un sufix pentru a indica modul de comandă sau ‘tipul’ și, în cele din urmă, unele date, deși nu toate comenzile au nevoie ca acest câmp să fie inclus.

Această structură se numește ‘linie de comandă’ și se termină întotdeauna cu un singur retur de cărămidă. Puteți include mai multe comenzi în linie, fiecare separată de un punct și virgulă:

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

Care linie, indiferent câte comenzi conține, are doar un singur AT, la început. Veți primi o eroare dacă includeți AT de mai multe ori pe o singură linie. Comenzile din liniile cu mai multe comenzi sunt procesate secvențial. Lungimea liniei este de obicei limitată la 80 de caractere.

Câmpurile liniei de comandă AT

Câmpurile <COMMAND> indică ceea ce doriți să facă modemul. Comenzile mai vechi, „de bază”, au nume de un singur caracter; adăugările ulterioare la setul de comenzi, numite comenzi „extinse”, sunt prefixate cu un semn +, cum ar fi AT+COPS (scanare pentru rețele) și AT+CGMI (obține producătorul modemului). Unele comenzi sunt prefixate cu & – de exemplu, AT&F, care resetează setările modemului. Toate comenzile celulare sunt comenzi extinse. În conformitate cu specificația comenzilor AT, comenzile trebuie să cuprindă caractere majuscule, dar multe modemuri permit trimiterea comenzilor și în minuscule. Noi vom rămâne cu standardul.

Valorile câmpurilor <DATA> și <SUFFIX> depind de tipul de comandă, dintre care există patru:

.

Type Suffix Role
Read ? Câștigă o setare de configurare a modemului
Set = Setează o configurație a modemului setting
Execute None Trigger a modem operation
Test =? Verifică dacă un modem suportă comanda numită – dar rețineți că AT+COPS=? funcționează ușor diferit, după cum vom vedea în scurt timp

Vom vedea cum aceste tipuri afectează utilizarea comenzilor AT într-un moment, dar mai întâi să vedem cum răspunde modemul la comenzi.

Răspuns la comanda AT

Când este emisă o comandă AT, în funcție de comanda trimisă, modemul poate sau nu să returneze date, adică să facă ceea ce se numește un „răspuns informativ”. În orice caz, operațiunea de comandă se termină întotdeauna cu întoarcerea de către modem a unui „cod de rezultat”.

De exemplu, să presupunem că cerem numele producătorului modemului folosind următoarea comandă:

AT+CGMI

Aceasta va genera următorul răspuns atunci când este apelat pe un modem u-blox:

u-bloxOK

Care unitate a răspunsului – informația (linia de sus și codul rezultat (linia de jos) – este între paranteze de caracterele Carriage Return și Line Feed (codurile Ascii 0x0D și, respectiv, 0x0A), de unde și linia goală înainte de OK.

OK este un cod de retur; celălalt este ERROR – ați făcut o greșeală. Poate că modemul nu răspunde la comanda AT pe care ați trimis-o, sau ați tastat-o greșit. Poate că ați furnizat prea puține sau prea multe valori de date sau parametri de comandă. În mod implicit, este posibil ca modemurile să nu ofere prea multe explicații. Din fericire, unele dintre ele pot fi setate pentru a returna informații extinse despre erori; din nou, va trebui să trimiteți o comandă AT pentru a aplica această setare: AT+CMEE=2.

Este important să înțelegeți că puteți primi, de asemenea, ERROR de la o comandă AT perfect valabilă. Când se întâmplă acest lucru, este o indicație că modemul se află într-o stare incompatibilă cu comanda respectivă. De exemplu, dacă încercați să modificați numele punctului de acces (APN) al modemului în timp ce acesta este activ, acest lucru va returna de obicei ERROR. Remediul constă în dezactivarea modemului, efectuarea modificării APN și apoi reactivarea acestuia.

Tipurile de comenzi AT și testarea

Puteți atenua problema comenzilor aparent corecte care aruncă erori prin utilizarea sufixului de comandă test (=?), care este utilizat pentru a întreba modemul dacă acesta acceptă comanda dată. Dacă nu o face, veți primi un cod de returnare ERROR; știți că nu trebuie să emiteți această comandă. Dacă modemul suportă comanda, veți primi un răspuns informativ care indică parametrii comenzii, dacă are vreunul, urmat de OK.

Exemplul de mai sus poate fi folosit pentru a demonstra testarea comenzii. Putem întreba modemul dacă suportă comanda +CGMI:

AT+CGMI=?

și acesta va răspunde OK deoarece suportă această comandă. Cu toate acestea, deoarece producătorul modemului este fix, încercarea de a-l schimba va avea întotdeauna ca rezultat ERROR. Cum am fi putut încerca să modificăm valoarea sa? Cu un sufix de comandă set (=):

AT+CGMI="Fintlewoodlewix"ERROR

Rețineți cum șirul de date este plasat între ghilimele duble – și aceasta este o cerință a comenzii AT.

.

Lasă un comentariu